Skip to content

A dissolution condition does not authorize creating the debt (operator ruling) - #8113

Merged
briansrls merged 1 commit into
mainfrom
session/wise-badger-356
Aug 10, 2026
Merged

briansrls merged 1 commit into
mainfrom
session/wise-badger-356

Conversation

@briansrls

@briansrls briansrls commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Operator ruling, 2026-08-10. This is the authority half; the enforcing carrier (gunbc.dissolution_admission) is sequenced behind #8059 — see Sequencing below.

The loophole this closes

DESIGN §5 said that once an author notices a workaround, the two landing states are the real fix or a declared scaffold with a dissolution trigger. §6 said every scaffold lands with a named dissolution trigger. Together those made the trigger behave as a permit: I know this is temporary, but I registered its future deletion, therefore it may merge.

A dissolution condition describes how admitted debt ends. It does not authorize creating the debt.

The old clause is superseded and deleted, not supplemented — leaving both would put two conflicting rules in the same document. It survives in the text only as the explicitly-quoted thing being replaced.

What the document now says

§5 — three new paragraphs.

The default and expected landing state is the final construction; a scaffold is an operator-approved exception, not an ordinary alternative to it. Any PR whose current head introduces a net-new active dissolution obligation without an explicit operator verdict on that exact population is a hard reject. Marked-but-unapproved debt is refused; unmarked debt is the same violation plus concealment. The rule is derived from §2 rather than layered on — redundant work spends someone else's future time for the author's present convenience, including by building something destined to be thrown out — so a throwaway artifact costs authoring + review + maintenance + deletion + review of the deletion, against a benefit bounded by its lifetime. If the modeled path already exists, that benefit is zero and the trigger was ceremony.

Lifecycle and admission are two questions, and the repository was conflating them. How would this disappear? belongs to the generic lifecycle authority. May we introduce it at all? is project-level, because neither dissolution arm says the construction was justified, and std.disposition Scaffold carries a construction mechanism and a declaration binding and nothing else — no authorization, no proof the final path could not be built now, no benefit bought, no assessment of an already-modeled path. So the verdict is not a Boolean: RejectAndFinishNow (default), ApproveTemporaryIntroduction (the only arm admitting new debt), AcknowledgePreexistingDebt (found on the base, not created here — this arm exists so documenting previously hidden debt never reads as creating it, which is the incentive that would otherwise keep it hidden). Approval is external to the diff: an author-written flag is not approval.

Out-of-band actuation has no ordinary scaffold arm. Where the final path is modeled intent → generated plan → modeled host-effect actuation and the temporary path is hand-authored YAML → embedded shell → host mutation, the temporary artifact is not an early version of the final one — it never becomes it by refinement; it is deleted whole while the real path is separately authored. Branch-local experimentation stays fully open: run the canary, take the measurements, delete it before merge. Experimental work is not valueless because its implementation is disposable; it becomes waste when the disposable implementation merges into the long-lived authority.

§6 — every scaffold lands with a named dissolution trigger → no scaffold lands by author declaration alone, with the external-verdict requirement and the note that reviewers independently search for undeclared scaffolds, so the author's classification is evidence to inspect, never the denominator. A new intellectual sustainability bullet carries the reviewer's independent test — will this artifact survive the terminal architecture substantially unchanged, and be consumed by it? — the nine review tells, and the point that a missing dissolution condition makes a finding more severe, not less. Adding a trigger after review does not resolve the objection; it only makes the proposal eligible for a decision.

Recurring failure modes gains self-authorized dissolution.

Receipt

gunbc#8073 landed three hand-authored Spark workflows beside the modeled convergence spine (gunbc.fleet_converge_timer → gunbc.fleet_converge_apply → gunbc.host_effect_realize host_effect_apply). One registered a Scaffold whose own note said the construction was "exactly the class the shell → intent routing forbids" — the trigger standing in for the decision. All three deleted in d03f5b63ad; the disposition had no subject once they were gone.

Sequencing — what this PR is not

This is the authority, so reviewers can apply the rule today. It deliberately does not add the gate.

The enforcing carrier is gunbc.dissolution_admission: derive all active debt representations, compare base against head at exact subject identity, distinguish migration of existing debt from introduction of new debt, render the exact new-obligation set, refuse without a current-head operator verdict, expose unclassified candidates for reviewer inspection. std.dissolution stays the generic, honest lifecycle authority — no operator fields go in it.

It is sequenced behind #8059 because that PR owns the denominator, and a gate on an open denominator is the failure DESIGN §5 already names (completeness is an identity join, not a count). #8059's owner confirms the live-corpus join has landed on their branch (data_decl_type_facts, parse-only fail-closed corpus walk, 16,975 data declarations over 3,475 modules, refusing rather than shrinking on a parse failure). One limitation to design around, from them: type_name is the annotation head only, so Disposition-typed rows enumerate exactly but Scaffold is a filter step away, and the variant must not be inferred from the name.

Verification

generated_artifact_gate main_wet --wet → PASS; DESIGN.md regenerated in the same commit, never hand-edited. Source and generated output land together per the drift gate.

…r ruling)

DESIGN §5's "the only two landing states are the real fix, or a declared
scaffold" is superseded and deleted. In practice the trigger became a permit:
"I know this is temporary, but I registered its future deletion, therefore it
may merge." The default and expected landing state is the final construction;
a scaffold is an operator-approved exception, not an ordinary alternative to
it. Any PR whose current head introduces a net-new active dissolution
obligation without an explicit operator verdict on that exact population is a
hard reject -- marked-but-unapproved debt is refused, and unmarked debt is the
same violation plus concealment.

The rule follows from §2 rather than being layered on: redundant work spends
someone else's future time for the author's present convenience, including by
building something destined to be thrown out. A throwaway artifact costs
authoring + review + maintenance + deletion + review of the deletion, against
a benefit bounded by its lifetime.

§5 also separates the two questions the repository was conflating. How would
this temporary thing disappear is the generic lifecycle authority's; may we
introduce it at all is project-level, because neither dissolution arm says the
construction was justified, and std.disposition Scaffold carries a mechanism
and a binding and nothing else -- no authorization, no proof the final path
could not be built now, no benefit bought, no assessment of an existing
modeled path. So the verdict is not a Boolean: RejectAndFinishNow (default),
ApproveTemporaryIntroduction (the only arm admitting new debt), and
AcknowledgePreexistingDebt, which exists so documenting previously hidden debt
never reads as creating it. Approval is external to the diff.

Out-of-band actuation gets no ordinary scaffold arm. A hand-authored workflow,
deploy script or manual mutation path standing beside a modeled actuator is
manual application committed as source; it never becomes the final path by
refinement. Branch-local experimentation stays open -- run it, measure, delete
before merge. Receipt: gunbc#8073.

§6 replaces "every scaffold lands with a named dissolution trigger" with the
external-verdict requirement, and adds intellectual sustainability with the
reviewer's independent test: will this artifact survive the terminal
architecture substantially unchanged, and be consumed by it? A missing
dissolution condition makes the finding more severe, not less.

Recurring failure modes gains self-authorized dissolution.

DESIGN.md regenerated (generated_artifact_gate main_wet, PASS).
@gunbai-bot gunbai-bot Bot changed the title design.md, repo standards A dissolution condition does not authorize creating the debt (operator ruling) Aug 10, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 10, 2026 18:09
@briansrls
briansrls merged commit aaae255 into main Aug 10, 2026
0 of 6 checks passed
@briansrls
briansrls deleted the session/wise-badger-356 branch August 10, 2026 19:15
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