Uh oh!
There was an error while loading. Please reload this page.
docs: re-derive the os compile / os validate transcripts from real runs - #9151
Merged
Conversation
…ns (#9092) The three authoring commands collapsed their per-concern authoring checks into one rule registry (#4409), so they now print a single step for the whole table. Two sample transcripts still reproduced the pre-#4409 step list. Both blocks are re-derived from real runs of the CLI built at this commit, not hand-edited: retired steps are replaced by the steps a run actually emits rather than deleted, since a transcript is a reproduction of program output. cli.mdx, `os compile`: five retired step lines replaced by the two the registry prints (`Running author-time rules (41)`, `Checking capability providers`). build-with-claude-code.mdx, failing `os validate`: the retired expression step, the `Expression validation failed` header (now `Author-time rules failed`), the missing `rule: ... at ...` trailer, and a `EEXIT: 1` line the CLI no longer emits at all -- `isExitSignal` in packages/cli/src/utils/format.ts swallows it. build-with-claude-code.mdx, clean `os validate`: the blank line validate.ts prints unconditionally between the manifest line and the stats. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
os-steve
marked this pull request as ready for review
August 16, 2026 15:37
Uh oh!
There was an error while loading. Please reload this page.
os-steve added a commit
that referenced
this pull request
Aug 17, 2026
…9152) Both pages printed `Data: 1 Objects 6 Fields`, a line no run can emit: the object count comes from a project whose starter object was deleted and the field count from one where it was kept. Measured against the CLI built at origin/main, scaffolding `support-desk` from the `blank` template exactly as step 1 describes and applying the page's own listings: Data: 2 Objects 6 Fields UI: 1 Apps 1 Views 1 Actions Runtime: 3 plugins `6 Fields` was right all along -- 2 from the scaffolded `note` object plus 4 from the page's ticket. `1 Objects` was the wrong number. Deleting the starter object instead yields `1 Objects 4 Fields`; both variants were run. Also makes the run reconstructible from the page: adds the Support-nav app listing the prose already promises but never showed, and names the starter `note` object the counts depend on. Timings are machine identity, not fixture identity, and are left as #9151 left them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
akarma-synetal pushed a commit
to akarma-synetal/framework
that referenced
this pull request
Aug 17, 2026
…bjectstack-ai#9152) (objectstack-ai#9262) Both pages printed `Data: 1 Objects 6 Fields`, a line no run can emit: the object count comes from a project whose starter object was deleted and the field count from one where it was kept. Measured against the CLI built at origin/main, scaffolding `support-desk` from the `blank` template exactly as step 1 describes and applying the page's own listings: Data: 2 Objects 6 Fields UI: 1 Apps 1 Views 1 Actions Runtime: 3 plugins `6 Fields` was right all along -- 2 from the scaffolded `note` object plus 4 from the page's ticket. `1 Objects` was the wrong number. Deleting the starter object instead yields `1 Objects 4 Fields`; both variants were run. Also makes the run reconstructible from the page: adds the Support-nav app listing the prose already promises but never showed, and names the starter `note` object the counts depend on. Timings are machine identity, not fixture identity, and are left as objectstack-ai#9151 left them. Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
os-steve added a commit
that referenced
this pull request
Aug 18, 2026
…scription drop (#9342) #9263 makes `create-objectstack` drop the blank template's own `manifest.description` at scaffold time, so no scaffolded project prints "Minimal ObjectStack environment — a clean slate for building." any more. Three pages still quoted it inside a scaffolded-project transcript. Re-derived from real runs against the CLI built at origin/main (b2d9e04), not hand-edited: * `os validate`, Support Desk — scaffolded `support-desk` from the `blank` template and applied build-with-claude-code.mdx's own listings (ticket object, resolve action, ticket views, Support app). Confirms #9152's work still reconstructs: the page's listings alone reproduce `2 Objects 6 Fields` / `1 Apps 1 Views 1 Actions` / `3 plugins`, and `Running author-time rules (41)`. * `os info`, my-app — scaffolded `my-app` from the same template with the ticket object, one view and one action (no app), reproducing `1 Views 1 Actions` and both object rows verbatim. Both printers guard on presence (`validate.ts:294`, `info.ts:64`), so the row does not become empty or `undefined` — it disappears entirely, and the surrounding rows are byte-identical to the run. Verified mechanically: each edited block now matches its run line for line, modulo the config path and the timings, which are machine identity and are left as #9151/#9262 left them. `cli.mdx`'s manifest-configuration example still shows a `description:` key. That is a hand-authored config, not a scaffolded-project transcript, and `description` remains an authorable manifest field — only the scaffolder's carry-over went away. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
This was referenced Aug 18, 2026
Merged
os-steve pushed a commit
that referenced
this pull request
Aug 18, 2026
…were run against (#9430) Both sample blocks in cli.mdx's Build & Validate section print `2 Objects 6 Fields` / `1 Views 1 Actions` / `3 plugins`, and the `os info` block also names `my_app_note` and `my_app_ticket`. Nothing on the page says where that project comes from: the page's own walkthrough builds a DIFFERENT fixture (`os generate object customer` / `action approve` / `flow onboarding`), which would print `my_app_customer` and a `Logic:` row. A reader who follows the page cannot reproduce the transcripts and has no way to tell whether the page or their own run is wrong. No printed value changes — the transcripts are verified against real runs (#9092/#9151 for `os compile`, #9342/PR #9429 for `os info`) and this is a pure insertion. What is added is the provenance those runs had and the page did not: * a Callout under the `os info` block naming the whole fixture — `npm create objectstack@latest my-app` (the `blank` starter: two-field `my_app_note`, three connector plugins) plus the four-field ticket object, the view and the action listed in build-with-claude-code.mdx, renamed out of `support_desk_` into `my_app_`, with that page's `support` app deliberately left out; * why the `UI:` row carries no `Apps` (printMetadataStats drops zero counts, packages/cli/src/utils/format.ts); * which lines are NOT fixture identity: timings are machine identity, the author-time rule count and artifact size track the CLI version; * one line under the `os compile` block pointing at that note, since its counts come from the same fixture and had the same gap. Every component of the counts is checkable in-tree: the blank template's note.object.ts (2 fields) and its three connector plugins, the ticket listing's 4 fields, one view, one action, and the scaffolder's namespace rewrite (rewrite-identity.ts) that makes `blank_note` read `my_app_note`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#9092
#4409collapsed the per-concern authoring checks into one registry, so the threeauthoring commands print one step for the whole table. Two sample transcripts still
reproduced the pre-#4409 step list. Both blocks are re-derived from real runs, not
hand-edited — retired steps are replaced by what a run actually emits, never deleted,
because a transcript is a reproduction of program output and deleting lines manufactures
output just as surely as leaving stale ones does.
How the transcripts were produced
CLI built from this branch, then run against two real projects:
cli.mdx·os compileblankstarter scaffolded frompackages/create-objectstack/src/templates/blanknode packages/cli/bin/run.js compilebuild-with-claude-code.mdx·os validatenode packages/cli/bin/run.js validateThe failing run is reproducible rather than remembered: the fixture carries the page's own
bare-reference predicate,
visible: 'status != "resolved"', onresolve_ticket. Flippingthat one string to
record.status != "resolved" && record.status != "closed"turns thesame fixture into the clean run — so both blocks on that page come from one project in two
states, which is exactly what the page narrates.
Cross-checked against the sources afterwards, never derived from them:
validate.tshasfive
printStepcalls andcompile.tshas twelve, several conditional. GreppingprintStepwould have produced a transcript no run emits — the same defect this cardexists to fix, reached from the opposite direction.
What changed
cli.mdx·os compile— five retired step lines replaced by the two a run prints:build-with-claude-code.mdx· failingos validate— four defects, one more than thecard listed:
→ Validating expressions (ADR-0032)...⇒→ Running author-time rules (41)...✗ Expression validation failed (1 issue)⇒✗ Author-time rules failed (1 issue)rule: expression-invalid at ...trailer was missing entirely — added✗ EEXIT: 1is not emitted at all and was removed. Not in the card. Verified bothpiped and under a real TTY;
isExitSignalinpackages/cli/src/utils/format.ts:131is what swallows it, and
migrate/meta.ts:533carries a comment about suppressingexactly this line. The
✗ Author-time rules failedheader already carries the failuresignal, and the run still exits
1.build-with-claude-code.mdx· cleanos validate— the blank linevalidate.ts:297prints unconditionally between the manifest line and the stats.
Two measurements that correct the card
The
source:line is correct and was kept. The card predicted findings now carry "ahintline and a trailer ... rather than asource:line". Measured:source:isthis rule's
hint, so it survives verbatim; what was missing is therule: ... at ...trailer underneath it. Had the card's reading been applied literally, a correct line
would have been deleted.
The missing blank line exists on one page, not two. The card and the dispatch both
scope it to "both pages". On
cli.mdxboth candidate blocks already have it —os compileprints✓ Build completethen a blank line thenData:, andos infoalready has the blank line after
Type: app. Onlybuild-with-claude-code.mdxwasmissing it. The instruction stands; one of its two targets did not exist.
Sweep of the other
os *output examples oncli.mdxEvery transcript-shaped block on the page was enumerated and checked, not just the one the
card named.
os infowas re-run and its structure matches a real run line for line —no drift, no change needed. The
os migrate plan, database-in-use, andos login --jsonblocks carry no step list and are unaffected by the registry collapse. So
os compilewasthe only block on the page with real drift.
What was deliberately NOT changed, and why
The stats lines and timings. Every line I changed is a project-independent fact about
the CLI, provable from any run. The stats lines are fixture identity, and this page's
Support Desk cannot be reconstructed exactly — the page labels its own code listing "a
representative result" and shows 4 fields, while the transcript says 6. Pasting my
reconstruction's
1 Objects 4 Fieldswould have substituted my fixture's identity forthe page's and, worse, broken agreement with
content/docs/deployment/validating-metadata.mdx, which says1 Objects 6 Fields, isout of scope here, and was corrected by #9034 earlier today. Reverse-engineering two extra
fields to hit "6" would have been manufacturing. So the numbers are left, and the
discrepancy is filed rather than guessed at — see below.
Block boundaries. The failing block remains an excerpt starting at the first step line
(the
Loading configuration/Config:/Load time:preamble was already elided beforethis PR). Expanding it would have meant importing a
Load time:value from elsewhere orpublishing my machine's, so the pre-existing boundary was kept.
The cross-reference this repairs
validating-metadata.mdxsends readers here "for the bare-reference example verbatim".That word was load-bearing and false. The finding block now matches a real run, so it is
true again. The corrected block does not break the cross-reference in the other direction:
validating-metadata.mdxshows the same header vocabulary, the same registry step, thesame
41count, and already has the blank line.Volatility note (raised, not acted on)
Running author-time rules (41)encodes a live count that will go stale again — the sameclass of defect as #9034. There is a way to make the block not encode it, but every option
changes the card's shape, so per the dispatch this is flagged rather than acted on
unilaterally.
Verification
Gate union re-run after the final commit, at
689551a31:The list was re-derived from the actual changed paths via
node scripts/pm/dispatch-gates.mjs, which named the same five as the dispatch — noadditions. Docs-only; no published package changes, hence
skip-changeset.Generated by Claude Code