Skip to content

Historical 1.x prerequisite checkpoints (through 2026-10-12)

Moved from the TypeScript migration RFC, former section “Historical 1.x prerequisite checkpoints (through 2026-10-12)”, on 2026-10-16 at RFC baseline b2aca67d76af45e554c620818a982a81f8d2d52b. Preserve the original evidence and unqualified boundaries. The English source recorded 38cb407ed; the Chinese source recorded 06b6caa07. Neither is a new qualification of the current candidate.

中文版.

The following records explain the prerequisites and validation at their named sources. Their references to reachable writers and a “next” cutoff describe that 1.x baseline, not remaining implementation work in the candidate above.

Rechecked at main 38cb407ed: #5413/#5466/#5283 and the affected creation, Host-stop and UI-history owners #5500/#5805/#5308/#5398 are merged. Reuse their delivered boundaries rather than reopening the October 2 merge queue. The current validation, migration and deletion plan now prioritizes installed reversible qualification, affected consumer adoption, policy migration and last-caller deletion; it records the merged sources and the remaining evidence separately.

Canonical new-Goal creation is already implemented by #5500/#5805. The existing machine setting and coordination/local_authority_defaults.ts choose canonical SQLite with hard_lease for unconfigured new Goals; CLI bootstrap and App creation share the typed initialization and original-operation recovery owner. Explicit v0 settings and v1 canonical_creation=false preserve post-promotion target behavior. Existing Goals keep their recorded selection. See the configuration and disable contract. This is the source candidate, not certification of installed adoption, a released default, full shared Goal intent or D2/D3. Do not rebuild a creation/default owner.

Canonical Todo entrypoint separation (T4): all five mutation facades now share todos/mutation_api.py; historic imports are lazy and the unpromoted writer is isolated in todos/legacy_mutation.py. The installed File/SQLite oracle can remove the whole writer module while exercising lifecycle and settlement recovery. The cold-import oracle now composes reviewed import, fresh leased updates/new writes and original-operation recovery with that writer absent; source-display loss and provider outage cannot replace the current authority or erase later writes. The original import cursor remains historical while the current provider revision is preserved. This prepares last-caller deletion without claiming code retirement: bootstrap, handoff, team-plan and Monitor still have supported source callers; keep capture/outbox and historical recovery until their own exits. Caller and rollback inventory. Production Todo consumers use the concrete owners instead of the historic loopx.todos re-export: CLI registration/actions, quota and planning, capability writeback, source lease reads and the Lark source projection import the same concrete mutation, full-read, path or Markdown display owners. No new wrapper, decision or RPC is introduced. The historic public imports and their supported unpromoted IO remain available. Disposable source/normal-wheel probes remove the facade, the whole legacy Todo writer and four shadow producers together; real File/SQLite CLI lifecycle, once-only settlement, Monitor replay and App cold-import/action/restart journeys must still work, with missing-provider/lease and changed-source/backup refusals. The App HTTP receiver now also removes bootstrap.py from that same copied distribution and checks the complete removed set before each server start, restart and auxiliary CLI. Separate fixture results cannot prove this combined absence. The ordinary canonical CLI creation entrypoint remains with its owner; removing it from the cold-import receiver is a disposable qualification probe, not a supported package format or permission to break the additive 1.x line. 中文:App 冷导入、后续写入和重启使用同一份缺少旧入口、writer 与 source producer 的 隔离副本;不能拼接两组各自缺少一部分模块的结果。正常 canonical 创建仍保留其 现有入口,这个临时卸除验收不等于已完成整族退役、自然试用或正式安装采用。 Lark dry-run and Explore replay qualify local consumers only, not live external adoption. The fresh research execution path added by #5280 reintroduced a function-local historic import after the earlier caller inventory. It now imports todos/list_readback.py directly, preserving the same typed current-Todo validation and the historical replay branch before that read. The qualification includes fresh research execution, actor/runnable/input refusals, exact lineage readback and replay after current input/Todo changes in the same facade-present/absent source and normal-wheel File/SQLite matrix. A whole-production Python import guard resolves relative imports and aliases; dynamic loading still requires the isolated real journeys. Keep this guard as new capabilities arrive, rather than treating a past inventory as a permanent exit. Last supported source writers, historical recovery, installed cohort and release exits remain independently open.

The next T4 package is the import-first normal-writer cutoff, not another re-export or producer-loading extraction. At 38cb407ed, live unpromoted callers remain in ordinary mutation, bootstrap/creation opt-out, team-plan, Monitor, ownership/source lease and active capture/binding. Reuse their typed admission/transaction owners; treat retained source capture, historical receipts and permanent document IO as recovery obligations. The existing delivery Todos should carry these concrete exits:

  • Qualify the installed import/backup/recovery journey for the declared source matrix; importer implementation is already present and is not a missing-code dependency. Do not reinterpret complete coordination backup as complete Goal backup.
  • Run the bounded reversible core-developer SQLite trial before the breaking cutoff, recording real Host adoption/use separately from conversion drills.
  • Deliver the cohesive 2.0 normal-writer cutoff: fresh unmigrated writes and execution grants refuse before effects; canonical work and original-operation recovery pass with the old writer physically absent. Keep the additive 1.x import/deprecation line compatible. Admission must preserve original lease release and receipt/outbox recovery before import; denying the existing shared legacy fence indiscriminately would also block these prerequisites. Remove the Python missing-fence bypass with the typed cutoff and validate the combined recovery-to-import journey specified in the linked release contract.
  • After the last source caller exits, reconcile pending outboxes and delete unused capture producers/private decisions together. Keep supported historical readers and current-head rollback; do not wait for every external user to migrate or claim full T4/D2/default qualification from internal deletion.

This updates the existing R5/T4 frontier and release proposal; it creates no parallel migration owner, runtime gate or release activation.

Team-plan recovery prerequisite: an unpromoted plan that published its original receipt can now recover through the Chat confirmation owner while shadow bootstrap is interrupted. Registry/Todo/source locks still protect the read, and the existing typed identity validator rejects changed intent, actor or reviewed basis. Recovery verifies source durability without loading the capture producer or admitting new writes; fresh plans still obey all source, management and promotion guards. This repairs the existing 1.x recovery path and does not activate the 2.0 cutoff or settle the remaining lease/outbox/Host obligations.

The retained import-compatible field writer now composes resume normalization and contradictory-clear rejection in its existing typed field plan. Keep blank Python input omission and locked IO; retire the duplicate normalization crossing, not the still-supported writer or migration reader.

The remaining legacy writer and bootstrap capture adapter now avoids loading rollout history and constructing a Todo projector when runtime shadow is off and there is no active durable binding. It still resolves the source identity; an active binding continues to require durable preparation even after config is disabled. This removes optional capture work from ordinary legacy writes, without changing their output, history retention or outbox recovery. Python retains this Host IO adapter until its last supported source writer is replaced; this is neither whole-writer retirement nor default-provider qualification. Unpromoted lease acquire now loads the capture adapter only when the typed result carries a capture request. The real CLI and normal-wheel oracle cover acquire/replay, rejected stale renewal, renewal, transfer and release with the four legacy shadow producer modules physically absent and with no enabled capture or active binding. An active binding still delivers capture after the setting is removed. This retires a default-off dependency, not the supported source writer or pending capture/history recovery.

Handoff/continuation display decisions now belong to the existing TypeScript Todo context owner. Summary reuses its normalized identity/claim/exclusion/class facts in one batch; the index keeps source compaction before labelling and audit merging in one native batch. Planning and quota collectors project whole chosen sets. Oversized display context uses byte-bounded read-lens batches while counts, dependency decisions and closure retain their full-source owner. A single oversized historical record reuses the existing private snapshot transport: credential checks see its full text before display truncation. The Python facade keeps shared metadata codecs and historical tuple/SHA-1 identity encoding, with no Python decision fallback. Retain nested-empty precedence, Unicode whitespace/codepoint limits and credential rejection before truncation; these are compatibility obligations. File/SQLite CLI and normal-wheel recovery must preserve exact source and provider revision when Markdown display is absent or the selected provider is unavailable. This read-model retirement does not retire the supported mutation/Host callers or certify a released SQLite default.

Public add now composes scope, supported wait and bounded Monitor metadata in one typed creation-scope request. The legacy add writer consumes that same fresh draft rather than re-planning it; standalone line codecs and successor creation retain their own admission. Priority and validation-declaration checks keep their prior diagnostic order, and canonical provider transactions still recheck registry/claim/lease/CAS authority. This retires duplicate add composition, not the supported Markdown writer or bootstrap/Host/history IO.

The canonical team-plan caller now loads capture and Markdown editing only in its supported unpromoted arm. Real File/SQLite Chat and normal-wheel source removal cover confirmed batch commit, later-write replay, provider restoration, projection recovery and imported historical receipts. The existing TS transaction, source guards and projection owner remain unchanged; the legacy batch IO instrumentation seam stays lazy for its current consumers. This is a caller-isolation exit, not deletion of the live legacy writer or completion of receiver adoption, Host execution, PostgreSQL or D2 qualification. Contract and retained duties.

Public CLI isolation now keeps shadow configuration in coordination/configuration.py and complete source capture in coordination/authority_source_capture.py. Cold import, source inspection and historical promotion recovery reuse those retained owners; only explicit enabled shadow actions load the old producers. Ordinary new-Goal SQLite creation, leased work, once-only settlement and reversible exit, plus cold File/SQLite import and original-operation replay, run through the real CLI with all four shadow producers physically absent in disposable source/normal-wheel copies. The old module still re-exports the retained APIs for current consumers; enabled capture, outbox and legacy commands remain supported. Preserve exact source identity, archive dependencies, safe lease reads and later-write recovery. This removes an eager-import blocker; deleting live producers still requires their last-caller exit. App/Lark contracts, provider transactions, cohort adoption and frozen D2 evidence remain separate.

The Monitor router likewise isolates its live source writer. Historical receipt codec/replay has a small shared scheduler IO owner, while the existing TS batch still owns operation identity and decisions. File/SQLite CLI and normal-wheel source removal must preserve later canonical writes and original successors; promoted replay leaves old outbox bytes inert. Unpromoted markerless batch recovery retains its existing bounded drain. Business-receipt replay does not guarantee shadow catch-up: lock deferral or an expired proof budget preserves pending evidence for an independent authority-shadow drain. Recovery keeps the original source bytes, successor IDs and once-only quota effect; it does not replay the writer to finish catch-up or increase the inline limits. This removes a canonical import dependency, not the supported legacy writer. The absent arm also removes all four shadow producer modules using the qualified CLI startup isolation above. Retained duties and rollback.

Shadow diagnostics now have an independent read-only boundary: retained outbox disk codecs live in local_authority_shadow_history.py, and status/candidate read transport in local_authority_shadow_readback.py. The public status and enabled coordination-shadow inspect/qualify/read-candidate commands call that owner without loading source producers. Full source and normal-wheel observations retain matched/refused, default-off, source-drift and missing/corrupt-store recovery behavior with all four producer modules absent. Historical imports remain exact aliases; bootstrap, rollback and promotion retain their live adapter. The existing TS qualifier now propagates provider read refusals before lineage validation can mislabel corruption as bootstrap_required; valid/missing stores retain their behavior. This is an explicit failure-diagnostic correction, with no new RPC or migration authority; drain still uses its existing orchestration. Original entry identity, malformed evidence, cursor residue and missing-store behavior remain unchanged. Python retains historical filesystem decoding and presentation IO; TS retains history proof, delivery and cleanup authority. Existing producer imports are aliases for supported callers, not duplicate implementations. Source and normal-wheel File/SQLite recipient checks compare complete status results and unchanged original bytes with producers present or absent. This is a historical-reader exit prerequisite, not writer deletion, outbox disposition, installed cohort adoption or release-default qualification. See operator readback and rollback.

Existing Goal migration, two-policy ownership retirement and storage-format upgrade retain separate receipts and exits. Original-receipt recovery does not justify retaining legacy as a live policy. Required migration readers remain.

Imported canonical bootstrap reconnect now reuses the existing typed authority reader, keeping current Todos, leases and original import receipts without entering the Markdown writer. File/SQLite real CLI coverage includes an old v0 preference naming the other provider, missing display, missing selected authority, force/route rejection and later-write replay with legacy producers absent. Python retains bootstrap registry/Host IO; it adds no decision owner or creation receipt. This closes a reconnect dependency, not the remaining unpromoted writer, active outbox, Host or release-default acceptance.

A bounded cohort can start after its installed recovery and relevant execution controls pass; it does not certify a released default or formal ten-day D2. Frozen failures/missing evidence remain visible. T4 deletes proven redundant owners alongside implementation, without waiting for R6 or all Python to vanish. This replaces stale current-count estimates, not historical execution evidence.

Public-scan privacy checkpoint: the retained Python filesystem/regex owner classifies canonical inputs before reader submission, independently of display paths. Overlapping roots cannot remove a private classification; reports use the widest requested root consistently. Narrow explicit files/directories retain private ancestry. Git-verified worktrees remain their own namespace beneath private parent directories, while a directory merely named .git grants no exception. Outside a worktree, explicit inputs beneath private state remain excluded. Tracked-file policy, fresh symlink resolution and existing error rules remain in this owner; no second control-plane decision source or new setting is introduced. This safety repair does not qualify scanner latency, SQLite release defaults or whole T4 retirement. CLI checks and quota preparation use the rule; App status continues to report repository scanning as deferred.