Skip to content

ADR-0076 D11 needs its ruled revision: the rest-server half is delineated-not-split, and the ADR still records it as an unmet obligation #9024

Description

@qq9340100

Filed unassigned and unlabelled for triage routing by the domain:cli PM seat (session session_01NaS1PAHJcPfAA2acnV53Tn). Not a claim. This lands in docs/adr/**, which is ADR-class and a path this lane's dispatches fence off — flagging rather than silently taking it.

What is owed

The maintainer ruled option B on #5949 — the ADR-0076 D11 second half (packages/rest/src/rest-server.ts) is delineated, not split; the decomposition programme does not open.

B's own deliverable, as the 2026-08-08 ruling framed it, is "an ADR-0076 D11 revision declaring the second half delineated-not-split". That revision has never been filed as a card and has never been written. Searched open and closed issues before filing; the near neighbours are #5357 (D11 anchors, closed), #5949 (the finding itself, still open), and #8850 (the prologue extraction, closed). No duplicate.

Why this is not bookkeeping

Right now docs/adr/0076-objectql-core-tiering.md D11 still reads as an unmet obligation — its status line says the rest-server half is untouched and larger than the figure it records. A reader arriving at that ADR today concludes there is undone work. There is not: there is a decision that it will not be done, recorded only in an issue comment thread.

That is the same defect #5949 was filed about in the first place. Its opening line is 「缺的是承接 — an observation with no written home. Ruling B without revising the ADR reproduces it exactly one layer up: the decision now has no承接 either, and the next ADR calibration round will rediscover "D11's second half never landed" and re-litigate a settled question. This card exists so that does not happen.

Scope

Revise ADR-0076 D11 so its status changes from not implemented to decided: delineated, not split. The revision should carry, because these are what make the decision reviewable rather than merely asserted:

  • The structural reading the ruling actually rests onRestServer registers routes through 18 registerXxxEndpoints methods that are already split by domain, i.e. the same axis packages/runtime/src/domains/* uses. The file is not an undifferentiated blob, which is why "already delineated" is an honest description rather than a rationalisation.
  • The accepted price, stated plainly — the domain delineation stays invisible to merge conflicts, affected-subset CI, and lane serialisation, because all three operate on file paths. Two agents editing registerApprovalsEndpoints and registerReportsEndpoints — blocks sharing no line — still collide. B is defensible; it is not free, and the ADR should say so rather than let a future reader discover it.
  • The replacement metric and the reopen condition — the line-count series is retired (it counted a proxy that is ~47% prose). It is replaced by: per PM round, the number of times two dispatchable cards could not run concurrently because both land in rest-server.ts. Reopen A if that counter sustains above ~1/round. First measured datapoint: 0.
  • The one genuinely undecomposed mass, so B is not read as blessing everything in the file: registerMetadataEndpointsInner at ~2,328 lines with no internal delineation. Its characterization is Characterize registerMetadataEndpointsInner (2,328 lines, 20% of rest-server.ts) — read and propose, do not split blind #8851's subject and is not foreclosed by this revision.

⚠️ Two corrections that must not be inherited

Both are errors the seat made and then measured its way out of on #5949. They are recorded here because an ADR revision is exactly where a withdrawn claim gets accidentally canonised:

  1. "The growth curve shows the interim convention is not holding"withdrawn. It used raw wc -l, and the file measures 6,008 code lines against 5,400 comment/blank (~47% prose), with the comments being dense explanatory documentation rather than commented-out code. A raw line delta cannot separate "new endpoints landed inline" from "someone documented a subtle refusal properly". ⛔ Do not carry the line-count series into the revision as evidence.
  2. "This file costs the lane serialisation roughly once a round"an impression, not a measurement, and the first real datapoint contradicted it (0). ⛔ Do not restate it. The zero strengthens B rather than weakening it, but it has to be reported as the measured number it is.

Also do not carry the old framing that D11's second half is "a central route generator" / "a route table to split" — measured false, and it survived five triage rounds before anyone checked.

Not in scope

⛔ No code moves. ⛔ The registerMetadataEndpointsInner characterization is #8851, not this. ⛔ This card does not re-open A/B — the ruling is made; this writes it down.

Related: #5949 (the finding and the full four-prism analysis) · #8850 (prologue extraction, landed) · #8851 (characterize registerMetadataEndpointsInner) · #5357 / PR #5940 (D11 anchors) · #5063 (D1–D12 status-line calibration) · ADR-0076 D11 / OQ#9 · ADR-0112 (the prologue's real owner).

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions