@topolo/cli 0.13.17 → 0.13.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +18 -4
  2. package/agent-packs/README.md +469 -1
  3. package/agent-packs/coverage_changed.py +1 -1
  4. package/agent-packs/docs/selected-artifacts.md +47 -0
  5. package/agent-packs/documentation/cloud-task-state.md +56 -0
  6. package/agent-packs/domain-contexts/README.md +25 -0
  7. package/agent-packs/domain-contexts/cicd.json +8 -0
  8. package/agent-packs/gui/feed-adapter.js +4 -0
  9. package/agent-packs/gui/index.html +9 -0
  10. package/agent-packs/gui/studio.css +14 -0
  11. package/agent-packs/gui/studio.js +121 -0
  12. package/agent-packs/gui/studio_server.py +355 -0
  13. package/agent-packs/roles/cicd/CLAUDE.md +24 -0
  14. package/agent-packs/specializations/cicd--cicd.json +5 -0
  15. package/agent-packs/specializations/cicd--pipeline-engineering.json +5 -0
  16. package/agent-packs/specializations/cicd--promotion-deployment.json +5 -0
  17. package/agent-packs/specializations/cicd--queue-recovery.json +5 -0
  18. package/agent-packs/specializations/cicd--release-verification.json +5 -0
  19. package/agent-packs/specializations/cicd--runner-capacity.json +5 -0
  20. package/agent-packs/specializations/intakes--engineering-02.json +5 -0
  21. package/agent-packs/specializations/intakes--engineering-03.json +5 -0
  22. package/agent-packs/specializations/intakes--engineering.json +5 -0
  23. package/agent-packs/specializations/intakes--operator-01.json +5 -0
  24. package/agent-packs/specializations/intakes--operator-02.json +5 -0
  25. package/agent-packs/specializations/operator-skills--audio-and-narration-specialist.json +5 -0
  26. package/agent-packs/specializations/operator-skills--brand-and-copywriting-specialist.json +5 -0
  27. package/agent-packs/specializations/operator-skills--capability-research-specialist.json +5 -0
  28. package/agent-packs/specializations/operator-skills--data-analysis-and-visualization.json +5 -0
  29. package/agent-packs/specializations/operator-skills--financial-evidence-specialist.json +5 -0
  30. package/agent-packs/specializations/operator-skills--operating-template-specialist.json +5 -0
  31. package/agent-packs/specializations/operator-skills--operator-skill-library.json +5 -0
  32. package/agent-packs/specializations/operator-skills--operator-skills.json +5 -0
  33. package/agent-packs/specializations/operator-skills--operator-workflow-evaluation.json +5 -0
  34. package/agent-packs/specializations/operator-skills--privacy-and-agreement-review.json +5 -0
  35. package/agent-packs/specializations/operator-skills--storytelling-specialist.json +5 -0
  36. package/agent-packs/specializations/operator-skills--ux-and-accessibility-specialist.json +5 -0
  37. package/agent-packs/specializations/operator-skills--video-production-specialist.json +5 -0
  38. package/agent-packs/specializations/operator-skills--visual-design-specialist.json +5 -0
  39. package/agent-packs/specializations/operator-skills--workflow-integration-specialist.json +5 -0
  40. package/agent-packs/specializations/operators--access-and-privacy.json +5 -0
  41. package/agent-packs/specializations/operators--accounting-evidence-review.json +5 -0
  42. package/agent-packs/specializations/operators--agreement-operations.json +5 -0
  43. package/agent-packs/specializations/operators--books-operator.json +5 -0
  44. package/agent-packs/specializations/operators--brand-operator.json +5 -0
  45. package/agent-packs/specializations/operators--commerce-operations.json +5 -0
  46. package/agent-packs/specializations/operators--communications-operator.json +5 -0
  47. package/agent-packs/specializations/operators--content-and-assets-operator.json +5 -0
  48. package/agent-packs/specializations/operators--customer-operations.json +5 -0
  49. package/agent-packs/specializations/operators--design-operator.json +5 -0
  50. package/agent-packs/specializations/operators--design-production-02.json +5 -0
  51. package/agent-packs/specializations/operators--design-production-03.json +5 -0
  52. package/agent-packs/specializations/operators--design-production-04.json +5 -0
  53. package/agent-packs/specializations/operators--device-and-feed-operator.json +5 -0
  54. package/agent-packs/specializations/operators--director-operator.json +5 -0
  55. package/agent-packs/specializations/operators--experience-review.json +5 -0
  56. package/agent-packs/specializations/operators--growth-operations.json +5 -0
  57. package/agent-packs/specializations/operators--learn-operator.json +5 -0
  58. package/agent-packs/specializations/operators--localization-operator.json +5 -0
  59. package/agent-packs/specializations/operators--operators.json +5 -0
  60. package/agent-packs/specializations/operators--pay-operator.json +5 -0
  61. package/agent-packs/specializations/operators--research-and-intelligence.json +5 -0
  62. package/agent-packs/specializations/operators--roadmap-operator.json +5 -0
  63. package/agent-packs/specializations/operators--social-content-operator.json +5 -0
  64. package/agent-packs/specializations/operators--talent-operations.json +5 -0
  65. package/agent-packs/specializations/operators--web-operator.json +5 -0
  66. package/agent-packs/specializations/operators--workflow-operator.json +5 -0
  67. package/agent-packs/specializations/specialists--adversarial-qa.json +5 -0
  68. package/agent-packs/specializations/specialists--backlog-dispatch.json +5 -0
  69. package/agent-packs/specializations/specialists--build-01.json +5 -0
  70. package/agent-packs/specializations/specialists--build-02.json +5 -0
  71. package/agent-packs/specializations/specialists--build-03.json +5 -0
  72. package/agent-packs/specializations/specialists--developer-environment-steward.json +5 -0
  73. package/agent-packs/specializations/specialists--documentation-knowledge-steward.json +5 -0
  74. package/agent-packs/specializations/specialists--execution-readiness.json +5 -0
  75. package/agent-packs/specializations/specialists--incident-triage.json +5 -0
  76. package/agent-packs/specializations/specialists--platform-package-steward.json +5 -0
  77. package/agent-packs/specializations/specialists--product-direction-01.json +5 -0
  78. package/agent-packs/specializations/specialists--product-direction-02.json +5 -0
  79. package/agent-packs/specializations/specialists--release-recovery.json +5 -0
  80. package/agent-packs/specializations/specialists--release-watch.json +5 -0
  81. package/agent-packs/specializations/specialists--roadmap-planning-01.json +5 -0
  82. package/agent-packs/specializations/specialists--roadmap-planning-02.json +5 -0
  83. package/agent-packs/specializations/specialists--security-permissions-review.json +5 -0
  84. package/agent-packs/specializations/specialists--system-architecture-01.json +5 -0
  85. package/agent-packs/specializations/specialists--system-architecture-02.json +5 -0
  86. package/agent-packs/specializations/specialists--translation.json +5 -0
  87. package/agent-packs/specializations/specialists--ux-consistency-review.json +5 -0
  88. package/agent-packs/specializations/specialists--workflow-improvement.json +5 -0
  89. package/agent-packs/specializations/specialists--worktree-retirement.json +5 -0
  90. package/agent-packs/src/topolo_agent_pack/cicd.py +101 -0
  91. package/agent-packs/src/topolo_agent_pack/claude.py +22 -7
  92. package/agent-packs/src/topolo_agent_pack/claude_activation.py +157 -0
  93. package/agent-packs/src/topolo_agent_pack/claude_completion_recovery.py +216 -0
  94. package/agent-packs/src/topolo_agent_pack/claude_desktop.py +181 -0
  95. package/agent-packs/src/topolo_agent_pack/claude_dispatch.py +240 -0
  96. package/agent-packs/src/topolo_agent_pack/claude_prompt.py +74 -0
  97. package/agent-packs/src/topolo_agent_pack/claude_runner.py +207 -0
  98. package/agent-packs/src/topolo_agent_pack/claude_service.py +397 -0
  99. package/agent-packs/src/topolo_agent_pack/cli.py +188 -18
  100. package/agent-packs/src/topolo_agent_pack/closed_ledger_fence.py +118 -0
  101. package/agent-packs/src/topolo_agent_pack/cloud_attach.py +128 -0
  102. package/agent-packs/src/topolo_agent_pack/cloud_cutover.py +134 -0
  103. package/agent-packs/src/topolo_agent_pack/cloud_delta.py +162 -0
  104. package/agent-packs/src/topolo_agent_pack/cloud_migrate.py +142 -0
  105. package/agent-packs/src/topolo_agent_pack/cloud_recovery.py +42 -0
  106. package/agent-packs/src/topolo_agent_pack/cloud_work.py +126 -0
  107. package/agent-packs/src/topolo_agent_pack/coordinator_activity.py +27 -0
  108. package/agent-packs/src/topolo_agent_pack/coordinator_context.py +91 -0
  109. package/agent-packs/src/topolo_agent_pack/coordinator_refresh.py +116 -0
  110. package/agent-packs/src/topolo_agent_pack/desktop_acceptance.py +45 -0
  111. package/agent-packs/src/topolo_agent_pack/desktop_launcher.py +114 -0
  112. package/agent-packs/src/topolo_agent_pack/domain_context.py +38 -0
  113. package/agent-packs/src/topolo_agent_pack/execution.py +104 -7
  114. package/agent-packs/src/topolo_agent_pack/fresh.py +1 -1
  115. package/agent-packs/src/topolo_agent_pack/frontdoor.py +23 -0
  116. package/agent-packs/src/topolo_agent_pack/linked_task_context.py +80 -0
  117. package/agent-packs/src/topolo_agent_pack/live.py +285 -18
  118. package/agent-packs/src/topolo_agent_pack/native.py +160 -4
  119. package/agent-packs/src/topolo_agent_pack/policy.py +8 -0
  120. package/agent-packs/src/topolo_agent_pack/review_context.py +33 -0
  121. package/agent-packs/src/topolo_agent_pack/role_catalog.py +137 -0
  122. package/agent-packs/src/topolo_agent_pack/role_context.py +63 -0
  123. package/agent-packs/src/topolo_agent_pack/role_refresh.py +50 -0
  124. package/agent-packs/src/topolo_agent_pack/task_models.py +11 -7
  125. package/agent-packs/src/topolo_agent_pack/throughput.py +149 -0
  126. package/agent-packs/src/topolo_agent_pack/topolo.py +7 -1
  127. package/agent-packs/src/topolo_agent_pack/work.py +322 -0
  128. package/agent-packs/src/topolo_agent_pack/work_adoption.py +122 -0
  129. package/agent-packs/src/topolo_agent_pack/work_artifacts.py +84 -0
  130. package/agent-packs/src/topolo_agent_pack/work_context.py +77 -0
  131. package/agent-packs/src/topolo_agent_pack/work_gui.py +51 -0
  132. package/agent-packs/src/topolo_agent_pack/work_native.py +414 -0
  133. package/agent-packs/src/topolo_agent_pack/work_wait.py +151 -0
  134. package/agent-packs/templates/topolo-coordinators/AGENTS.md +7 -0
  135. package/agent-packs/templates/topolo-coordinators/agents/intakes/cicd/AGENTS.md +6 -0
  136. package/agent-packs/templates/topolo-coordinators/agents/intakes/cicd/config.json +4 -0
  137. package/agent-packs/templates/topolo-coordinators/agents/intakes/engineering/AGENTS.md +3 -0
  138. package/agent-packs/templates/topolo-coordinators/agents/intakes/engineering/config.json +4 -0
  139. package/agent-packs/templates/topolo-coordinators/agents/intakes/operator-01/AGENTS.md +3 -0
  140. package/agent-packs/templates/topolo-coordinators/agents/intakes/operator-01/config.json +4 -0
  141. package/agent-packs/templates/topolo-coordinators/pack.json +56 -0
  142. package/dist/chunk-NYDIAYVY.js +144 -0
  143. package/dist/{claude-pack-backend-YEVPAOID.js → chunk-UY5LEU5C.js} +1659 -21
  144. package/dist/claude-desktop-profile-JCQKSY3K.js +13 -0
  145. package/dist/claude-pack-activation-Q25MCEPU.js +506 -0
  146. package/dist/claude-pack-backend-HUTKGIDS.js +90 -0
  147. package/dist/index.js +408 -164
  148. package/package.json +8 -6
package/README.md CHANGED
@@ -537,10 +537,24 @@ exchanges the stored refresh token for a new pair before making the request
537
537
  and rewrites the config — no user action required. The OAuth `client_id` used
538
538
  at login is persisted alongside the credential so refresh can re-authenticate.
539
539
 
540
- If refresh fails (network, rotated/revoked refresh token), the CLI proceeds
541
- with the stale credential and the request returns `auth_error` — run
542
- `topolo auth login` to re-authenticate. The stored config is not cleared on
543
- transient refresh failures.
540
+ If refresh fails for a transient reason (network, a 5xx, a rate limit), the
541
+ saved grant is kept and the request fails with a retryable error; a rate limit
542
+ reports `rate_limited` with `retryAfter`, and the CLI never retries a refresh
543
+ on its own.
544
+
545
+ If Auth refuses the grant (`invalid_grant` or `expired_token`), the saved
546
+ sign-in has ended. It is removed once, under the config lock, and is never sent
547
+ again by any process, so a dead sign-in cannot use up the token endpoint's
548
+ failure limit for everything else on the machine. One shared device
549
+ re-authorization is started for that environment and context, and then:
550
+
551
+ - **At a terminal**, the CLI opens the approval page, prints its URL and code,
552
+ waits for approval and continues the command with the new credential.
553
+ - **Anywhere else** (no terminal, `CI` set, or `TOPOLO_NO_REAUTH_PROMPT=1`), the
554
+ command exits with code 2 and a structured `reauth_required` error that
555
+ carries the approval link, user code, expiry and the equivalent
556
+ `topolo auth login` command. The device code is never printed. Approve the
557
+ link (or run the login command) and the next command continues.
544
558
 
545
559
  ## Topolo Agent Packs
546
560
 
@@ -415,7 +415,60 @@ transport applies and reads back those settings. UI automation is not part of
415
415
  the adapter. Import status is deliberately separate from native activation proof.
416
416
  ### Experimental Claude live configuration
417
417
 
418
- The native import is not pack activation. `configure` can preflight and apply
418
+ Fresh coordinator `configure` now uses capability discovery in the running
419
+ app's loaded native modules. It does not admit a particular app version or
420
+ bundle filename. Engineering, Operator and CI/CD are pinned automatically by
421
+ the acknowledged native sidebar command during this settings phase. Saved
422
+ `isStarred` metadata alone is insufficient. Missing or changed capabilities,
423
+ native refusals and unmatched readbacks stop setup with a durable journal.
424
+ `startup-settings` is an explicit alias for this settings phase.
425
+
426
+ The settings result keeps `packActivated` and `cloudDispatchVerified` false.
427
+ Native import, startup permissions, successful task execution, cloud task
428
+ authority, live Activity and retirement are separate acceptance boundaries.
429
+ The worker adapter now binds native SDK terminal receipts to the exact input,
430
+ SDK session and selected model. Retirement requires a verified cloud checkpoint
431
+ and refuses a pinned worker, active work or an archive cascade into children.
432
+ These capabilities do not by themselves activate the operational cloud broker.
433
+ For a source-independent three-coordinator installation, successful native
434
+ startup also installs the supported `UserPromptSubmit` and `PreToolUse` hooks
435
+ using the actual attached SDK session IDs. The prompt hook uses Claude's native
436
+ `prompt_id` to reserve one cloud task, then stops the coordinator turn before
437
+ inference. Missing identity, an inactive cloud authority or a lost delivery
438
+ acknowledgement blocks direct coordinator execution; no transcript is consulted
439
+ and no replacement task is created.
440
+
441
+ The Claude cloud service uses the existing GUI connection and ledger protocol.
442
+ It creates single-use native sessions inside the already signed-in Claude
443
+ Desktop process. Approved native setup installs an authenticated, owner-only
444
+ local socket exposing the existing create, send, read and archive operations.
445
+ The temporary setup debugger can then close. The connection exports neither
446
+ vendor credentials nor arbitrary evaluation, and does not require CLI login.
447
+ A tool-free readiness result,
448
+ native model, bypass and effective-effort acknowledgements precede task input.
449
+ Each phase loads one Agent specialization as `CLAUDE.md` and its selected cloud
450
+ task packet. Progress, checkpoints and independent review use the same cloud
451
+ events as Codex. Completed workers are archived through the native Desktop
452
+ session manager only after independently verifying their cloud checkpoint.
453
+ Lost acknowledgements preserve the owned session and refuse another delivery.
454
+ The connection belongs to one Desktop process; a replacement process requires
455
+ native setup and a new connection before dispatch. No local task ledger or
456
+ chat history replaces the cloud authority. Startup refuses execution until
457
+ the production Docs conditional-write contract and migrated dataset are active.
458
+
459
+ `topolo agent-packs work serve-claude --harness claude` starts the owning service
460
+ explicitly; installed front-door hooks start it on demand after verifying cloud
461
+ activation. Its lifetime is bounded by the verified Desktop process. Setup
462
+ preparation, source tests and hook installation are not a live dispatch proof.
463
+ Task assignment has its own native boundary: it requires the exact tool-free
464
+ readiness result and an acknowledged canonical cloud delivery reservation before
465
+ sending the preallocated input UUID. Missing or lost acknowledgements retain
466
+ that reservation for reconciliation; they never trigger another send.
467
+
468
+ The older full-roster switch/recovery path described below retains its legacy
469
+ compatibility qualification; it is not the fresh coordinator settings path.
470
+
471
+ The native import is not pack activation. The legacy adapter can preflight and apply
419
472
  an already adopted roster through the running Claude main process. This is an
420
473
  internal compatibility adapter qualified for **Claude Desktop 2.31226.1** and
421
474
  the exact native module hashes in `src/lib/claude-pack-backend.ts`; it refuses
@@ -722,3 +775,418 @@ Only existing owned physical destinations inside the library can change. Shared
722
775
  Apply reserves `launchers/adoption-<UUID>.json` exclusively. The journal starts in `may-have-config-effects`, records each verified replacement, and becomes `configuration-prepared-native-adoption-unverified` only after all readbacks. Every write rechecks generation, source, profile metadata, preservation pins and destination custody. An interrupted or conflicting apply retains the journal and any uncertain temporary file; it never automatically replays or rolls back. Reconcile exact effects with the original owner.
723
776
 
724
777
  No apply result proves native reload, identity, current RBAC, model/effort, loaded context, original-intake permission routing or a native tool result. Hosts may react to configuration changes; admit the actual affected owner/generation and normal request settlement before applying in a live host. Later ordinary startup can renew the private credential and load identity. A previous 429/403 or scoped recovery hold remains separately applicable and elapsed time grants no retry. Actual Codex and Claude same-query context, permission, nonce result, cancellation/settlement and own retirement require independent native evidence.
778
+
779
+ ## Throughput and adaptive reasoning
780
+
781
+ New task-model templates use revision 2. Codex chooses Luna/low only for an
782
+ explicit `trivial`, low-risk `format`, `extract-fields`, `reference-lookup` or
783
+ `status-read` task. Routine tasks use Sol/low (with medium as a declared effort
784
+ alternative); standard tasks use Sol/medium; complex and security-critical
785
+ tasks use Sol/high. Astra remains available only through an authorized explicit
786
+ override. Unavailable models/efforts refuse rather than silently falling back.
787
+ Existing installed configurations and fixed native sessions are not migrated by
788
+ upgrading the adapter. Review and install a current `models-template`, then verify
789
+ the actual native model/effort acknowledgement for every task. `low` is the native
790
+ name for light reasoning.
791
+
792
+ `topolo agent-packs lane allocate --input snapshot.json` returns a bounded,
793
+ read-only allocation plan. The closed version-1 input contains `now` (epoch
794
+ seconds), `maxAgeSeconds` (1–3600), actual execution `slots` (0–32),
795
+ `maxNewLanes` (0–8), `tasks`, `lanes`, `completed`, `configuration` and `catalog`.
796
+ The configuration/catalog use the existing task-model contracts. Each task has
797
+ `id`, `capability`, `priority` (0 is highest), `owner` (lane ID or null),
798
+ `dependencies` (completed task IDs), `authorized`, `paused` and `modelTask`.
799
+ Each lane has `id`, `capabilities`, `observedAt`, `registryState`
800
+ (idle/busy/held/paused/unknown), `nativeState` (idle/busy/unknown), `activeTask`
801
+ (ID or null), `retainedTasks`, `reusableCheckpoint`, `assignments`,
802
+ `lastAssigned` and its explicit model `constraints`.
803
+
804
+ The allocator considers every compatible worker rather than preferring an
805
+ ordinal. It chooses the least assigned, then oldest assigned worker; never
806
+ moves an owned task; permits retained custody only at an explicit idle safe
807
+ checkpoint; isolates stale/contradictory observations and blocked dependencies;
808
+ and limits both existing work and proposed new lanes by supplied execution
809
+ capacity. A worker receives at most one assignment per plan. The caller must
810
+ supply trustworthy current observations; a timestamp in JSON does not prove
811
+ native availability or admission.
812
+
813
+ The result's snapshot digest must be checked by the canonical claim writer
814
+ before an exclusive assignment. Each assignment includes its full model
815
+ resolution with `nativeACK: null`. Create requests are proposals requiring the
816
+ normal registered native lifecycle, not created agents or claims. This command
817
+ does not claim, dispatch, wake, schedule, execute or retire anything. Native
818
+ settings, authority, actual delivery and completion remain independently
819
+ verified boundaries. In particular, it does not repair or establish a hidden
820
+ cross-chat event transport by writing a file.
821
+
822
+ Fresh-role `config.json` model/effort presets are retained in the captured agent
823
+ manifest and used when compiling its Codex runtime policy. They do not revert
824
+ to a legacy high-effort role default on activation. A missing preset keeps the
825
+ legacy profile unchanged. Native catalog and exact settings readback still apply.
826
+
827
+ ### Individual role definitions and front-door dispatch
828
+
829
+ `work-bind-roles --pack NAME --agent-workspace WORKSPACE` performs installation
830
+ administration: it discovers Agent definitions and writes only IDs and instruction
831
+ digests to `work/role-bindings.json`. Each definition has a unique
832
+ `config.specialization.logicalId`, concise role-specific instructions, and matching
833
+ `config.purpose`. Source authoring files are in `specializations/`; they are not a
834
+ runtime export. Updating an existing published definition requires its supported
835
+ draft lifecycle transition. This adapter reads the pinned definition; it does not
836
+ claim that an edited definition has a newly published hosted-execution version.
837
+
838
+ Each temporary worker fetches exactly one Agent ID, verifies its organization,
839
+ workspace, logical role and instruction digest, and writes only that specialization
840
+ to its new workspace (`AGENTS.md` for Codex, `CLAUDE.md` for Claude). Model
841
+ constraints cover the configured harnesses; resolution still intersects the
842
+ selected harness with its current native account catalog and refuses unavailable
843
+ models. A separate pinned task context can reference one immutable
844
+ Bytes JSON packet (`topolo-task-context-v1`, taskId, markdown). Assignment never
845
+ reads the role export, Agent memory or prior chat history. Missing or changed
846
+ bindings stop dispatch rather than borrowing another role's context.
847
+
848
+ Enable `frontdoorDispatch: true` in the reviewed work configuration only after all
849
+ three channel bindings and role/context references are qualified. Text requests
850
+ from Engineering, Operator and CI/CD then become broker tasks before the
851
+ coordinator receives an acknowledgement-only receipt. A native message ID provides
852
+ idempotency; ambiguous retries and unbound attachments refuse. This is functional
853
+ routing, not a new tool-permission sandbox. Existing direct coordinator turns are
854
+ preserved and are never submitted again by enabling this feature.
855
+
856
+ Activity projects task-ledger transitions and separately labels observed native
857
+ coordinator activity. Observing an active or idle native chat does not establish
858
+ business completion. Native lifecycle events persist these observations and wake
859
+ the GUI event stream; a fresh GUI request can also reconcile the current status.
860
+ Observation failures are exposed, not presented as verified live progress.
861
+
862
+ Mutable cloud task authority remains a separate activation gate. Recovering an
863
+ immutable evidence archive or fetching individual roles/context does not prove
864
+ conditional cloud task ownership, safe machine takeover, or Claude Desktop native
865
+ settings activation. Those boundaries require their own runtime acceptance.
866
+
867
+ Pass `--bytes-workspace WORKSPACE` when binding installation roles to configure the
868
+ reviewed production task-context workspace. A new request is queued immediately;
869
+ its background dispatch publishes and reads back one small immutable request
870
+ packet before starting a native worker, then persists that artifact reference on
871
+ the existing task. Upload acknowledgement loss is retained as an uncertain receipt
872
+ and is not replayed. Task context never silently falls back to a template tree.
873
+ Native input arriving during the short acknowledgement turn (`turn/steer`) enters
874
+ the same idempotent request path as `turn/start`.
875
+
876
+ ### Source-only Topolo installation
877
+
878
+ The bundled `templates/topolo-coordinators` template creates exactly Engineering,
879
+ Operator and CI/CD. It contains no native IDs, old work or specialist chats.
880
+ Build it in a genuinely new installation store, then prepare cloud dispatch:
881
+
882
+ ```sh
883
+ topolo-agent-pack --store /local/AgentPacks/installation build topolo-instance --template templates/topolo-coordinators
884
+ topolo-agent-pack --store /local/AgentPacks/installation work-install --pack topolo-instance --agent-workspace AGENT_WORKSPACE --bytes-workspace BYTES_WORKSPACE
885
+ ```
886
+
887
+ The version-2 specialization catalog contains only role metadata, Agent references,
888
+ instruction digests and explicit task-model constraints. Engineering, operations
889
+ and CI/CD have separate eligible disciplines and independent reviewers. A task
890
+ worker inherits its currently owned coordinator's qualified permission profile,
891
+ then receives the selected specialization and independently resolved task model;
892
+ there is no captured-specialist runtime or source thread dependency.
893
+
894
+ Preparation is not activation. This path requires the existing activated cloud
895
+ work dataset and current organization-bound/native permission qualification.
896
+ Missing cloud authority refuses before execution and never selects local history
897
+ or SQLite as an alternative. A busy outgoing owner is preserved.
898
+
899
+
900
+ ## Destination account and native sidebar sections
901
+
902
+ Portable packs carry role and group membership, not authority to use a captured
903
+ account identity. Import creates native memberships without copying source
904
+ account IDs into the destination sidebar. The ordinary switch/install verification
905
+ reads the destination's native `account/read` response and binds the original
906
+ sections to its `workspaceRouting.chatgptAccountId` when the account is ChatGPT.
907
+ No credentials are parsed, copied or created by sidebar binding.
908
+
909
+ A provider-only or signed-out profile reports `pending-sign-in`; a non-ChatGPT
910
+ account reports `pending-chatgpt-account`; a ChatGPT response lacking the actual
911
+ workspace ID reports `pending-account-identity`. These states do not mean the
912
+ sidebar is installed or visible. After ordinary sign-in, repeat the same switch
913
+ command: an unchanged composition refreshes only its destination presentation,
914
+ without replacing agents or history. A managed window uses its existing native
915
+ manager and checks the selected home, account and backend generation.
916
+
917
+ `configured-rendering-unverified` means account-scoped settings were bound; it
918
+ does not prove visible sections, provider transport or context/permission routing.
919
+ Sidebar binding never changes model providers, models, effort, permissions or
920
+ authentication mode. Genuine account/provider coexistence, manual/background/
921
+ dynamic provider inheritance and actual transport still require qualification
922
+ before changing live profile defaults.
923
+
924
+ ## Closed legacy cloud cutover
925
+
926
+ `work-cloud-prepare-delta --source-store SOURCE --input REQUEST.json` prepares
927
+ explicitly selected closed tasks against the destination's existing inactive
928
+ Docs dataset and exact current version. The request contains `documentId`,
929
+ `datasetId`, `expectedCurrentVersionId`, and `tasks` selectors with `taskId`,
930
+ `revision`, and `artifactManifest` (null, or an exact path/SHA-256 manifest).
931
+ The command preserves task and worker identities, blocked states and historical
932
+ checkpoint hashes. It publishes only the selected request packet, final assistant
933
+ outputs, normalized terminal receipts and explicitly declared artifact files to
934
+ Bytes, then verifies their readback before a revision-checked local metadata
935
+ transition. Native prompts, reasoning and tool histories are excluded. A bounded
936
+ artifact manifest supports more files without loading them all into dispatch
937
+ context. Original evidence references remain historical provenance, not fresh
938
+ verification of external files. Durable upload receipts refuse uncertain replay.
939
+
940
+ After all tasks and native workers are closed, upgrade the idle legacy proxy to
941
+ the released source and request `work cutover`. This authenticated native barrier
942
+ holds the broker lock, checks pending jobs and turns, fences SQLite writes inside
943
+ its transaction and stops its native child. Its immutable ACK binds the process
944
+ birth, root, executing guard source and final snapshot. An older running proxy
945
+ cannot claim this contract. A failed stop leaves a fence requiring explicit
946
+ recovery; it does not permit migration or resume writes.
947
+
948
+ `--store DESTINATION work-cloud-cutover --source-store SOURCE --input REQUEST.json`
949
+ requires that same ACK and an exact `documentId`, `datasetId`,
950
+ `expectedCurrentVersionId`, and `sourceDigest`. It preserves the existing portable
951
+ cloud rows, appends verified delta rows under their original IDs, checks the
952
+ retained inventory digest, and activates that same Doc with one conditional
953
+ version write. Every new context packet, checkpoint and result artifact is read
954
+ back before activation. A durable intent and exact readback resolve a lost ACK
955
+ without repeating the write. Neither command starts work or creates replacement
956
+ tasks. Do not reactivate the fenced local broker after cloud activation.
957
+
958
+ A fresh signed-in Claude installation can use the same startup entry point:
959
+
960
+ ```sh
961
+ topolo agent-packs --store /local/AgentPacks/installation startup-settings PACK --prepare --pid CURRENT_PID --endpoint AUTHORIZED_LOOPBACK_ENDPOINT --apply
962
+ ```
963
+
964
+ `--prepare` validates existing approved installation consent and current organization
965
+ policy, prepares exactly the three coordinator records without opening CLI
966
+ sessions, and writes a new policy artifact. Missing native coordinator identities
967
+ are created through the signed-in Desktop session manager and must finish their
968
+ own tool-free native readiness result before settings or pins are accepted.
969
+ Prepared coordinator context uses role charters and policy rather than local
970
+ conversation history. An unresolved startup journal prevents preparation.
971
+
972
+ For an explicitly selected move from another installation, add
973
+ `--previous-connection /previous/installation/claude/desktop-task-connection.json`.
974
+ The old endpoint and its exact three bound coordinators must be quiescent. After
975
+ successor settings, control and hook acknowledgements, startup unpins and archives
976
+ only those old coordinators through acknowledged native APIs. Active work, child
977
+ cascades, changed ownership or lost acknowledgements retain the recovery journal;
978
+ they never trigger an automatic replay. Cloud activation and verified business
979
+ work remain separate acceptance boundaries.
980
+
981
+ ## Attach another clean installation to the same task authority
982
+
983
+ After the original migration activates its existing Docs dataset, a second
984
+ clean installation can join that **same document and dataset**, with a distinct
985
+ installation ID. Prepare its authored three-coordinator pack, organization-bound
986
+ consent and `work-install` metadata first; do not copy task SQLite files or chat
987
+ history, and do not reuse the fenced migration-source directory.
988
+
989
+ ```sh
990
+ topolo agent-packs --store CLEAN_INSTALLATION work-cloud-attach --input REVIEWED_SELECTORS.json
991
+ ```
992
+
993
+ The exact selectors are `pack`, `workspaceId`, `documentId`, `datasetId`,
994
+ `installationId`, `expectedCurrentVersionId` and `expectedCatalogDigest`.
995
+ Attachment freshly verifies the production principal, organization execution
996
+ policy, selected current Docs version, activated dataset and local role catalog.
997
+ It rejects an existing local ledger, native owner, unresolved operation or an
998
+ installation ID already recorded in cloud tasks or workers. Foreign active work
999
+ retains its owner. The operation writes only a private local binding and its
1000
+ exclusive recovery journal; it creates no cloud documents, tasks or workers and
1001
+ never adopts or resumes work. An exact verified replay reads back the same
1002
+ binding without rewriting it. A lost local acknowledgement can reconcile an
1003
+ already written exact binding; a missing or changed binding remains held without
1004
+ replay. Native execution refuses any incomplete attachment journal. Normal host
1005
+ startup and task dispatch remain separate, verified activation steps.
1006
+
1007
+
1008
+ ## Reconnect the existing fenced Codex installation
1009
+
1010
+ `work-cloud-migrate --input SELECTORS.json` prepares a read-only plan for the
1011
+ original installation whose closed SQLite ledger was migrated to an existing
1012
+ cloud dataset. This differs from clean-install attachment: it preserves its
1013
+ three existing coordinator keys and native IDs, including mixed-pack channels.
1014
+ Selectors are `installationId` (a fresh, distinct identity),
1015
+ `expectedFenceDigest`, `expectedMetadataDigest` and
1016
+ `expectedTargetCatalogDigest`. Apply the exact reviewed plan with
1017
+ `work-cloud-migrate --input PLAN.json --apply`.
1018
+
1019
+ The operation verifies the immutable SQLite fence, source history, original
1020
+ target binding, canonical retained digest, current production identity and
1021
+ organization policy, selected Agent definitions and original native consent.
1022
+ It changes only local configuration, reviewed role references and cloud binding,
1023
+ with a durable partial-write hold. Cloud versions and task owners are recorded
1024
+ as observations; normal concurrent cloud work cannot invalidate a local-only
1025
+ attachment. All actual task mutations retain their existing cloud version and
1026
+ owner CAS checks. No task, worker, owner or local history is copied, rewritten,
1027
+ adopted or resumed by attachment. The legacy ledger remains fenced permanently.
1028
+ Admission rechecks the exact metadata and selected channel-role closure before
1029
+ using the original coordinator as the worker's permission source. Starting the
1030
+ attached installation never automatically adopts another installation's work.
1031
+
1032
+
1033
+ Fresh Claude readiness startup uses the native workspace-trust manager for only
1034
+ its exact approved directory, with literal-key trust and current context/consent
1035
+ checks. It does not trust a parent directory or dismiss a trust dialog by UI.
1036
+ If an interrupted three-coordinator bootstrap left only its first creation
1037
+ attempt, `topolo agent-packs --store ROOT startup-settings PACK --endpoint URL
1038
+ --pid PID --reconcile` independently checks all three native identities,
1039
+ transcripts and pending starts. It never sends input. Only verified absence can
1040
+ retire the startup marker into the retained audit; arbitrary earlier filesystem
1041
+ effects remain UNKNOWN. Any existing session, history, active start, changed
1042
+ context or later journal effect keeps the hold. Start normally only after that
1043
+ explicit reconciliation receipt; do not remove the marker by hand.
1044
+
1045
+ For an older installation that predates frontdoor bindings, an explicit
1046
+ `--previous-library /exact/old-profile/library` reads its existing private
1047
+ coordinator-adoption proof and three original identity records. Their file
1048
+ hashes stay bound throughout startup. Native idle/ownership checks happen
1049
+ before fresh readiness starts. After successor settings, pins, hooks and task
1050
+ control are acknowledged, the existing native retirement path unpins and
1051
+ archives only those three old identities. Active work, changed proof, children
1052
+ or lost acknowledgements preserve the hold; no UI pinning or replacement
1053
+ metadata is used.
1054
+
1055
+ If readiness creation was acknowledged but the SDK has not yet published its
1056
+ session identity, the reader waits on the exact queued input; terminal results
1057
+ still require the matching SDK identity. An interrupted readiness-only operation
1058
+ can use `startup-settings PACK --continue-readiness --policy ORIGINAL_POLICY
1059
+ --endpoint CURRENT_ENDPOINT --pid CURRENT_PID --apply` with the same previous
1060
+ connection/library selectors. This retains its original journal, context and
1061
+ preallocated IDs. Existing probes are verified without resending input; only
1062
+ previously uncreated coordinator identities may start. Unknown starts, changed
1063
+ context, business input or later settings effects refuse continuation.
1064
+
1065
+ The native cloud authorizer uses a qualified host Python 3.11+ executable,
1066
+ independent of Desktop's inherited PATH. Its absolute regular executable, byte
1067
+ digest and exact version are bound into native control qualification and checked
1068
+ before each authorization child; no application environment or account changes.
1069
+
1070
+ Managed Claude startup retains both identity-bearing profile roots. Before native
1071
+ startup, `startup-settings PACK --launch-desktop --policy POLICY
1072
+ --desktop-profile EXISTING_DESKTOP_DIRECTORY --claude-config-dir EXISTING_CODE_DIRECTORY
1073
+ --apply` launches through macOS LaunchServices with the exact SDK environment,
1074
+ or discovers the already owned profile process. It never copies authentication
1075
+ or history and does not stop another profile. A private exclusive launch receipt
1076
+ prevents duplicate launches after a lost acknowledgement. The subsequent normal
1077
+ startup verifies the current native user-data directory and SDK root before any
1078
+ session or settings changes. App versions are discovered rather than pinned.
1079
+
1080
+ When an acknowledged readiness probe survived an app restart but its ephemeral
1081
+ SDK terminal did not, explicit original-operation continuation can adopt only
1082
+ its exact persisted fixed user/READY exchange, selected model/settings and
1083
+ unchanged role context after independently proving the original process dead.
1084
+ It records `originalTerminalUnknown: true`; it does not reconstruct a terminal
1085
+ receipt or resend the probe. Only this installation readiness exchange can use
1086
+ the history adoption path. The native manager then warms the same existing SDK
1087
+ session without model input, and settings/process identity are read back before
1088
+ startup proceeds. Pending/held work, another input, tools, changed identity or
1089
+ uncreated IDs with history preserve the hold. Business worker completion still
1090
+ requires the original matching SDK terminal and lifecycle evidence.
1091
+
1092
+ If readiness, pins, effective settings and the native task-control installation
1093
+ were acknowledged but front-door hook installation failed, use the original
1094
+ operation's `startup-settings PACK --complete-startup --policy ORIGINAL_POLICY
1095
+ --endpoint CURRENT_ENDPOINT --pid CURRENT_PID --apply` (and the original
1096
+ `--previous-library` when present). This checks the existing three idle probe
1097
+ sessions and control identity, consumes the unchanged original front-door input,
1098
+ finishes idempotent hooks and then retires the exact old coordinators. It never
1099
+ creates sessions, resends readiness, reapplies models or repins. Any later work,
1100
+ changed settings/context, missing ACK or uncertain retirement keeps the hold.
1101
+ Hook installation has a bounded ten-minute budget for the selected cloud reads;
1102
+ failed attempts retain private error-code/status and stderr-digest diagnostics.
1103
+
1104
+ After the same three coordinators have completed their cloud dispatch, review,
1105
+ Activity and archival qualification, finalize their original startup with
1106
+ `topolo agent-packs --store ROOT startup-settings PACK --finalize --policy POLICY
1107
+ --startup-operation ORIGINAL_UUID --qualification-task COMPLETED_TASK_UUID
1108
+ --endpoint OWNED_LOOPBACK_ENDPOINT --pid OWNED_PID --allow-native-debugger-menu --apply`. This independently
1109
+ reads the current cloud task/checkpoints and native session identities before
1110
+ journaled adoption of metadata. It never imports, copies or resends a conversation.
1111
+ The completed startup journal and original unknown terminal evidence remain intact.
1112
+
1113
+ Subsequent `startup-settings PACK --launch-desktop --policy POLICY --apply` uses
1114
+ the recorded signed-in profile and same three Desktop/SDK identities. It reports
1115
+ ready only after the closed native control and owning cloud dispatcher answer.
1116
+ A cold start verifies the predecessor is dead and every installation-owned worker
1117
+ is closed before temporary loopback inspection restores connect-only native
1118
+ control. Inspection closes on success and failure; uncertain launch or metadata
1119
+ ACKs retain their journal and prohibit replay. An active metadata file alone is
1120
+ never operational acceptance. The Electron inspector capability is discovered
1121
+ and verified against the actual PID/profile; no application build is pinned.
1122
+
1123
+ With explicit launcher-only menu authorization, cold restoration discovers the
1124
+ unique enabled, unchecked native “Enable Main Process Debugger” checkbox in the
1125
+ exact owned macOS process. It requires a free loopback9229 endpoint, uses only
1126
+ that vendor capability, then verifies the actual PID and Desktop/SDK profile
1127
+ before native control restoration. The temporary inspector closes afterward.
1128
+ There are no guessed startup flags, SIGUSR1, fuse changes, application patches,
1129
+ pin/archive UI actions or account copying. Absent/disabled/ambiguous native
1130
+ capability or unresolved workers retain their existing ownership and audit.
1131
+
1132
+ An approved setup can upgrade only the closed native task-control implementation
1133
+ without touching coordinator sessions or task inputs:
1134
+
1135
+ ```sh
1136
+ topolo agent-packs --store INSTALLATION startup-settings PACK --upgrade-control \
1137
+ --startup-operation ORIGINAL_STARTUP_UUID --policy ORIGINAL_POLICY \
1138
+ --endpoint CURRENT_APPROVED_LOOPBACK_ENDPOINT --pid CURRENT_DESKTOP_PID --apply
1139
+ ```
1140
+
1141
+ This requires the completed original three-coordinator startup, unchanged owned
1142
+ context and bindings, a stopped dispatcher, and zero native workers. It preserves
1143
+ all startup and unresolved-effect evidence, sends no native input, and closes the
1144
+ temporary inspector even on refusal. Recover an already-delivered uncertain
1145
+ completion with `work-recover-claude-completion --harness claude --input REQUEST`
1146
+ only under its exact reviewed worker/output manifest; this never resends work.
1147
+
1148
+ If a cold launch stopped before any control installation, retain its journal and
1149
+ use `startup-settings PACK --launch-desktop --continue-launch ORIGINAL_UUID
1150
+ --policy ORIGINAL_POLICY --endpoint CURRENT_APPROVED_ENDPOINT --pid CURRENT_PID
1151
+ --apply`. This accepts only the original single-row pre-control journal, an
1152
+ independently dead predecessor, unchanged identities, closed historical workers
1153
+ and the exact already launched profile. It never launches another application,
1154
+ creates coordinators or resends input. Any later or ambiguous journal retains
1155
+ custody and refuses this continuation.
1156
+
1157
+ A cold launch that has already acknowledged its exact native control and hooks,
1158
+ but failed before service readiness, uses the same `--continue-launch` selector.
1159
+ The launcher validates that journaled control, private secret, original predecessor,
1160
+ installed hook bindings and three unchanged SDK identities. It requires the former
1161
+ service process to have exited and its lifetime lock to be free, then independently
1162
+ verifies the current control is idle before ensuring the service and completing
1163
+ metadata. It does not repeat connect-only calls, control installation, hooks,
1164
+ coordinator creation or input. Unknown or later journal stages remain held.
1165
+ The dispatcher closes its accepted watch connections before awaiting server
1166
+ shutdown, so a connected Activity view cannot keep a dead Desktop's owner alive.
1167
+
1168
+ `topolo agent-packs --store ROOT desktop-launcher` installs the distinct
1169
+ Topolo Agent Pack application for that Codex installation. Use its own icon:
1170
+ generic ChatGPT, Personal or Work icons can open another profile. Opening the
1171
+ pack icon restores its exact live managed process without restarting the backend
1172
+ or replaying active work; a cold open uses the existing guarded launcher.
1173
+
1174
+
1175
+ ## Coordinator conversation and specialist assignments
1176
+
1177
+ The three pinned coordinators converse with the human on their existing native
1178
+ model. Each prompt receives bounded current-channel cloud task heads and the
1179
+ qualified installation's broker command. Status, follow-ups and clarification
1180
+ create no task automatically; the original input and attachments remain intact.
1181
+ For an actual assignment, the coordinator reconciles existing work and explicitly
1182
+ uses the task broker with the supplied deterministic native-message request ID.
1183
+ Implementation and operational effects stay with task-based specialists.
1184
+
1185
+ Claude's coordinator hook permits owned context reads and a single typed request
1186
+ file, plus foreground bundled broker commands for reads, dispatch and responses.
1187
+ It denies direct shell engineering, source edits and other agent mechanisms.
1188
+ `work wait --input REQUEST.json` reads an existing task until a canonical change
1189
+ or terminal result, with exact task/cursor selectors and a 1–30 second bound.
1190
+ It never submits, adopts, reruns or changes work. Coordinators inspect those real
1191
+ results and answer in their native conversation; a queue acknowledgement or GUI
1192
+ link alone does not satisfy the human request.
@@ -15,7 +15,7 @@ from coverage.parser import PythonParser
15
15
 
16
16
  RELEASE_BASE = '6a13ada56844712aae58738ba01dbbdf90718bef'
17
17
  SOURCE = pathlib.Path('agent-packs/src/topolo_agent_pack')
18
- MODULES = {'topolo', 'claude', 'policy', 'permissions', 'approvals', 'execution', 'live', 'cli', 'lanes', 'task_models'}
18
+ MODULES = {'topolo', 'claude', 'policy', 'permissions', 'approvals', 'execution', 'live', 'cli', 'lanes', 'task_models', 'throughput'}
19
19
 
20
20
 
21
21
  class CoverageRefused(RuntimeError):
@@ -0,0 +1,47 @@
1
+ # Selected legacy task artifacts
2
+
3
+ `work-cloud-prepare-delta` preserves the existing task and worker IDs, closed
4
+ native receipts, source digests and unresolved outcomes. It does not start work
5
+ or activate a dataset. Original archived files and checkpoints are never edited.
6
+
7
+ An existing worker-local artifact manifest remains a list of `{path, sha256}`
8
+ rows with optional `bytes`. Select its exact original path and SHA-256 in the
9
+ task selector's `artifactManifest`. All reviewed evidence must be represented,
10
+ except the separately normalized original native checkpoints.
11
+
12
+ When necessary reviewed evidence lives outside the worker workspace, prepare a
13
+ new selection file in an owned evidence directory, without changing the worker's
14
+ original manifest. Its shape is:
15
+
16
+ ```json
17
+ {
18
+ "format": "topolo-selected-task-artifacts-v1",
19
+ "taskId": "<the existing task>",
20
+ "workerId": "<its existing execution worker>",
21
+ "artifacts": [{"path": "<exact source file>", "sha256": "<exact SHA-256>"}]
22
+ }
23
+ ```
24
+
25
+ The selection is bound by its own path and digest. An outside-workspace artifact
26
+ is eligible only when its exact path and digest already occur in that task's
27
+ reviewed evidence. This does not grant access to an arbitrary directory. Files
28
+ must remain owned, single-link, non-symlink ordinary files with unchanged bytes
29
+ and no group/world write permission. Missing or changed historical sources fail
30
+ explicitly; no fallback or invented copy is accepted.
31
+
32
+ If the live original path has advanced, an explicit selection may add
33
+ `contentPath` to a row already present in the task's reviewed evidence. It names
34
+ an owned immutable archive inside the selected manifest's directory. Its bytes
35
+ must match the **original reviewed SHA-256** exactly. The original `path` and
36
+ hash remain the evidence identity, with the archive path recorded separately.
37
+ This permits verified historical bytes without overwriting another owner's live
38
+ file. There is no automatic fallback, changed-hash acceptance or history upload.
39
+
40
+ The read-only `cloud_delta.selected_artifacts(task, workers, selector)` preflight
41
+ checks the whole selection before any upload. The delta command preflights every
42
+ selected task before preparing cloud context. A TASK-CONTINUATION.json packet
43
+ must belong to the same task; each absolute file reference in its proof mapping
44
+ must be explicitly selected and hash-verified. Native checkpoints, JSON/JSONL
45
+ session histories, prompts and reasoning are refused as artifacts. The portable
46
+ manifest retains original source paths and hashes alongside each verified cloud
47
+ artifact reference. Existing task/claim/intent custody and effects remain unchanged.
@@ -0,0 +1,56 @@
1
+ # Cloud task continuity
2
+
3
+ Topolo Agent supplies reusable specialization. Task records, owner/effect
4
+ identities, checkpoints and evidence belong in Docs and Bytes. A native chat is
5
+ an execution surface, never the task authority.
6
+
7
+ ## Evidence recovery
8
+
9
+ `topolo agent-packs work-recover --reference recovery-reference.json --destination NEW_DIRECTORY`
10
+
11
+ The small portable reference identifies an organization-scoped Bytes archive
12
+ and its compressed and uncompressed hashes. The command downloads it using the
13
+ currently authenticated production organization credential, verifies every file,
14
+ and restores content-addressed objects and a path index. It never restores old
15
+ absolute paths, native transcripts, credentials, a dispatch database, or worker
16
+ ownership. Missing original files remain explicit. The destination must be new.
17
+ This command does not read an existing AgentPacks library.
18
+
19
+ Evidence recovery establishes continuity of the snapshot. It does not establish
20
+ that remote work is currently active, that every source checkout can be rebuilt,
21
+ or that a held/UNKNOWN operation can safely be repeated.
22
+
23
+ ## Mutable cloud ledger (release-gated)
24
+
25
+ `cloud_work.CloudStore` requires the published Docs conditional-version contract
26
+ (`expectedCurrentVersionId`) and bounded current-state reads (`includeHistory`).
27
+ Do not enable it against an older catalog. It uses one Docs-selected generation
28
+ and an immutable Bytes retained inventory. Each operation reads the current
29
+ generation and conditionally publishes the next. A conflicting write is refused;
30
+ a lost acknowledgement is reconciled once by the exact operation identity.
31
+ Unavailable cloud state never falls back to local SQLite.
32
+
33
+ Both `work/config.json` authority `topolo-docs` and a complete `work/cloud.json`
34
+ binding must be installed together. The selected cloud body must explicitly be
35
+ activated. A prepared migration snapshot grants no execution authority. The
36
+ installation identity is unique: startup cannot adopt another installation's
37
+ workers, and dispatch skips tasks owned elsewhere. Continuation uses the existing
38
+ task identity after terminal-worker reconciliation and explicit checkpoint adoption.
39
+
40
+ The active document is bounded to 900,000 characters. Archival beyond that limit
41
+ is not implemented; reaching the limit refuses further writes visibly. This is
42
+ not a claim of an unlimited production task service.
43
+
44
+ ## Activation acceptance
45
+
46
+ Before cutting over: quiesce the current owner, preserve a matching final
47
+ snapshot, verify the published production guard with a real competing-writer
48
+ test, verify exact task/context/evidence identity from an empty installation,
49
+ and reconcile all current native workers. Install the cloud authority fence
50
+ before allowing dispatch. Validate request idempotency, lost-response recovery,
51
+ foreign-owner refusal and live GUI activity. Do not mark migration complete on
52
+ the basis of unit tests or an evidence-only restore.
53
+
54
+ Claude Desktop settings/adoption require their own native acknowledgement.
55
+ Writing CLI settings or importing a seed is not proof of Desktop bypass mode,
56
+ model selection, specialist dispatch or successful execution.
@@ -0,0 +1,25 @@
1
+ The CI/CD operating reference is an existing private Docs runbook, separate from
2
+ role instructions and current task state. `cicd.json` records its reviewed immutable
3
+ version and selected heading. Put this reference in `config.domainContextRefs`
4
+ (as a one-element array) on the existing CI/CD coordinator and its five specialist
5
+ Agent definitions through their supported draft lifecycle. Keep
6
+ `config.specialization` limited to format, logicalId and instructions, with purpose
7
+ matching instructions.
8
+
9
+ Installation discovery binds these exact references alongside each role's
10
+ instruction digest. It refuses CI/CD definitions without one reviewed reference.
11
+ Every selected role materialization fetches and validates that immutable Docs
12
+ version and heading before native startup, even when an existing task packet is
13
+ cached. Only the selected section enters `context/release-controller.md`; no old
14
+ task history or whole runbook is injected. The Docs transport can return bounded
15
+ version history because the released get contract has no separate exact-version
16
+ read. The resolver limits history to128 versions, the selected body to1MB and the
17
+ selected section to12KB; it refuses a missing pinned version instead of using a
18
+ newer version silently.
19
+
20
+ Current authority endpoints, access bindings, fleet state and exact release IDs
21
+ belong in the task's existing Docs/Bytes packet. The runbook identifies supported
22
+ read interfaces; it does not grant credentials, transfer ownership or authorize
23
+ mutations. Updating source authoring files alone does not change hosted Agent
24
+ records or activate the Desktop launcher. Review, native readback and normal
25
+ source release remain separate gates.