Repository navigation
The workflow group on the shared root, groups that take no action, and cmd/internal - #885
Merged
Merged
Conversation
added 5 commits
September 11, 2026 10:27
…on, and cmd/internal Feature #835's plan, chartered on review, with the ruling of 2026-09-11 written into the specification: the store's documents are addressed by workflow through a shared-root workflow group, list and verify, and writ verify retires into it. §2 names the group among the shared commands; §6 states the vocabulary, a workflow's definition and its execution traces, and the selectors; design decision 10 records why the noun is workflow. Refs #782, #742, #835, #740 (rows 7, 8, 9). Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
…ore by name The store names a document by its checksum alone; the run index carries the name a person uses. The shared root gains workflow: list folds the index into one record per workflow, and verify selects a workflow's definition and execution traces by --tool, --scope, --kind and --latest, keeping a path operand for a document from outside the store. The verifier moves whole from cmd/writ/writ/verify to cmd/internal/cli, reports its kinds in the user's vocabulary, and returns an empty result rather than nil. writ verify and Graph.Filename() are deleted; the integration test rehomes in writ, whose deploy builds its fixture, and drives the shared root. Refs #782, #740 (row 8). Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
…ker enforces it writ repo listed registrations when invoked bare, so repo was a noun and a verb at once. It prints help now; repo list is unchanged. CheckGroupsTakeNoAction joins the invariants beside the other checkers, red on a fixture, and writ's, lore's and devlore-test's root tests call it. star's setup is the extension loader's making and waits on #841, which will call the checker from star's root test. Refs #740 (row 7), #841. Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
…y say why they stay Root internal/ is importable by the whole module, so a pkg/ package could import a terminal UI; cmd/internal makes that a compile error. console, a Bubble Tea UI, and credentials, whose two importers already live in cmd/internal, move. manifest stays because a document format is domain, not presentation; registry stays because the devlore provider (#877) takes it toward pkg/. Each says so in its package comment. Refs #742, #740 (row 9). Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
…e plan is complete The guide's verification section teaches the workflow group, including list and the selectors; five architecture documents and two status files name the new path; §10 and §15 name cmd/internal/console; §14 carries invariant 7, a group takes no action. The plan reaches complete in this last commit, per the rule of noblefactor-ops#199. Closes #782. Closes #742. Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW
David-Noble-at-work
pushed a commit
that referenced
this pull request
Sep 14, 2026
Four defects in the root every program shares. version printed five lines with fmt.Fprintf, so --output yaml and --output json printed the same five lines everywhere. It returns a VersionReport through cli.Emit now: json parses, yaml reads, value gives the six values, none prints nothing. The Makefile's version-stamp check read that output and broke on the json quoting; it asks for --output value, which is how a scalar reaches a consumer raw. The no-direct-stdout walk reported fmt.Print*, os.Stdout and the print builtins, and never cmd.OutOrStdout(), which is stdout under another name. It reports OutOrStdout everywhere but cli.Emit, the one caller. The three writ repo sites that escaped it emit RepoRegistration records carrying the layer, its root and its state. --silent was still an unparsed string while star loaded its extensions and its runtime reported the module surface, so two lines survived the flag. The shared root reads --silent from the raw arguments and installs the narrator before construction; star's runtime spec carries that narrator rather than defaulting to its own over stderr. The exit codes were three answers in three places: §9 said 0, 1 and 2, the constants were the sysexits set with five gaps, and cobra's refusals exited 1 while star bypassed cli.ExitCode. The constants are the thirteen Declare-BashScript defines, cli.ExitCode maps cobra's refusals to EX_USAGE, a value --output does not accept is one of them, and star exits through it. TestRepo_BareInvocation_Lists was passing for the wrong reason: it matched layer names in the help text, so it stayed green after #885 removed the listing. It asserts what #885 ruled, that a group prints help. Refs #795, #794, #828, #884, #887 lanes 1 to 4, #832.
9 of 10 tasks
David-Noble-at-work
added a commit
that referenced
this pull request
Sep 14, 2026
* Plan: lanes 1 to 4 of the command line schedule The four lanes of devlore-cli#887 that close feature #832: version emits a record, the no-direct-stdout walk learns cmd.OutOrStdout(), --silent is read before the runtime is assembled, and the suite's exit codes become the sysexits set. Chartered on review, with the owner's ruling that a bad --output value exits EX_USAGE. The plan covers these four lanes and nothing else; anything found while working them stops the work and goes to the owner for placement. Refs #795, #794, #828, #884, #887, #832. Claude-Session: https://claude.ai/code/session_01SqQVFZz7AdiLZkGoAcUqRW * Lanes 1 to 4: the shared root conforms Four defects in the root every program shares. version printed five lines with fmt.Fprintf, so --output yaml and --output json printed the same five lines everywhere. It returns a VersionReport through cli.Emit now: json parses, yaml reads, value gives the six values, none prints nothing. The Makefile's version-stamp check read that output and broke on the json quoting; it asks for --output value, which is how a scalar reaches a consumer raw. The no-direct-stdout walk reported fmt.Print*, os.Stdout and the print builtins, and never cmd.OutOrStdout(), which is stdout under another name. It reports OutOrStdout everywhere but cli.Emit, the one caller. The three writ repo sites that escaped it emit RepoRegistration records carrying the layer, its root and its state. --silent was still an unparsed string while star loaded its extensions and its runtime reported the module surface, so two lines survived the flag. The shared root reads --silent from the raw arguments and installs the narrator before construction; star's runtime spec carries that narrator rather than defaulting to its own over stderr. The exit codes were three answers in three places: §9 said 0, 1 and 2, the constants were the sysexits set with five gaps, and cobra's refusals exited 1 while star bypassed cli.ExitCode. The constants are the thirteen Declare-BashScript defines, cli.ExitCode maps cobra's refusals to EX_USAGE, a value --output does not accept is one of them, and star exits through it. TestRepo_BareInvocation_Lists was passing for the wrong reason: it matched layer names in the help text, so it stayed green after #885 removed the listing. It asserts what #885 ruled, that a group prints help. Refs #795, #794, #828, #884, #887 lanes 1 to 4, #832. --------- Co-authored-by: David Noble <[email protected]>
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 free
to 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.
Closes #782.
Closes #742.
Feature #835 of epic #740; closure-ledger rows 7, 8 and 9. Plan:
docs/plans/feature/782-writ-workflow-verify.md.Summary
workflowon the shared root (row 8, ruled 2026-09-11).<program> workflow listfolds the run index into one record per workflow;<program> workflow verifyselects a workflow's definition and execution traces by--tool,--scope,--kind,--latest, or takes path operands for documents from outside the store, never both. The verifier moved whole intocmd/internal/cli;writ verifyandGraph.Filename()are deleted. §2, §6 and design decision 10 record the ruling.writ repoprints help when bare;CheckGroupsTakeNoActionis §14's invariant 7, red on a fixture, called from writ's, lore's and devlore-test's root tests. star'ssetupwaits on An extension cannot describe a command group; star mints '<name> commands' for every node above a leaf #841.cmd/internal(row 9).consoleandcredentialsmoved;manifestandregistrystay and say why in their package comments.writ/workflow/andlore/workflow/.Acceptance criteria (from the plan and #742)
workflowgroup,listandverify, on the shared root of all four programs;writ verifygonewrit repoinvoked bare prints help;repo listlistsinternal/consolelives undercmd/internal/internalpackage is either moved or has its placement justified in writingpkg/package can import CLI presentation code (Go's own rule forcmd/internal)Test plan
cli: the fold, the selection by name,--kind/--latest, the mixing refusal,--tool's default, the group takes no action, the checker red on a fixturewrit:workflow verifyby path and by selection on a signed store;listreads the index; tampered-external and unsigned outcomes;writ verifyunknown;writ repobaremake docsregenerates-o tablerenders struct columns alphabetically where §8 says declaration order (Renderings: the pipeline from result value to stdout #833)Time
Computed by the algorithm of noblefactor-ops#188 at merge.