Skip to content

Resolve cross-repo edges by name join; schema-checked outputs; deeper interviews (6.4.0) - #18

Merged
GentBajko merged 11 commits into
mainfrom
feat/schema-payloads
Sep 7, 2026
Merged

Resolve cross-repo edges by name join; schema-checked outputs; deeper interviews (6.4.0)#18
GentBajko merged 11 commits into
mainfrom
feat/schema-payloads

Conversation

@GentBajko

Copy link
Copy Markdown
Owner

Capstone 6.1.0 → 6.4.0. Three things: the cross-repo edge design stops guessing, every generated file gets a machine-checked format, and the three shallow interviews gain the completion tests the other two already had.

Pairs with quarry 0.2.0, now on main.

Edges are resolved, not guessed

No repository contains another repository's name. A publisher holds a topic name, a route holds a path, a client holds a base URL. So map writes kind, name, site and schema into 09-interfaces.md's frontmatter and never writes to or from. Quarry joins two repos' declarations on (kind, name) and supplies the far end. A person answers only where that join is ambiguous, through one digest read from quarry docs index --json. A name a person wrote is never edited by any run, which is hard rule 3's second exception.

Payload sections name a model instead of copying it. 02-models.md's Fields and types now pins one ### <Entity> heading per entity with a Field | Type | Required table, and a Model: line in the interfaces chapter resolves against it, so a schema change lands in one place and quarry check reads it from there.

One machine-readable output schema

references/schema.txt defines every file capstone writes: required frontmatter keys, heading sequence, table columns. map-check.sh reads it at runtime and keeps no copy, so the rule lives in two places rather than three, and lint checks 20 and 21 assert the prose still agrees with it.

Coverage goes from chapters only to logic/, uiux/, mockup/, the index and standards. Part 8 gains two findings beside the missing heading: a heading out of order, and a table missing a column. A page written by an older capstone reports that once instead of every heading at once, and a page with no globs now reports which capstone wrote it, informationally, since nothing else ever surfaced that gap.

The interviews that stopped early

uiux and standards finished when the model judged itself done. Both now gate on an inventory the way logic gates on its dimensions: 27 system and 11 screen items for uiux, 17 domains and 92 items for standards, each with a probe that makes the question and a statement of where the answer lands. Standards gains the eight domains an enterprise reader expects and no interview asked for: security, accessibility, API conventions, logging and privacy, performance budgets, documentation, versioning and release, CI gates.

uiux renders a preview before its gate, one self-contained HTML file with the flagship viewport and a style tile, published as an artifact where the harness has one, so the user steers before formalizing rather than after. Brand assets are asked for as SVG up front, listed in 02-system.md's Assets table with a status per file, committed under uiux/assets/ while rasters stay ignored, and moved into the tree by build once it scaffolds.

stack derives its capability list from what the chapters already record rather than a stock list, and always presents options ending in write it ourselves with its honest cost. The ladder recommends and names its rung; it no longer decides alone.

The architecture interview asks what each channel carries and what fields each entity has, so the first quarry check compares against decisions rather than inference. The readback gains a third half, coverage, which walks each stage's inventory against its final outputs and names what nobody asked.

Also

map check splits into a bash gate that needs no API key and a model review printing MAP REVIEW:. The content_hash recipe becomes git ls-files -s --full-name, since git ls-tree never expanded wildcard globs and every hash written over one was the empty-input hash. docs/capstone/capstone.json is committed and shared, since a config on one machine is not a standard; expertise and teaching_mode stay personal.

Checks

bash skills/core/scripts/lint-sync.sh ends lint-sync: all invariants hold, with 24 numbered checks and a git-fixture suite covering the new findings. The gate runs clean against two real docs areas and the four-repo fixture estate in the quarry repo.

Upgrading

Existing docs areas report written by an older capstone informationally until each stage is re-run; nothing fails a build on it. The first standards re-run is a longer conversation than before, which is the point.

Parts 1, 7 and 8 of map check (staleness, ledger fragments, schema:
stamps, headings, Site paths, secret shapes) are
skills/core/scripts/map-check.sh, which prints the MAP CHECK: verdict
and needs no API key; the CI template runs it. The model keeps pointer
drift, absorption, re-vetting and coverage and ends with MAP REVIEW:,
with a deterministic pointer sample. The content_hash recipe becomes
git ls-files -s --full-name, since ls-tree never expanded wildcard
globs. lint-sync gains a headings sync check and a git-fixture smoke
run of the script.
One ### <Name> section per row with a Field | Type | Required table,
the producer's from its serializer, the consumer's listing only the
fields it dereferences. quarry check compares exactly these tables.
map-check.sh reports a row without its section.
The interfaces pass fills known_as from the deploy sources the
operations topic reads, writes To: unknown rather than guessing a
consumer, and, with cross_repo auto and quarry on PATH, resolves To/From
cells against quarry docs list --json. groom and plan treat a by_name
deps row as a lead.
Under workspaces, <repo> for quarry calls is the workspace name, which
is also the quarry target name.
redact names env-var patterns whose values the operations chapter never
quotes. map-check.sh scans every generated file, markdown or not, for
the six secret shapes shared with quarry and reports the pattern name
only.
Manifests, template pin, README upgrade note, help text reconciled.
Found by an end-to-end run: a scalar or missing known_as passed the gate
and then cost every alias-resolved edge on the quarry side.
docs/commands.md lists the payload-section check part 8 performs.
… (6.3.0)

No repository holds another repository name: a publisher holds a topic,
a route holds a path, a client holds a base URL. So map writes kind,
name, site and schema into 09-interfaces.md frontmatter and never writes
to or from. Quarry joins two repos declarations on (kind, name) and
supplies the far end; a person answers only where that join is
ambiguous, through one digest read from quarry docs index --json. A to
or from already in the block came from that answer and no run edits it,
which is hard rule 3's second exception.

Payload sections name a model instead of copying it: 02-models.md's
Fields and types now pins one heading per entity with a Field, Type,
Required table, and a Model: line in the interfaces chapter resolves
against it, so a schema change lands in one place and quarry check reads
it from there.

The project config is committed and shared. capstone.json holds the
settings every run on the repo follows, so a config on one machine is
not a standard; the initializer un-ignores it and expertise and
teaching_mode stay personal.

map-check gains four findings over the block: a row with no site, an
unverifiable site path, a schema whose entity is absent, and a payload
section that is neither a table nor a model reference.
Chapter headings were the only thing the gate validated, and it held its
own copy of them that a lint regenerated from topics.md and compared.
Everything else capstone writes went unchecked: logic scenarios, uiux
chapters and screens, mockup screens, the index. Table columns were
prose, so capstone's writers and quarry's parsers could drift apart in
silence.

references/schema.txt is now the definition: one record per output type
with its required frontmatter keys, its heading sequence, and the
columns of the tables under those headings. map-check.sh reads it at
runtime and keeps no copy, so the rule lives in two places rather than
three, and lint checks 20 and 21 assert the prose still agrees with it.
An unreadable schema degrades to the key check with a line saying so.

Part 8 gains two findings beside the missing heading: a heading out of
order, naming both positions, and a table missing a column. A heading
with no table under it is still fine, since topics.md sanctions a
None-found section; a ### entity section with no field table is not,
since it has no such out.
…ed options

uiux and standards finished when the model judged itself done, which it
does early and silently. Both now gate on an inventory the way logic
gates on its dimensions: 27 system and 11 screen items for uiux, 17
domains and 92 items for standards, each with a probe that makes the
question and a statement of where the answer lands. Standards gains the
eight domains an enterprise reader expects and no interview asked for:
security, accessibility, API conventions, logging and privacy,
performance budgets, documentation, versioning and release, CI gates.

uiux renders a preview before its gate, one self-contained HTML file
holding the flagship viewport and a style tile, published as an artifact
where the harness has one, so the user steers before formalizing rather
than after. Brand assets are asked for as SVG up front, listed in
02-system's Assets table with a status per file, committed under
uiux/assets while rasters stay ignored, and moved into the tree by build
once it scaffolds.

stack derives its capability list from what the chapters already record
rather than from a stock list, and always presents options ending in
write it ourselves with its honest cost. The ladder recommends and names
its rung; it no longer decides alone.

A page with no globs now reports which capstone wrote it, since no
refresh path regenerates standards.md or an interview-derived scenario
and the version gap was otherwise invisible. It is informational, like a
waiting changelog fragment: true, worth showing, and nobody's failed
build. A page behind the current version skips the heading and table
checks, so one root cause is one finding instead of ten.
…e readback

The models chapter now pins a field table per entity and an interfaces
row points at one by name, but the architecture interview never asked
for the fields, so a prescriptive chapter was written from whatever the
model inferred and the first quarry check compared against a guess. The
Communication checklist now asks what each channel carries in both
directions, and the entity checklist asks for fields with type and
optionality and an enum's accepted values. The exhaustiveness criterion
covers them, so it stays checkable.

The readback gains a third half, run first: coverage. Every stage was
gated on an inventory, so walking each inventory against that stage's
final outputs finds the items nobody asked about. One digest, like
misplacement, naming the stage, the item and the file the answer lands
in. An empty digest is reported in one line rather than passed over, so
the user knows it ran.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @GentBajko, your pull request is larger than the review limit of 150,000 diff characters

@GentBajko
GentBajko merged commit 82094d4 into main Sep 7, 2026
1 check passed
@GentBajko
GentBajko deleted the feat/schema-payloads branch September 7, 2026 02:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant