Skip to content

roadmap discussion - #5584

Merged
briansrls merged 6 commits into
mainfrom
session/witty-crane-380
Jun 23, 2026
Merged

briansrls merged 6 commits into
mainfrom
session/witty-crane-380

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session witty-crane-380.
Pushing to session/witty-crane-380 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 23, 2026 00:16
Brian Searls and others added 4 commits June 23, 2026 00:22
…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>
@briansrls
briansrls merged commit b5845d7 into main Jun 23, 2026
1 of 2 checks passed
@briansrls
briansrls deleted the session/witty-crane-380 branch June 23, 2026 01:33
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>
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