You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Decide what is cut, merged or deferred from the spec and the register #346
What gets cut, merged or deferred: which chapters, concepts, ADRs and refusal codes leave the specification, which fold into others, and which move to the deferred register?
Decided from the measurements (what pays its way, what the live estate needs) against the re-established goals, with Chesterton's fence applied to each removal: name the reason the thing was put there and why it no longer holds.
Input from Decide the model-driven implementation's lifespan and sunset: once emf/ is deleted right after Task 3 is submitted, this ticket decides whether each oracle layer (intent, dependencies, effective, resolved, descriptor) still pays its way with one implementation. The deletion PR (#99) keeps all of them, so it does not settle that question.
A spec chapter holds normative content plus short inline rationale. A short "why" section stays beside the rule it explains. History ("The namespace row was wrong, and this is the correction", "The hostname changed sides", "Retired since the rebuild") goes to git. Open-item sections (Open items, Still to be graded, the seven Open in this chapter; 380 lines) go to tickets. Diagram sources sections (1,070 lines) move to files beside the chapter. The Delivery and co-testing pointers in chapters 10, 16, 40 and 50 become one line in the deferred register.
An E_ code refuses authored input that is a real hazard at 0001 scale. A compiler self-invariant is a test or a property, not a code. A code pending on a closed ticket is either justified again on a live ticket or cut. The rewrite applies this bar to the 66 exercised codes as well, with no further decision round.
Oracle layers, once emf/ is deleted: keep resolved.json, which is a published artifact (0032), the rendered tree and *.diagnostics.json. Drop the intent, effective and dependencies goldens. They existed so that two implementations could meet at each step. With one implementation they pin internal steps rather than the four test seams. The single descriptor oracle goes when deploy-config-schema retires.
Codes: the 42 pending
Cut as compiler self-invariants, which become tests (7):E_AMBIENT_INPUT_FORBIDDEN, E_INPUT_OUTSIDE_WORKDIR, E_RENDER_NONDETERMINISTIC, E_RENDER_OVERWRITE_REFUSED, E_UNSAFE_OUTPUT_PATH, E_FOREIGN_NAMESPACE, E_FORBIDDEN_KIND. They were written as render-safety codes for the tracer bullet (Tracer bullet: render the minimal case in TypeScript #97). They guard the compiler against itself, not the maintainer against an authoring mistake.
Cut as dead names (2):E_UNKNOWN_OVERRIDE, which the spec already says does not exist, and E_RELEASE_UNIT_SINGLETON, which existed only while releaseUnit was a free string.
Cut with the reconciliation ledgers (5, plus one exercised):E_UNATTRIBUTED_OBJECT, E_UNACCEPTED_DRIFT, E_LEDGER_ENTRY_STALE, E_UNREGISTERED_SURFACE, E_UNMANAGED_SURFACE_WITHOUT_COORDINATES, and the exercised E_LEDGER_REVIEW_OVERDUE. See below.
Kept (26). The 11 on Implement the Stable Address, the derived Move and Infrastructure Intent #324: E_AVAILABILITY_UNSUPPORTED, E_AVAILABILITY_WITHOUT_ENGINE, E_DUPLICATE_NODE, E_ENGINE_VERSION_MISSING, E_FORWARD_ONLY_UNUSED, E_MOVE_IRREVERSIBLE, E_MOVE_OPEN, E_MOVE_UNSUPPORTED, E_NO_MOVE_POLICY, E_RESERVE_EXCEEDS_TOTAL, E_UNKNOWN_SITE. And 15 whose tickets closed without them, to be given a live ticket when the rewrite is planned: E_HARDENING_UNMET, E_IMAGE_USER_NOT_NUMERIC, E_FLOATING_IMAGE, E_STORAGE_UNSATISFIABLE, E_DISK_BINDING_CONFLICT, E_RAW_SECRET, E_UNDECLARED_SECRET_PATH, E_READER_NOT_DECLARED, E_SUBTREE_PREFIX_COLLISION, E_ROLL_AFFECTS_OTHER_READERS, E_PROVIDER_WITHOUT_COORDINATES, E_SCHEMA_VERSION_MISMATCH, E_ROUTE_AUTH_MODE_NOT_IN_TIER, E_CONTRACT_TOO_EARLY, E_CHANGELOG_MISSING. E_CHANGELOG_MISSING was first drafted as a self-check. It is not one: it refuses a declared migration whose changelog is missing from the repository, so it stays.
Concepts and chapters
The reconciliation ledgers are cut: the coverage ledger, accepted fragment drift, unmanaged surfaces and their review dates. They were added so that nothing live goes unattributed while two delivery paths coexist (0038). For one maintainer handing over one Project at a time, that hazard is met by a one-off diff of the render against fleet-infra's hand-written objects for that Project, run as part of its handover. That diff is a tool, not a model rule. Chapter 30's Ledgers and Coverage sections go. The Handover ledger is a different concept and stays.
Chapter 50 (Lifecycle) dissolves. Release Unit switchover, expand and contract, and a provider that moves go to chapter 55. The lock lifecycle goes to chapter 40. It was a separate reading path for change over time. Nothing in code links to it, and delivery already owns that story.
Chapter 60 keeps its rules (bootstrap set, handover ledger, restore, secrets at rest). Its step-by-step procedures (onboarding, adopting a live Application, adoption order, before the first production apply) move to a runbook under docs/ that the spec links to. Blueprint packs ("There are none") is history and is cut.
The Compatibility proof stays. A migration that breaks the still-serving revision is the data hazard 0001 takes most seriously.
ADRs
Leave: the 14 EMF records, with emf/; 0068, with emf/; 0038, with the ledgers. 0024 keeps dependency edges and loses unmanaged surfaces.
Fold:0041 into 0092; 0032 and 0044 into one record on versioning the published artifact; 0047, 0051 and 0083 into one record on publication; 0028 and 0029 into one record on what a grant is. The premises 0007 and 0008 stay on their own.
Status: each surviving proposed record is rewritten and accepted in the same pull request as its chapter. proposed stays only for a record still in a pull request.
A CONTEXT.md term lives only if the rewritten spec uses it. Bidirectional ledger and Unmanaged surface leave. Hardening Class, Env Variable and API Holder are named by no chapter: the rewrite either gives each one a defining chapter or removes it. Infrastructure Intent and Stable Address have no code yet, but #324 implements them, so they stay.
Consequences for other tickets
Decide between a spec/v2 and reworking v1 in place (Decide between a spec/v2 and reworking v1 in place #348): these cuts remove the open-item, diagram and history genres and dissolve chapter 50. That ticket decides whether the result is still v1.
Activity
ExtraToast commentedon Oct 9, 2026
Input from Decide the model-driven implementation's lifespan and sunset: once
emf/is deleted right after Task 3 is submitted, this ticket decides whether each oracle layer (intent, dependencies, effective, resolved, descriptor) still pays its way with one implementation. The deletion PR (#99) keeps all of them, so it does not settle that question.ExtraToast commentedon Oct 9, 2026
Resolution
Settled with the maintainer on 2026-10-09. The inputs were the measurements in Measure which chapters, terms, ADRs and codes pay their way, the goals in Re-state the goals and non-goals against the scale premise, and the live-need decisions (#351, #355, #356, #357). Each removal below names why the thing was put there and why that reason no longer holds. The rewrite carries out these cuts. Nothing is cut before it.
The bars every cut applies
Open items,Still to be graded, the sevenOpen in this chapter; 380 lines) go to tickets.Diagram sourcessections (1,070 lines) move to files beside the chapter. TheDelivery and co-testingpointers in chapters 10, 16, 40 and 50 become one line in the deferred register.E_code refuses authored input that is a real hazard at 0001 scale. A compiler self-invariant is a test or a property, not a code. A code pending on a closed ticket is either justified again on a live ticket or cut. The rewrite applies this bar to the 66 exercised codes as well, with no further decision round.emf/is deleted: keepresolved.json, which is a published artifact (0032), the rendered tree and*.diagnostics.json. Drop theintent,effectiveanddependenciesgoldens. They existed so that two implementations could meet at each step. With one implementation they pin internal steps rather than the four test seams. The singledescriptororacle goes when deploy-config-schema retires.Codes: the 42 pending
E_AMBIENT_INPUT_FORBIDDEN,E_INPUT_OUTSIDE_WORKDIR,E_RENDER_NONDETERMINISTIC,E_RENDER_OVERWRITE_REFUSED,E_UNSAFE_OUTPUT_PATH,E_FOREIGN_NAMESPACE,E_FORBIDDEN_KIND. They were written as render-safety codes for the tracer bullet (Tracer bullet: render the minimal case in TypeScript #97). They guard the compiler against itself, not the maintainer against an authoring mistake.E_UNKNOWN_OVERRIDE, which the spec already says does not exist, andE_RELEASE_UNIT_SINGLETON, which existed only whilereleaseUnitwas a free string.E_DUPLICATE_ROUTEintoE_DUPLICATE_ROUTE_MATCH, which already covers it.E_DUPLICATE_APEXintoE_DUPLICATE_HOST, keyed on host and tier as Decide how the model meets the live needs no chapter covers #351 decided.E_UNATTRIBUTED_OBJECT,E_UNACCEPTED_DRIFT,E_LEDGER_ENTRY_STALE,E_UNREGISTERED_SURFACE,E_UNMANAGED_SURFACE_WITHOUT_COORDINATES, and the exercisedE_LEDGER_REVIEW_OVERDUE. See below.E_AVAILABILITY_UNSUPPORTED,E_AVAILABILITY_WITHOUT_ENGINE,E_DUPLICATE_NODE,E_ENGINE_VERSION_MISSING,E_FORWARD_ONLY_UNUSED,E_MOVE_IRREVERSIBLE,E_MOVE_OPEN,E_MOVE_UNSUPPORTED,E_NO_MOVE_POLICY,E_RESERVE_EXCEEDS_TOTAL,E_UNKNOWN_SITE. And 15 whose tickets closed without them, to be given a live ticket when the rewrite is planned:E_HARDENING_UNMET,E_IMAGE_USER_NOT_NUMERIC,E_FLOATING_IMAGE,E_STORAGE_UNSATISFIABLE,E_DISK_BINDING_CONFLICT,E_RAW_SECRET,E_UNDECLARED_SECRET_PATH,E_READER_NOT_DECLARED,E_SUBTREE_PREFIX_COLLISION,E_ROLL_AFFECTS_OTHER_READERS,E_PROVIDER_WITHOUT_COORDINATES,E_SCHEMA_VERSION_MISMATCH,E_ROUTE_AUTH_MODE_NOT_IN_TIER,E_CONTRACT_TOO_EARLY,E_CHANGELOG_MISSING.E_CHANGELOG_MISSINGwas first drafted as a self-check. It is not one: it refuses a declaredmigrationwhose changelog is missing from the repository, so it stays.Concepts and chapters
LedgersandCoveragesections go. The Handover ledger is a different concept and stays.docs/that the spec links to.Blueprint packs("There are none") is history and is cut.ADRs
emf/; 0068, withemf/; 0038, with the ledgers. 0024 keeps dependency edges and loses unmanaged surfaces.proposedrecord is rewritten and accepted in the same pull request as its chapter.proposedstays only for a record still in a pull request.alertClassdropped, Decide how the model meets human access grants and Grafana content #357).Glossary
A
CONTEXT.mdterm lives only if the rewritten spec uses it. Bidirectional ledger and Unmanaged surface leave. Hardening Class, Env Variable and API Holder are named by no chapter: the rewrite either gives each one a defining chapter or removes it. Infrastructure Intent and Stable Address have no code yet, but #324 implements them, so they stay.Consequences for other tickets