Goldie Blocks

Refuted Deepening Candidates

The architecture-deepening ideas that were checked and ruled out, voided by later work, or superseded by a larger migration — recorded so no survey re-raises them

The architecture-deepening register (a plan kept from 2026-07-29 to 2026-09-12) is retired. Its open candidates are Backlog tasks labelled deepening; its one open owner question, the three incompatible handle-collision policies, is the Backlog decision decision-1; its landed candidates are recorded in the decision pages they produced. This page keeps the rest: every idea the register cleared, voided or superseded. An architecture survey that turns one of these up again must cite this page and say what has changed, or drop it.

In plain terms: this is the list of tidy-ups we looked at and decided not to do, with the reason for each — so the next reviewer does not spend a day rediscovering the same dead end.

Cleared on the evidence — the friction was not there

Checked by the 2026-08-08 survey at 2d88fac unless a later date is given.

  • convex/seed.ts (since moved to convex/folio/seed.ts) as a fourth block-version payload builder — it routes through projectMvpBlockVersionPayload, the one projector candidate 3 landed on 2026-08-06; toStoredDisplay is a deep single-purpose adapter with a stated end-of-life.
  • convex/internalRefs.ts as shallow ceremony — deleting it scatters fourteen path strings and their arg types across callers, and the file says why it exists. Its untyped return was candidate 15, landed 2026-08-09.
  • convex/blockAgentContract.ts (424 lines, since removed) as an over-trigger file — pure, single-purpose, covered by a 571-line sibling test; foldBlockAgentOutcome and proposalReplyIsSafe are deep. Not a file-size case.
  • readOrderedModuleRows as a third module-read path — it is already the shared reader for both thread queries, which diverge for a reason written at the call site.
  • canvas/v2/pending-turns.ts module-level mutable state (since removed) — intentional external store for useSyncExternalStore, with a test-reset hook and its own node test.
  • The route's nine block handlers as a consolidation — deleting them moves two ambient facts to the caller rather than concentrating anything, and each carries a distinct refusal or toast policy under One Block Notification Channel.
  • resolveBlockName single-sourcing — already one definition (after 8b80a97) with seven backend and three frontend consumers.
  • Format and parse of the pipe syntax as duplicated (candidate 11's survey, 2026-08-09) — every convex/ call site imported from the then src/lib, since removed; toDisplayValue is the only value-display projection and is deep. The adapter coverage gap it did find is closed by a compile-time exhaustive-key alarm over SnapshotField in to-field-entries.ts.
  • The three per-tier palette adapters as one adapter (proposed and refuted the same day, 2026-08-24) — block-card-palette.ts, module-card-palette.ts and document-folio-palette.ts total 159 lines against a 531-line shared stack-palette.ts, and none holds a state-precedence rule; the one ladder is resolveStackPaintState in the shared file. Consolidating further would add the tier axis that The Folio Tiers Share Parts, Not a Recipe forbids.
  • Cutting drafting-editor.tsx further after candidate 18 (re-grilled 2026-08-16) — superseded by owner ruling 2026-09-28 (GB-84): the cards now read one named Interface, CanvasCardContext (model/canvas-card-context.ts), so moving them no longer restates the editor's surface as a props contract; renderBlock and renderModule are CanvasBlockCard and CanvasModuleCard, and the file left the tolerated outliers. The refutation as recorded: renderBlock and renderModule bind the editor's own selection, capability, panel and edit state to one card; moving either restates that surface as a large props contract and fails the deletion test. The file is a named tolerated outlier in File Size, reduced since by extraction (GB-84) and not by splitting.

Void — the code they described was deleted

All four went with 9821c7b ("retire anchor ordering machinery"), verified 2026-08-06 and again 2026-08-08. Ordering is order.position at both tiers.

  • Candidate 1's deferred flow.after backfill — nothing left to backfill; flow.after survives only in comments. The envelope itself is Block Edits Run Inside One Envelope.
  • Candidate 1's rename-sweep deletion — the lazy migration it would have retired is gone with the machinery.
  • addDataBlock orders twice — sortModulesByFlow no longer exists.
  • readModuleAfter ×4 consolidation — readModuleAfter, orderBlocksByFlowAfter, sortModulesByFlow and resolveFlowAfter return zero matches across convex/ and src/. Nobody should design this.
  • dataSchemaFields needs direct tests (candidate 11, item 3) — no longer exported; reachable only through interviewContext's own Interface, which is the test surface.

Superseded — a larger migration owns the seam

  • Candidate 8, who owns snapshot lookup (Backlog task GB-56, closed 2026-09-12) — superseded by GB-152 Phase 2a: the unified read layer (convex/folio/reads.ts, snapshot.ts, schedule.ts, versionReads.ts, on main since 6a8b70b) is the one owner over folios, and the legacy readers this candidate argued over are deleted at Phase 5. Do not deepen the legacy seam.
  • Candidate 21, the storage half (per-tier Convex verbs repeated across storage) — superseded by GB-152 Phase 2b if 2b is built as one mutation per catalogue row against folios. The menu and arrangement half landed 2026-08-16 as Folio Operations Resolve Once. Reopen only if 2b is built verb-for-verb.
  • Candidate 28, one folios table — it is GB-152; the register only ever held a cross-reference. The design lives with that task and its plan.

Where the rest went

  • Landed candidates (1–7, 9–16, 18–20, 22–27) are recorded in the decision pages above plus The Three Selection Cells Are Not Duplicates, Component File Partitions Must Preserve Locality and Folio About Is Schema-Bound YAML; the rest were code-only extractions whose landing commits are in Git history.
  • Candidate 17, module-card.tsx (GB-74) — closed 2026-09-12: the file is 442 lines, under the trigger, after GB-168's promotions and the FolioCardActions slot.
  • Candidate 19, block-fields-view.tsx (666 lines) — the one open file-size trigger, carried as a Backlog task labelled deepening under File Size.
  • Small-consolidations batch — the handle-collision item is Backlog decision decision-1; the field-type vocabulary, SnapshotField mirror and re-export shim items are open only as evidence for a future survey and are not filed as work until one re-verifies them against the tree.

On this page