Repository navigation
roadmap discussion - #5584
Merged
Merged
roadmap discussion#5584
Conversation
added 2 commits
June 22, 2026 23:44
…onical Review (claude-opus-4-7) flagged the *_canonical wrapper as a thin pass-through. After the congruence rewrite it pins no params/roster (unlike e.g. realization_vocab_..._canonical, which pins its exception roster), so it was a redundant second name (§2/§3). Removed it; witness calls chain_is_simulated directly. 6/6 lens_unit witnesses green by execution. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 23, 2026
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
…an (#5544/#5579) + fix #5584 orphan doc - parse.rs/helpers.rs: converge on main's dedicated non_ascii_perf.dag fixture (#5579); drop my read_v2_file_with_distributed_non_ascii (don't fork the fix). - emit lists (emit_rust.rs + 05_emit_rust.dag): keep corpus_lex + main's mod additions. - strip // comments from the 4 Lane 7 lens .dag files (inert_carrier{,_test}, non_fold_residue{,_test}) — the parser-wall now rejects DAG comments; construction_justification rationale lives in data fields, preserved. - DESIGN.md: link docs/plans/intent-linearity-design-draft.md (orphaned by #5584, fail-closed orphan-doc gate reds every PR merging main) from the open-thread bullet it was authored to serve. Verified: 4 floor witnesses green via claim_batch; 6 census live gates + orphan-doc gate pass; fmt clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Jun 23, 2026
…erited doc-orphan) The intent-linearity-design-draft.md (added by #5584 'roadmap discussion') was unlinked tree-wide — orphan on main HEAD too, reding doc_graph_has_no_orphan_docs (main CI confirmed red). It is the candidate DESIGN.md articulation of the same fractal-intent-linearity crux self-applying-lenses.md opens with, so the cross-link is topically exact (the regime2 <- emission-ingestion-inverse pattern). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
…g-lenses crux (#5604) #5584 landed docs/plans/intent-linearity-design-draft.md with zero inbound markdown links → it orphans the doc graph and fails doc_graph_has_no_orphan_docs on MAIN itself (inherited by every open PR's floor). The draft is the candidate DESIGN.md articulation of self-applying-lenses' own 'fractal intent-linearity' crux, so self-applying-lenses.md is its natural parent. One topical cross-link de-orphans it without touching the #5568-gated ROADMAP and without deleting the draft (it's #5584's operator-review doc, not mine to remove). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Jun 23, 2026
The doc-reachability floor fix (linking the orphaned intent-linearity design draft) requires editing the generated-artifact authority dsl/gunbc/roadmap_authority.dag + regen, which collides with #5596 and is owned by witty-crane-380 (the orphan came in with #5584). Handing the queue-wide unblock to a standalone PR; #5600 stays the pure complexity RunTime-axis feature and rebases once main is green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
…l-closed walls) (#5566) * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * Lane 7: record inert-carrier + non-fold-residue lens landing in plan docs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Lane 7: roster gitignore_gate exit_ok residue (post-merge census) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * Lane 7 review: string-literal-aware strip + re-derive rosters post-#5568 merge + §6 kernel-vs-un-migrated dissolve-on wording - strip_line_comment in both census modules now blanks string-literal interiors (so // in URLs and _ =>/braces/| inside string literals are not read as code); + 2 discriminating controls (in-string decoy green; real wildcard + decoy red). - re-derive rosters against main merge ae891fc (#5568 unified the 3 drift gates): drop deleted ci_yaml/gitignore/roadmap_gate exit_ok; add generated_artifact.dag artifact_eq/artifact_extra_valid + generated_artifact_gate exit_ok; drop RbacPolicy (now consumed by extdeps/bmc/access.dag). - concrete declaring-file homes for AccessPolicy/FilePermissions/GitCliReportedVersion. - correct dissolve-on wording: §6 named irreducible kernels (eq/lattice/collapse) wall permanently; only un-migrated modeling shrinks. per-entry tag deferred to gunbc#5364. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Lane 7 review: fix inert-layer-lens.md roster count drift (9→8, RbacPolicy dissolved) RbacPolicy dropped off the inert roster when extdeps/bmc/access.dag gained a real consumer (redfish_rbac_policy) via the main merge — the stale-roster ratchet working as intended. Plan doc now reflects the 8-carrier roster. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * Lane 7 review: memoize census report (OnceLock) + align .dag dissolve_on with §6 kernel wording - both census modules now route the *_count builtins through a OnceLock-memoized build_report(): the four builtins + live-tree tests share ONE dsl/+src/v2 walk per process instead of re-walking per call (the thrice-flagged 8x-walk nit). Pure compute_report/residue_sites still take &[files] so synthetic RED/GREEN controls drive them with in-memory corpora, bypassing the cache. - non_fold_residue.dag dissolve_on: 'reaches 0' -> the un-migrated subset shrinks to 0 while named irreducible kernels (eq/lattice/collapse) remain by §6, matching the Rust comment (no longer overstated). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * WIP: Walls Lane 7 inert-abstraction lens keystone plus non-fold-residue audit * Merge main: resolve conflicts + adapt Lane 7 to parser-wall comment ban (#5544/#5579) + fix #5584 orphan doc - parse.rs/helpers.rs: converge on main's dedicated non_ascii_perf.dag fixture (#5579); drop my read_v2_file_with_distributed_non_ascii (don't fork the fix). - emit lists (emit_rust.rs + 05_emit_rust.dag): keep corpus_lex + main's mod additions. - strip // comments from the 4 Lane 7 lens .dag files (inert_carrier{,_test}, non_fold_residue{,_test}) — the parser-wall now rejects DAG comments; construction_justification rationale lives in data fields, preserved. - DESIGN.md: link docs/plans/intent-linearity-design-draft.md (orphaned by #5584, fail-closed orphan-doc gate reds every PR merging main) from the open-thread bullet it was authored to serve. Verified: 4 floor witnesses green via claim_batch; 6 census live gates + orphan-doc gate pass; fmt clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
… DESIGN.md main #5584 hand-edited DESIGN.md's first open thread to add a pointer to the intent-linearity draft. Since DESIGN.md is now generated, fold that exact content change into gunbc.design_document and regenerate (not a hand-merge), so the authority stays the .dag model. Verified: regenerated DESIGN.md content == main's content (whitespace-stripped, the only delta is the pointer); drift gate ExitSuccess; syllogism + completeness witnesses green. main also rooted the orphan draft itself (the new DESIGN.md link + its own link in self-applying-lenses.md), so my earlier redundant line-3 link there is reverted — the orphan is now reachable via the DESIGN.md root. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
…g 970 EVO Plus) + the in-band/out-of-band observability boundary (BMC can't see drives — route queries by channel) + update operator_fleet.dag with per-host drives (srv1/srv2 in-band, srv3 known); multiple-drives-per-host (#5586) * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * Rename operator_fleet{,_network} -> fleet_intent{,_network} (operator-directed) Module + symbol + file rename (gunbc.operator_fleet -> gunbc.fleet_intent, gunbc.operator_fleet_network -> gunbc.fleet_intent_network) plus the test witnesses and the consuming importers (ci_runner_placement, runner_placement witness, roadmap_authority prose). Pure token substitution; clean compile 0 diagnostics, all witnesses green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * Finalize fleet storage: srv3 Samsung 970 EVO Plus 2TB, per-drive serial typed-absent Operator confirmed (via neat-boar-71): srv1/srv2 = WD_BLACK SN850X 2TB final, srv3 = Samsung 970 EVO Plus 2TB final (MZ-V7S2T0BW), serials pending in-band enumeration. StorageDevice gains serial: NonEmptyStr? (typed-absent/pending, not fabricated) closing the per-drive-identity review finding structurally. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * docs: link intent-linearity draft from self-applying-lenses (heal inherited doc-orphan) The intent-linearity-design-draft.md (added by #5584 'roadmap discussion') was unlinked tree-wide — orphan on main HEAD too, reding doc_graph_has_no_orphan_docs (main CI confirmed red). It is the candidate DESIGN.md articulation of the same fractal-intent-linearity crux self-applying-lenses.md opens with, so the cross-link is topically exact (the regime2 <- emission-ingestion-inverse pattern). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Revert orphan cross-link in self-applying-lenses.md (defer to #5604 central fix) Per parent ruling: #5604 (warm-lark) is the designated CENTRAL orphan fix and edits this exact file; a per-branch link to the same orphan from the same file would collide on merge and duplicates the heal (DESIGN §2). Drop my line; #5586 stays orphan-red until #5604 lands, then merges origin/main CLEAN and inherits the central heal. Keeps the ROADMAP.md regen (my genuine drift fix). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * observability: dissolve channel_observes Bool predicate into route_observation (review §3) Reviewer (claude-opus-4-7, non-blocking APPROVE) flagged channel_observes(channel, class) -> Bool as a predicate over coproducts that brushes predicate-dissolution: it was a second public surface answering the same question route_observation answers with the typed ObservationRoutingOutcome. Inlined its match into route_observation so the only public answer is the structured outcome (RoutedTo/ChannelCannotObserve), and the witness now asserts that typed surface directly (no Bool projection). Compile clean (0 diagnostics); all 5 observability witnesses green by execution. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Model storage devices (grounded NVMe StorageDevice in extdeps, Samsung 9 * observability: name the OOB host-inventory blind cell as firmware-grounded (review §3 (b)) Per parent's §6-scaffold conditions: route_observation's OutOfBand StorageInventory/ NetworkInventory arms now go through out_of_band_inventory_blind_pending_firmware_visibility_derivation, so the carrier itself states this outcome is FIRMWARE-GROUNDED (derives from host storage/network visibility at the 2nd firmware) rather than reading as a channel-universal claim. Comments are comment-walled (#5567/#5579 — verified: a // line is a compile error), so the dissolution trigger lives in the carrier name (DESIGN §6 'the mark on the carrier is the authority'). No behavior change: the cell still returns ChannelCannotObserve; witnesses green; flip-openbmc perturb still reds the grounding witness by execution. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fleet_intent: repoint ci_budget_tree.dag import after rename (merge-collision fix) Main's new ci_budget_tree.dag (#5590/#5595 budget-tree work) imports gunbc.operator_fleet { srv1_host }; my rename operator_fleet -> fleet_intent makes that unresolved in the merge commit. Repointed to gunbc.fleet_intent (srv1_host unchanged). Whole-tree compile: 0 diagnostics. Same class as the earlier rust_gates_ci.dag repoint. --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
* WIP: get design docs into .dag * WIP: get design docs into .dag * WIP: get design docs into .dag * WIP: get design docs into .dag * WIP: get design docs into .dag * Generate DESIGN.md from .dag + enforce the document's syllogism DESIGN.md is now a drift-gated projection of its .dag model (DESIGN §7: the document is the first target of the recursion), the same way ROADMAP.md is: - std.markdown + serializer: add the missing ThematicBreak block (the `---` rules) with arms in all exhaustive match sites; md_item now renders a leaf continuation block (a paragraph after a nested sub-list) as a CommonMark loose-list continuation (blank line + indent), leaving list-continuations — and therefore ROADMAP.md — byte-unchanged. - gunbc.design_document: full DESIGN.md as typed markdown blocks; one TextInline per paragraph carries the raw markdown source (same convention as roadmap_authority). expected_design_md() is the single generator. - gunbc.design_argument: extend the §1 axioms/propositions with §2-§7 headline propositions, each premised on the sections it follows from. The syllogism lens (std.syllogism.argument_form_is_valid) now checks the WHOLE document is non-vacuous, orphan-free, acyclic, and axiom-set-closed — the §1 open-thread. - generated_artifact + universal drift gate + completeness witness: register DesignArtifact -> DESIGN.md -> expected_design_md(); roster bumped to 4. Verified by execution: drift gate ExitSuccess; ROADMAP.md byte-unchanged; all syllogism + completeness witnesses green incl. orphan/cycle/smuggled-axiom/ vacuous negative controls; regenerated DESIGN.md content-identical to the original modulo line-wrapping (paragraphs unwrapped, as in ROADMAP.md). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: get design docs into .dag * Re-home orphaned intent-linearity draft (main #5579 fallout) main #5579 (DAG comment-wall) stripped the // comment in src/v2/lens/intent_linearity.dag that carried the bind: root for docs/plans/intent-linearity-design-draft.md, orphaning it in the doc-reachability graph — main has been red on doc_graph_has_no_orphan_docs for 5+ consecutive commits, and every PR merging main inherits it. The intent_linearity lens is still live (only its comments were removed), so the draft is re-homed, not deleted: a markdown link from its reachable sibling docs/plans/self-applying-lenses.md (the intent-linearity registry doc, itself ROADMAP-linked). The draft is literally the DESIGN.md articulation of this PR's own open thread ("model §1's axioms in .dag + enforce the syllogism"), so the link is in-theme. Verified: doc_graph_has_no_orphan_docs / no_dangling_links / universe_nonempty all green by execution. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Resolve merge: fold main's open-thread pointer into the model + regen DESIGN.md main #5584 hand-edited DESIGN.md's first open thread to add a pointer to the intent-linearity draft. Since DESIGN.md is now generated, fold that exact content change into gunbc.design_document and regenerate (not a hand-merge), so the authority stays the .dag model. Verified: regenerated DESIGN.md content == main's content (whitespace-stripped, the only delta is the pointer); drift gate ExitSuccess; syllogism + completeness witnesses green. main also rooted the orphan draft itself (the new DESIGN.md link + its own link in self-applying-lenses.md), so my earlier redundant line-3 link there is reverted — the orphan is now reachable via the DESIGN.md root. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: get design docs into .dag --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Brian Searls <11205878+briansrls@users.noreply.github.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
…ows (one engine, N rows, two axes). cost.dag computes runtime cost as a fold_node over the AST (SumCost for a sequence, ProductCost for a nested loop -> AsymptoticClass). Formalize its DECIDABLE rewrite catalog -- the §5 'O(n^2)->O (#5600) * WIP: Bring complexity into the intent_linearity registry as RunTime-axis rows * WIP: Bring complexity into the intent_linearity registry as RunTime-axis rows * WIP: Bring complexity into the intent_linearity registry as RunTime-axis rows * Drop ROADMAP doc-link from #5600 — unblock fix moves to a standalone PR The doc-reachability floor fix (linking the orphaned intent-linearity design draft) requires editing the generated-artifact authority dsl/gunbc/roadmap_authority.dag + regen, which collides with #5596 and is owned by witty-crane-380 (the orphan came in with #5584). Handing the queue-wide unblock to a standalone PR; #5600 stays the pure complexity RunTime-axis feature and rebases once main is green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * complexity_rewrite: match rewrite preconditions on asymptotic class, not a hand-rolled SymbolicCost wildcard Replaces cost_is_nested_product (a nested match over the closed SymbolicCost coproduct with _ => false arms -- non-fold residue per #5566) with class-equality against cost.dag's exhaustive asymptotic_class_of_cost. The module now carries zero wildcard-over-coproduct matches (single authority, total), and minimized_class inherently checks the realized class equals the rewrite's before-class -- addressing both non-blocking reviewer notes on the earlier APPROVE. Semantics unchanged: an O(n^2) cost (ClassPolynomial degree 2) is rewritable to ClassLinear; linear / sum costs are not. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * catalog_sound_test: drop the removed 'applies' field from bogus rewrite controls Follow-on to the class-based refactor: ComplexityRewrite no longer carries an 'applies' fn field, so the identity/widening RED-control constructors must not set it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * intent_linearity: RunTime axis is a candidate detector, not the redundancy wall (§5 fail-closed) Addresses the REQUEST_CHANGES finding: wiring the RunTime row into chain_is_redundant made the wall flag a genuine all-pairs O(n^2) loop as 'redundant intent' -- a §5 fail-OPEN (a false positive on the wall) since the row's sufficiency is ungrounded. Fix: the two axes now compose differently. chain_is_redundant folds ONLY the ChangeTime rows (anti-unification proves redundancy -> sound wall, no false positive), so level_is_linear / body_is_linear never call a genuine program redundant. The RunTime axis is read via a new chain_has_runtime_rewrite_candidate -- honestly a CANDIDATE (O(n^2) is the decidable necessary condition; sufficiency waits on the independence carrier), so it does not feed the wall. Both rows stay in linearity_registry() (one engine, N rows, two axes); cost_axis_equal partitions them by axis with an exhaustive match (no wildcard residue). Witnesses: nested_loop_not_changetime_redundant (the wall does NOT flag a genuine nested loop) + nested_loop_is_runtime_candidate (the RunTime axis still fires) green by execution. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 23, 2026
…idea-machine exemplar) (#5622) * WIP: get design docs into .dag * WIP: get design docs into .dag * WIP: get design docs into .dag * WIP: get design docs into .dag * WIP: get design docs into .dag * Generate DESIGN.md from .dag + enforce the document's syllogism DESIGN.md is now a drift-gated projection of its .dag model (DESIGN §7: the document is the first target of the recursion), the same way ROADMAP.md is: - std.markdown + serializer: add the missing ThematicBreak block (the `---` rules) with arms in all exhaustive match sites; md_item now renders a leaf continuation block (a paragraph after a nested sub-list) as a CommonMark loose-list continuation (blank line + indent), leaving list-continuations — and therefore ROADMAP.md — byte-unchanged. - gunbc.design_document: full DESIGN.md as typed markdown blocks; one TextInline per paragraph carries the raw markdown source (same convention as roadmap_authority). expected_design_md() is the single generator. - gunbc.design_argument: extend the §1 axioms/propositions with §2-§7 headline propositions, each premised on the sections it follows from. The syllogism lens (std.syllogism.argument_form_is_valid) now checks the WHOLE document is non-vacuous, orphan-free, acyclic, and axiom-set-closed — the §1 open-thread. - generated_artifact + universal drift gate + completeness witness: register DesignArtifact -> DESIGN.md -> expected_design_md(); roster bumped to 4. Verified by execution: drift gate ExitSuccess; ROADMAP.md byte-unchanged; all syllogism + completeness witnesses green incl. orphan/cycle/smuggled-axiom/ vacuous negative controls; regenerated DESIGN.md content-identical to the original modulo line-wrapping (paragraphs unwrapped, as in ROADMAP.md). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: get design docs into .dag * Re-home orphaned intent-linearity draft (main #5579 fallout) main #5579 (DAG comment-wall) stripped the // comment in src/v2/lens/intent_linearity.dag that carried the bind: root for docs/plans/intent-linearity-design-draft.md, orphaning it in the doc-reachability graph — main has been red on doc_graph_has_no_orphan_docs for 5+ consecutive commits, and every PR merging main inherits it. The intent_linearity lens is still live (only its comments were removed), so the draft is re-homed, not deleted: a markdown link from its reachable sibling docs/plans/self-applying-lenses.md (the intent-linearity registry doc, itself ROADMAP-linked). The draft is literally the DESIGN.md articulation of this PR's own open thread ("model §1's axioms in .dag + enforce the syllogism"), so the link is in-theme. Verified: doc_graph_has_no_orphan_docs / no_dangling_links / universe_nonempty all green by execution. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Resolve merge: fold main's open-thread pointer into the model + regen DESIGN.md main #5584 hand-edited DESIGN.md's first open thread to add a pointer to the intent-linearity draft. Since DESIGN.md is now generated, fold that exact content change into gunbc.design_document and regenerate (not a hand-merge), so the authority stays the .dag model. Verified: regenerated DESIGN.md content == main's content (whitespace-stripped, the only delta is the pointer); drift gate ExitSuccess; syllogism + completeness witnesses green. main also rooted the orphan draft itself (the new DESIGN.md link + its own link in self-applying-lenses.md), so my earlier redundant line-3 link there is reverted — the orphan is now reachable via the DESIGN.md root. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: get design docs into .dag * Model plan docs as .dag: Plan carrier + §6 dissolution-trigger lens (idea-machine exemplar) The operator's follow-on to #5592 (DESIGN.md → .dag): bring docs/plans/*.md into the substrate too, "modeled more thoroughly" — not just prose-in-blocks, but the recurring semantic invariant extracted and lens-enforced. Shared model (`gunbc.plan`): - `Plan { slug, title, body: List<MarkdownBlock>, dissolution: DissolutionTrigger }`. `DissolutionTrigger = HasTrigger { text } | NoTrigger` (a closed sum, not String? — dodges the optional-null match gotcha and is honest about presence, §5). - The §6 invariant ("every scaffold lands with a named dissolution trigger") is lifted into a typed field with its own serialized section — single representation, no §3 dual-rep with the prose. status/anchors stay woven in the body prose (lifting them would fork a second representation of inline mentions). - Lens `plans_all_have_dissolution_trigger` / `plans_all_titled` — the plan-doc analog of DESIGN's syllogism lens, walling a plan with no declared dissolution condition. Generation reuses the universal drift framework (no fork, §2): one `PlanArtifact { plan }` variant covers all N plans (registry rows, not N enum variants — §2-horizontal), so fan-out appends to `gunbc.plan_registry.all_plans`. The per-artifact byte-exact drift receipt loop already covers each plan automatically. Exemplar: `docs/plans/idea-machine.md` regenerated from `gunbc.plans.idea_machine` (reflow-only delta vs the hand-written form, per DESIGN.md precedent; the dissolution heading drops its section number as it is now a lifted field). Witnesses (all green by execution): byte-exact drift incl. idea-machine; §6 lens over the registry; synthetic RED controls (missing trigger / missing title detected); non-fold lens, doc-reachability, dangling-link all still green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: get design docs into .dag * Plan lens: require non-empty dissolution trigger text (review fix) Addresses claude-opus-4-7 #5622: `plan_has_dissolution_trigger` checked only the HasTrigger variant, not that `text` is non-empty — asymmetric with `plans_all_titled` (which requires length > 0). An empty `HasTrigger { text: "" }` is no trigger. Now `length(text) > 0`, with a discriminating RED control (`plan_with_empty_trigger`). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Brian Searls <11205878+briansrls@users.noreply.github.com>
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.
Auto-opened by session-dashboard for session
witty-crane-380.Pushing to
session/witty-crane-380advances this PR.Worker attestation
Before flipping this PR to ready for review, confirm each item:
npm test,cargo test) and the result.Closes #Ndirective.Summary
TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.
Test plan