Prompt file imported from cstokes0091/META-COMPILER (
.github/prompts/software-3.0-bootstrap.prompt.md). Copyright stays with the author.
Software 3.0 Bootstrap — Meta-Compiler as a Pure-Prompt Runtime
Intent
Run the full meta-compiler pipeline end-to-end as a pure Software 3.0 program: the LLM is the runtime; this prompt is the program; workspace-artifacts/ is the heap. Given a problem statement and a seed directory, drive Stage 0 → Stage 4 (ingest, wiki v1/v2, decision log, implementation plan, workshop compile, execution, pitch) without invoking meta-compiler. One-shot helper scripts explicitly named below are allowed for extraction or inspection; the point is to remove the CLI as the bookkeeping runtime, not to ban every executable.
This prompt is a companion to software-3.0-conversion.prompt.md. The conversion prompt converts the existing Python+prompt system; this one expresses what the system DOES as a single prompt and lets the LLM execute it directly.
This is an intentional trade. You give up:
- the schema validation in
meta_compiler/validation.py - the citation/REQ ID minting in the CLI
- the artifact path ownership in
meta_compiler/artifacts.py - the seed-immutability enforcement in
validate_seed_immutability - the non-overridable hook gating in
.github/hooks/
You replace each with explicit checks the orchestrating LLM performs at each phase boundary, encoded in the §Determinism Replacements section below. Output reproducibility now equals LLM consistency — accept that fragility.
When (not) to use
Use this when: teaching the workflow without CLI overhead; probing what breaks when determinism is removed; lightweight one-shot bootstraps where durable artifacts aren't required.
Do NOT use this when: running production; needing REQ-NNN traceability across re-runs; requiring seed immutability across team handoffs; validating against schema before downstream consumers read artifacts. For any of those, run the Python CLI via the standard Stage 0–4 prompts.
Arguments
--problem-statement <path>(required) — markdown file describing the problem, goals, success criteria.--seeds <dir>(default:<target>/seeds/) — source seed directory. If it is outside<target>/seeds/, mirror it into<target>/seeds/before Stage 1A and treat the mirrored tree as immutable thereafter.--target <dir>(default:./workspace-artifacts/) — output root. Must matchmeta_compiler/artifacts.py::build_pathslayout exactly.--stage <id>— run a single stage (stage-0…stage-4). Default: full pipeline.--scope full|wiki-only|workshop-only—wiki-onlystops after Stage 1A2 (wiki v2);workshop-onlystops after Stage 3.
How this works
The repo's existing .github/prompts/stage-*.prompt.md files describe each stage as preflight CLI → orchestrator fan-out → postflight CLI. You execute the orchestrator fan-outs as written (they are already pure-LLM work) AND substitute equivalent reasoning for every CLI call, producing the same artifacts at the same paths with the same shapes.
Do not invent a new pipeline. The existing stage prompts are the canonical workflow source. This bootstrap prompt only tells you how to substitute the deterministic CLI half.
If .github/ prose and executable code disagree, prefer meta_compiler/cli.py and meta_compiler/stages/*.py as the current contract. Record the mismatch in your run notes instead of normalizing it away.
Anchor Texts (read first)
Same Software 3.0 framing as the conversion prompt — Karpathy's "Software Is Changing (Again)" (YC AI Startup School, June 2025). In particular hold these in mind:
- Heterogeneous 1.0/3.0 is the right target. This prompt deliberately violates that to make the 3.0-only behaviour visible. Fragility is the point.
- Generation-verification loops are how you stay honest without hooks: every artifact you write, you re-read in fresh attention to verify before moving on.
- Build for agents. Every artifact you write must be machine-readable enough that a downstream LLM (or
meta-compiler validate-stage, if anyone runs it later) can parse it without prose interpretation.
Inputs (read first, before Stage 0)
- The user's
--problem-statementfile. CLAUDE.md,LLM_INSTRUCTIONS.md,META-COMPILER.md— invariants and stage workflow.meta_compiler/artifacts.py— canonical artifact paths. Every file you write must land at exactly the pathbuild_pathswould produce.meta_compiler/validation.py— the schemas you must satisfy. Treat the validators as a spec for what you produce.- Every
.github/prompts/stage-*.prompt.mdand every relevant.github/agents/*.agent.md— the stage-specific reasoning lives here. Don't re-derive it. .github/docs/hooks.md— the safety rails you are about to disable. Each named hook becomes a manual check you owe at the corresponding phase boundary.--seedsdirectory listing.
CLI substitution table
For every meta-compiler X call referenced in a stage prompt, do the substitute action below. Write the same artifacts at the same paths.
| CLI command | Pure-LLM substitute |
|---|---|
meta-init |
Create <target>/ per artifacts.py::build_paths. If --seeds points elsewhere, mirror it into <target>/seeds/ first and treat that mirrored tree as the tracked source of truth. Write manifests/workspace_manifest.yaml (project name, type, problem-statement hash, created-at). Provision .github/agents,prompts,skills,instructions if missing (copy from this repo or reference the canonical templates). |
ingest (Stage 1A preflight) |
Walk <target>/seeds/. Classify each path as seed_kind: doc or code (extension + bindings check). Write runtime/ingest/work_plan.yaml with work_items[] and repo_map_items[]. For binary docs, prefer an existing extracted text sidecar; otherwise use the repo's document-reading helpers as one-shot extraction aids. Mint src-NNN and src-<repo>-<slug> citation IDs deterministically (sorted seed list, monotonic counter). |
ingest-validate |
For each wiki/findings/*.json produced by the orchestrator fan-out, manually validate against the schema in validation.py::validate_findings_file. Reject and re-spawn the subagent on schema failure — do not silently coerce. |
research-breadth |
Aggregate wiki/findings/*.json into per-source pages (wiki/pages/source-<id>.md), per-concept pages (concept-<slug>.md), code-file pages (code-<id>.md), and code-repo pages (code-repo-<name>.md). Write wiki/citations/index.yaml with every claim's source id and locator. |
wiki-reconcile-concepts / wiki-apply-reconciliation |
Bucket concepts[].name across findings by normalized stem; spawn concept-reconciler subagents (max 4 parallel); persist returns to runtime/wiki_reconcile/subagent_returns/{bucket}.json; validate via validate_concept_reconciliation_return; promote canonical pages, merge sources:, append alias source notes, rewrite losers as type: alias. Stamp every write source: concept_reconciliation. |
wiki-cross-source-synthesize / wiki-apply-cross-source-synthesis |
For every canonical page with ≥2 source citations covered by ≥2 findings, fan out cross-source-synthesizer; persist returns; deterministically rewrite Definition / Key Claims / Open Questions while preserving frontmatter, H1, Formalism, Relationships, Source Notes. Write wiki/reports/cross_source_synthesis_applied_v{N}.yaml. |
wiki-link --version 2 |
Index every canonical page's aliases: list and rewrite intra-wiki links so any mention of an alias resolves to the canonical page. |
research-depth |
Run the Schema Auditor / Adversarial Questioner / Domain Ontologist debate as written in stage-1b-evaluators.prompt.md; produce wiki/reports/merged_gap_report.yaml, the supporting evaluator reports, and the v2 sync artifacts the real CLI would emit. |
review |
Spawn three fresh-context reviewers (Optimistic / Pessimistic / Pragmatic). Each emits PROCEED or ITERATE with evidence. Loop 1B↔1C until all three PROCEED or the loop budget is hit; write both wiki/reviews/review_verdicts.yaml and wiki/reviews/1a2_handoff.yaml because Stage 2 consumes the handoff artifact. |
elicit-clarify --start |
Write runtime/stage2/clarify/clarify_request.yaml. Conduct the short clarification dialog from stage-2-clarify.prompt.md, then persist runtime/stage2/clarify/clarify_response.yaml with the request hash and duplicated top-level fields the topic extractor reads. |
wiki-search --scope stage2 |
This is Stage 2 Step 0. Write runtime/stage2/wiki_search/work_plan.yaml and runtime/stage2/wiki_search/wiki_search_request.yaml. If fresh results.yaml already exists, return the cached path and proceed. Otherwise invoke @wiki-search-orchestrator, which writes one topic result file per work item under runtime/stage2/wiki_search/results/. |
wiki-search --apply |
Validate each per-topic YAML against the topic-result schema and consolidate the set into runtime/stage2/wiki_search/results.yaml. Only after this step should elicit-vision --start proceed to brief rendering. |
elicit-vision --start |
Require runtime/stage2/clarify/clarify_response.yaml and fresh Stage 2 wiki-search results unless you deliberately take the --skip-wiki-search escape hatch and record why. Render runtime/stage2/brief.md, runtime/stage2/transcript.md, and runtime/stage2/precheck_request.yaml. |
elicit-vision --finalize |
Parse ## Decision Block sections from the completed transcript; mint REQ-NNN for behaviours and CON-NNN for constraints (carry kind + verification_required); write decision-logs/decision_log_v{N}.yaml. |
audit-requirements |
For every REQ/CON, verify the citing finding still exists in wiki/findings/; emit decision-logs/requirements_audit.yaml listing PASS / GAP / DRIFT entries. |
plan-implementation --start |
Render runtime/plan/brief.md from decision log + findings + citations, including planner evidence context, trigger vocabulary, and cited finding summaries. |
plan-implementation --finalize |
Validate the human-edited decision-logs/implementation_plan_v{N}.md has all six required sections and a capability_plan YAML fenced block; extract the YAML to decision-logs/plan_extract_v{N}.yaml. |
compile-capabilities |
Read decision log + plan extract (or fall back to 1-to-1 row mapping if absent) + cited findings; emit scaffolds/v{N}/capabilities.yaml with when_to_use, required_finding_ids, requirement_ids, constraint_ids, verification_required, and (if v2 plan extract) phase/objective/implementation_steps/acceptance_criteria/explicit_triggers/evidence_refs. |
extract-contracts |
Walk agents_needed[], architecture[], code_architecture.data_model; dedupe IO shapes; write one contracts/{id}.yaml per shape + contracts/_manifest.yaml; rewrite capabilities with real io_contract_ref values. |
synthesize-skills |
Render one skills/{capability_name}/SKILL.md per capability from cited findings only — no templated slots; render skills/INDEX.md. Pull concrete implementation_steps and acceptance_criteria from the plan extract when present. |
workspace-bootstrap |
Confirm the static repo-level execution palette (implementer / reviewer / researcher agents under .github/agents/) and preserve implementation-planner as the upstream planning surface. Write EXECUTION_MANIFEST.yaml, DISPATCH_HINTS.yaml, SCAFFOLD_MANIFEST.yaml, and verification/REQ_TRACE.yaml keyed by both REQ-NNN and CON-NNN. Emit one verification/{hook_id}_spec.yaml acceptance spec per verification_required: true capability (skip the others; record empty hook_ids: [] in REQ_TRACE). Create empty output buckets per project_types.scaffold_subdirs_for(project_type). |
phase4-finalize --finalize |
After the per-capability ralph loops produce fragments under executions/v{N}/work/<cap>/, compile executions/v{N}/FINAL_OUTPUT_MANIFEST.yaml; if final/ exists, cite assembled_deliverables[] keyed by ev-final-NNN. Hand off to @pitch-writer to render pitches/. |
final-synthesize-start / --finalize |
Preflight: write runtime/final_synthesis/work_plan.yaml + synthesis_request.yaml. Fan out one synthesizer per modality (@library-synthesizer / @document-synthesizer / @workflow-synthesizer). Persist returns to runtime/final_synthesis/subagent_returns/{modality}.json. Postflight: validate each, run REQ-trace continuity check (every REQ-NNN mentioned in fragments must appear under final/, modulo --allow-req-drop), atomically swap final/.tmp/ into place, emit executions/v{N}/final_synthesis_report.yaml. |
validate-stage --stage <N> |
Manually re-run the invariants for stage N from validation.py. Treat any failure as STOP — fix it before proceeding. |
If you hit a CLI command not in this table, stop and ask the operator — don't improvise.
Workflow
For each stage, in order (or just the one named by --stage):
- Read
.github/prompts/stage-N-*.prompt.mdend-to-end. - Execute the orchestrator fan-outs as written (they are already pure-LLM work —
seed-reader,concept-reconciler,schema-auditor, etc., dispatched via the Agent tool). - For every
meta-compiler Xcall the stage prompt would issue, do the substitute action from the table above. Write the same artifacts at the same paths in the same shape. - Run the §Determinism Replacement check for that phase boundary.
- Stop and report the artifacts produced + the check results before moving to the next stage.
For Stage 2 specifically, preserve the real ordering: clarify → wiki-search preflight/orchestrator/apply → elicit-vision --start → dialog → elicit-vision --finalize → requirements audit. Only use the --skip-wiki-search escape hatch if you explicitly record why the cached or missing evidence is still acceptable.
If --scope wiki-only, stop after Stage 1A2. If --scope workshop-only, stop after Stage 3 (workspace-bootstrap).
Determinism replacements (manual checks the LLM must perform)
These are the hooks .github/docs/hooks.md would have run. With the Python CLI absent, you owe each check at the corresponding phase boundary. Do not skip any.
- After Stage 0: Workspace tree exists per
build_paths; manifest written; problem-statement hash recorded. - After Stage 0 seed mirroring: If
--seedspointed outside<target>/seeds/, the mirrored tree exists under<target>/seeds/, and all later stages read only from that tracked location. - After ingest preflight: Every seed appears in
work_plan.yaml::work_items[]; every code-bound prefix has arepo_map_items[]entry; citation IDs are unique and monotonic. - After each
seed-reader/code-reader/repo-mapperreturn: JSON validates against the matching schema; reject and re-spawn on failure. - After research-breadth: Every claim in
wiki/pages/*has a citation id present incitations/index.yaml; every concept page lists ≥1 source. - After reconcile/cross-source apply: No canonical page lost its frontmatter, H1, Formalism, Relationships, or Source Notes; every alias page is
type: aliasand points to a real canonical. - After 1B↔1C loop: All three reviewers PROCEED, or the loop is explicitly bounded with a recorded reason.
review_verdicts.yamland1a2_handoff.yamlboth exist. - After Stage 2 clarify:
runtime/stage2/clarify/clarify_response.yamlexists, itsrequest_hashmatches the request used, and the duplicated top-level fields are populated for the topic extractor. - After Stage 2 wiki-search apply:
runtime/stage2/wiki_search/results.yamlexists or the freshness cache was explicitly hit; every topic inwork_plan.yamlhas either a valid per-topic result file or a recorded failure. - After elicit-vision finalize: Every REQ/CON id is unique;
verification_requiredis set on every CON; every REQ cites ≥1 finding id. - After audit-requirements: Zero GAP entries (or recorded operator override).
- After plan-implementation finalize: Markdown has all six sections; YAML extract round-trips;
capability_planids are unique. - After workspace-bootstrap:
REQ_TRACE.yamllists every REQ and CON; everyverification_required: truecapability has averification/{hook_id}_spec.yamlfile; static palette agents exist. - After final-synthesize finalize: Every
REQ-NNNmentioned in fragments underexecutions/v{N}/work/appears infinal/(or is in--allow-req-drop);final/.tmp/is gone. - Before declaring "done":
git statusshows no new edits outside<target>/attributable to this run. Pre-existing unrelated changes may remain.
If any check fails, stop, report, and repair before continuing. Failed checks under this prompt are exactly the failures the hooks would have caught — they are not warnings.
Constraints (load-bearing — do not soften)
- Preserve every rule in
CLAUDE.md§ Evidence Quality Rules: data over folklore, seed immutability, citation/requirement IDs survive transformations, findings JSON stays schema-valid, scaffold output drawn from cited findings only. - The repo-level
implementation-planneragent remains the Stage 2.5 planning surface; Stage 4 itself binds only to the execution trio (implementer/reviewer/researcher). Do not invent domain-named scaffold agents. - Citation IDs and REQ/CON IDs are forever. Once minted, they do not renumber.
- Do not modify files under
<target>/seeds/after they are tracked or mirrored there. - Do not create markdown docs outside the artifact tree unless explicitly requested.
- If
meta_compiler/exists in this repo, do not edit it — this prompt's purpose is to operate WITHOUT it, not to replace it.
Postconditions
A run with --scope full produces the same artifact tree as a normal Python-driven run:
workspace-artifacts/populated perartifacts.py::build_paths— manifests, seeds, wiki v1/v2, citations, findings, decision-logs (decision_log + audit + implementation_plan + plan_extract), scaffolds/v{N}/ (capabilities, contracts, skills,verification/{hook_id}_spec.yaml,REQ_TRACE.yaml, manifests, output buckets), executions/v{N}/ (work fragments + final/ + FINAL_OUTPUT_MANIFEST + final_synthesis_report), pitches/.- Every Determinism Replacement check passed at every phase boundary.
git statusshows no new edits outside the artifact tree attributable to this run. Pre-existing unrelated changes may remain.- A second LLM, given only the artifacts and
validation.py, can validate the run without reading this prompt's transcript.
If any Determinism Replacement check failed and was not repaired, the run did not succeed regardless of what artifacts exist on disk.