O10 automation completion bundle — 02-generic-target-source-intake-result
O10 Report 02 — Generic target/source intake (BRANCH 1)
- macro:
v0.6-o10-automation-completion-program-bundle - date_utc: 2026-05-21 · gate: BRANCH 1 · result: PASS — implemented
1. The gap (O9 Report 04 §3)
Two document front-ends existed and both were hard-wired to the Incomex Constitution:
cutter_agent/dryrun.py: ICX-CONST snapshot MARK CLI — 5 zone
headers + 15 NGUYEN_TAC + ICX marker
census. Constitution-only grammar.
discover.LiveDryRunDiscoverer: re-cuts an already-enacted Constitution
as a shadow dry-run; REQUIRES a
LiveConstitutionSurvey — cannot intake
a brand-new document.
O8F's F3 generalised the governance recording (no N=60 in leg-B / verify recorders); it did not generalise the document front-end.
2. Key finding — the orchestrator core was ALREADY generic
Inspection of the orchestrator phases confirmed they carry no ICX-CONST coupling and no N=60 assumption:
phases/source_pin.py: discoverer.find_source_document / latest_source_version
— abstract; any document_id.
phases/mark.py: MAX_CANDIDATES_PER_DOC = 1000; refuses 0; no N=60.
phases/cutplan.py: deterministic rebuild + writer_digest; vocab from
discoverer.vocab_snapshot(); no fixed cardinality.
discover.InMemoryDiscoverer: a fully generic seed-driven simulator.
The only missing piece was a front-end that turns a new small structured document into the rows the (already-generic) phases consume.
3. What was implemented
New module cutter_agent/orchestrator/generic_intake.py (+1 file):
parse_generic_document(): deterministic, fail-closed, stdlib-only parser
(see Report 03).
GenericDocument / GenericUnit: parsed payload — title/body/source-span,
content_hash, manifest_digest.
GenericIntakeDiscoverer: subclass of InMemoryDiscoverer; classmethod
from_generic_document() seeds source_documents,
versions, mark_rows, grant_matrix, vocab,
lifecycle — so source_pin..closeout runs in
Mode.DRYRUN with NO production source_document
row and NO live DB read.
build_generic_dryrun_runner(): wires runner+store+KB for a dry-run walk.
CLI: `parse` + `dryrun` subcommands.
4. ICX-CONST historical path preserved
cutter_agent/dryrun.py: byte-untouched — still cuts ICX-CONST.
discover.LiveDryRunDiscoverer: byte-untouched.
test_icx_const_parser_still_present: asserts ZONE_HEADERS == 5 +
GRAMMAR_PROFILE intact.
The generic path is additive — a parallel front-end, not a rewrite.
5. Synthetic / fixture target — no production mutation
GenericIntakeDiscoverer is an in-memory simulator: a synthetic small
target needs no source_document_registry row and no DB write.
A 3-unit fixture (tests/fixtures/generic-small-target-sample.md) drives
the full Mode.DRYRUN E2E. The ICX-CONST-only assumption is removed for
the dry-run path — GAP8 precondition P-A is CLOSED.
6. Verdict
branch_1: PASS — generic target/source intake implemented; ICX-CONST
historical path preserved; synthetic-fixture dry-run needs no
production source_document row.