@orkestrel/scaffold 0.0.77 → 0.0.78

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 (157) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +204 -0
  2. package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +102 -0
  3. package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +95 -0
  4. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +207 -0
  5. package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +108 -0
  6. package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +114 -0
  7. package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +108 -0
  8. package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +156 -0
  9. package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +196 -0
  10. package/dist/agents/skills/orkestrel-publish/scripts/compare.js +206 -0
  11. package/dist/agents/skills/orkestrel-publish/scripts/pins.js +93 -0
  12. package/dist/agents/skills/orkestrel-publish/scripts/wave.js +458 -0
  13. package/dist/agents/skills/orkestrel-publish/scripts/window.js +188 -0
  14. package/dist/agents/skills/orkestrel-scout/scripts/map.js +300 -0
  15. package/dist/agents/templates/brief.md +55 -0
  16. package/dist/bin/main.js +4 -2
  17. package/dist/bin/main.js.map +1 -1
  18. package/dist/host/AGENTS.md +77 -135
  19. package/dist/host/agents/orchestration.md +147 -998
  20. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +2 -2
  21. package/dist/host/agents/skills/enterprise-bootstrap/references/inspection.md +1 -1
  22. package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/SKILL.md +6 -13
  23. package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/agents/openai.yaml +1 -1
  24. package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/references/fleet.md +5 -7
  25. package/dist/host/agents/skills/{orkestrel-build-application → orkestrel-build}/SKILL.md +11 -22
  26. package/dist/host/agents/skills/{orkestrel-build-application → orkestrel-build}/agents/openai.yaml +1 -1
  27. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +8 -16
  28. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +3 -3
  29. package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +13 -13
  30. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +61 -0
  31. package/dist/host/agents/skills/orkestrel-dispatch/agents/openai.yaml +4 -0
  32. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +25 -0
  33. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +32 -0
  34. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +259 -0
  35. package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +110 -0
  36. package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +115 -0
  37. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +239 -0
  38. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +124 -0
  39. package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +123 -0
  40. package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +129 -0
  41. package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +157 -0
  42. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +42 -193
  43. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +38 -108
  44. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +35 -134
  45. package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/SKILL.md +10 -14
  46. package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/agents/openai.yaml +1 -1
  47. package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/hardening.md +3 -4
  48. package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +228 -0
  49. package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/SKILL.md +15 -23
  50. package/dist/host/agents/skills/orkestrel-journey/agents/openai.yaml +4 -0
  51. package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/captures.md +1 -1
  52. package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/SKILL.md +25 -33
  53. package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/agents/openai.yaml +1 -1
  54. package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/references/capture-harness.md +3 -3
  55. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +33 -20
  56. package/dist/host/agents/skills/orkestrel-publish/references/release.md +39 -0
  57. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +22 -21
  58. package/dist/host/agents/skills/orkestrel-publish/references/window.md +27 -14
  59. package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +220 -0
  60. package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +114 -0
  61. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +629 -0
  62. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +242 -0
  63. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +28 -0
  64. package/dist/host/agents/skills/orkestrel-scout/agents/openai.yaml +4 -0
  65. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +352 -0
  66. package/dist/host/agents/templates/brief.md +21 -142
  67. package/dist/host/agents/transports/claude-cli.md +21 -0
  68. package/dist/host/agents/transports/codex.md +38 -159
  69. package/dist/host/agents/transports/cursor.md +16 -65
  70. package/dist/host/claude/AGENTS.md +38 -0
  71. package/dist/host/claude/agents/analyst.md +14 -53
  72. package/dist/host/claude/agents/astra.md +26 -0
  73. package/dist/host/claude/agents/builder.md +14 -30
  74. package/dist/host/claude/agents/checker.md +13 -57
  75. package/dist/host/claude/agents/distiller.md +11 -26
  76. package/dist/host/claude/agents/grok.md +12 -35
  77. package/dist/host/claude/agents/opus.md +14 -30
  78. package/dist/host/claude/agents/planner.md +10 -44
  79. package/dist/host/claude/agents/researcher.md +11 -30
  80. package/dist/host/claude/agents/reviewer.md +11 -95
  81. package/dist/host/claude/agents/scout.md +9 -23
  82. package/dist/host/claude/agents/verifier.md +15 -33
  83. package/dist/host/claude/rules/documentation.md +8 -2
  84. package/dist/host/claude/rules/portability.md +7 -1
  85. package/dist/host/claude/rules/quality.md +36 -96
  86. package/dist/host/claude/rules/styles.md +3 -0
  87. package/dist/host/claude/rules/tests.md +6 -3
  88. package/dist/host/claude/rules/workspace.md +19 -15
  89. package/dist/host/claude/rules/writing.md +57 -108
  90. package/dist/host/claude/settings.json +5 -3
  91. package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +1 -1
  92. package/dist/host/claude/skills/{orkestrel-align-packages → orkestrel-align}/SKILL.md +2 -2
  93. package/dist/host/claude/skills/{orkestrel-build-application → orkestrel-build}/SKILL.md +2 -2
  94. package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +11 -0
  95. package/dist/host/claude/skills/orkestrel-falsify/SKILL.md +2 -1
  96. package/dist/host/claude/skills/{orkestrel-harden-package → orkestrel-harden}/SKILL.md +2 -2
  97. package/dist/host/claude/skills/{orkestrel-prove-journey → orkestrel-journey}/SKILL.md +2 -2
  98. package/dist/host/claude/skills/orkestrel-polish/SKILL.md +12 -0
  99. package/dist/host/claude/skills/orkestrel-scout/SKILL.md +11 -0
  100. package/dist/host/codex/agents/analyst.toml +14 -31
  101. package/dist/host/codex/agents/astra.toml +25 -0
  102. package/dist/host/codex/agents/builder.toml +13 -20
  103. package/dist/host/codex/agents/checker.toml +13 -27
  104. package/dist/host/codex/agents/distiller.toml +9 -22
  105. package/dist/host/codex/agents/grok.toml +11 -30
  106. package/dist/host/codex/agents/opus.toml +14 -22
  107. package/dist/host/codex/agents/orkestrel.toml +1 -1
  108. package/dist/host/codex/agents/planner.toml +11 -28
  109. package/dist/host/codex/agents/researcher.toml +10 -22
  110. package/dist/host/codex/agents/reviewer.toml +11 -27
  111. package/dist/host/codex/agents/scout.toml +11 -17
  112. package/dist/host/codex/agents/verifier.toml +16 -12
  113. package/dist/host/codex/config.toml +18 -21
  114. package/dist/host/cursor/mcp.json +0 -4
  115. package/dist/host/cursor/rules/orchestration.mdc +12 -20
  116. package/dist/host/dotfiles/mcp.json +0 -4
  117. package/dist/host/dotfiles/oxlintrc.json +7 -0
  118. package/dist/host/guides/probe.md +9 -9
  119. package/dist/host/guides/scaffold.md +117 -71
  120. package/dist/host/guides/test.md +1 -1
  121. package/dist/host/manifest.json +321 -184
  122. package/dist/host/scripts/codex.sh +0 -0
  123. package/dist/host/scripts/cursor.sh +0 -0
  124. package/dist/host/scripts/deps.sh +0 -0
  125. package/dist/host/scripts/ollama.sh +0 -0
  126. package/dist/host/tests/config.test.ts +68 -46
  127. package/dist/host/tests/policy.test.ts +1 -5
  128. package/dist/host/tests/setupPolicy.ts +179 -4
  129. package/dist/src/core/index.cjs +255 -84
  130. package/dist/src/core/index.cjs.map +1 -1
  131. package/dist/src/core/index.d.cts +94 -29
  132. package/dist/src/core/index.d.ts +94 -29
  133. package/dist/src/core/index.js +253 -85
  134. package/dist/src/core/index.js.map +1 -1
  135. package/dist/src/server/index.cjs +55 -9
  136. package/dist/src/server/index.cjs.map +1 -1
  137. package/dist/src/server/index.d.cts +29 -4
  138. package/dist/src/server/index.d.ts +29 -4
  139. package/dist/src/server/index.js +56 -11
  140. package/dist/src/server/index.js.map +1 -1
  141. package/package.json +15 -11
  142. package/dist/host/CLAUDE.md +0 -61
  143. package/dist/host/agents/skills/orkestrel-prove-journey/agents/openai.yaml +0 -4
  144. package/dist/host/agents/transports/claude.md +0 -49
  145. package/dist/host/claude/agents/application.md +0 -36
  146. package/dist/host/claude/agents/sol.md +0 -61
  147. package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +0 -12
  148. package/dist/host/codex/agents/application.toml +0 -25
  149. package/dist/host/codex/agents/sol.toml +0 -19
  150. /package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/references/integration.md +0 -0
  151. /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/centralization.md +0 -0
  152. /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/contract.md +0 -0
  153. /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/research.md +0 -0
  154. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/decide.md +0 -0
  155. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/layer.md +0 -0
  156. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/statechart.md +0 -0
  157. /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/styles.md +0 -0
@@ -18,9 +18,11 @@ the verbs write and compare.
18
18
  `CANON_PATHS` names the instruction canon — the coding and orchestration contracts, the rules, the
19
19
  skills, the templates, the transport contracts, the agent roles, the bench configuration, and the
20
20
  MCP registrations — which stays in one place and is published for reading. A target carries the
21
- `AGENTS.md` and `CLAUDE.md` pointers that name where a reader finds it, and the catalog agent file
22
- the `catalog` verb rewrites. It carries nothing else at a canon path: a file found at one is a
23
- superseded copy, and `overwrite` deletes it.
21
+ `AGENTS.md` pointer that names where a reader finds it, the catalog agent file the `catalog` verb
22
+ rewrites, and the skill pointer set for each package-facing skill `TARGET_SKILL_NAMES` lists: the
23
+ Claude bridge, the Codex sidecar, and a `SKILL.md` pointer that names the canonical skill. It
24
+ carries nothing else at a canon path: a file found at one is a superseded copy, and `overwrite`
25
+ deletes it.
24
26
  `REFERENCE_PATHS` names the `guides` directory — a mirror of every published `@orkestrel` guide
25
27
  beside this package's own — which is staged for reading at `dist/host/guides/` and claims nothing in
26
28
  a target on its own. The `SEED_GUIDE_PATHS` constant names the mirrors the compiler claims, so
@@ -169,9 +171,11 @@ Exported from `@orkestrel/scaffold`, and reachable from
169
171
  | `SERVICE_TEST_INCLUDE` | const | Names the include the live-service project covers, which is a directory rather than one proof. |
170
172
  | `SHOWCASE_CONFIG_PATH` | const | Names the Vite wrapper whose presence makes a workspace `showcase`. |
171
173
  | `SHOWCASE_DEV_DEPENDENCIES` | const | Names the development dependency used only by the optional single-file showcase build. |
174
+ | `SKILLS_CONFIG_PATH` | const | Names the TypeScript wrapper whose presence makes a workspace `skills`. |
172
175
  | `SOURCE_BROWSER_DEV_DEPENDENCIES` | const | Lists the development dependencies a published browser `src` environment adds. |
173
176
  | `SRC_MATRIX` | const | Holds the build and export settings each published `src` environment contributes, frozen. |
174
177
  | `TAB_WIDTH` | const | Sets the columns one tab occupies when the formatter measures a line, matching `tabWidth`. |
178
+ | `TARGET_SKILL_NAMES` | const | Lists the package-facing skills a target receives pointers for, frozen and alphabetical. |
175
179
  | `VERSION_PATTERN` | const | Matches the exact `major.minor.patch` version syntax a blueprint declares. |
176
180
  | `WORKSPACE_DEV_ENGINES` | const | Holds the `devEngines` record every generated manifest carries. |
177
181
  | `WORKSPACE_OWNED_PATHS` | const | Lists the vendored paths whose present bytes belong to each workspace, frozen. |
@@ -243,6 +247,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
243
247
  | `matchesRange` | function | Tests whether a declared range already admits a published version. |
244
248
  | `nameToGuide` | function | Derives the guide mirror path a package name answers for. |
245
249
  | `planToSummary` | function | Projects a plan into its tally by artifact origin. |
250
+ | `renderSkillPointer` | function | Renders the `SKILL.md` pointer a target carries in place of a canonical skill. |
246
251
  | `selectGroups` | function | Selects the groups a compile covers, in plan order. |
247
252
  | `selectHostPaths` | function | Selects the host paths a named workspace vendors. |
248
253
  | `serializeTypeScriptString` | function | Serializes one string as a single-quoted TypeScript literal. |
@@ -399,6 +404,7 @@ The inventory contracts carry these data members.
399
404
  | `computeDigest` | function | Computes the SHA-256 digest of text. |
400
405
  | `computeFileDigest` | function | Computes the SHA-256 digest of one file's exact bytes. |
401
406
  | `computeManifestDigest` | function | Computes the digest of a vendored host's declared membership. |
407
+ | `decodeHexText` | function | Decodes exact bytes stated in hexadecimal as strict UTF-8 text. |
402
408
  | `filesToHost` | function | Assembles a whole vendored host from live files and the installed floor. |
403
409
  | `hexToDigest` | function | Projects exact bytes stated in hexadecimal to their SHA-256 digest. |
404
410
  | `isExactCaseFile` | function | Tests whether a path is a physical file with exact on-disk casing. |
@@ -597,8 +603,9 @@ answers a read and grant no verb write authority that it did not already have.
597
603
  empty. The other structural facts do not need creation flags. Add a root `tests/setup*.test.ts` proof for
598
604
  `setup`, `tests/guides.test.ts` for `guides`, `tests/integration.test.ts` for `integration`,
599
605
  `tests/conformance.test.ts` for `conformance`, `tests/setupService.ts` for `service`,
600
- `tests/setupGlobal.ts` for `global`, `configs/app/vite.showcase.config.ts` for `showcase`, and
601
- `configs/app/vite.journey.config.ts` for `journey`;
606
+ `tests/setupGlobal.ts` for `global`, `configs/app/vite.showcase.config.ts` for `showcase`,
607
+ `configs/app/vite.journey.config.ts` for `journey`, and `configs/agents/tsconfig.skills.json` for
608
+ `skills`;
602
609
  reading verbs detect each exact-case file and register its fixed machinery. An explicitly supplied
603
610
  plan with `vendors` owns and protects the birth-owned `scripts/service.sh` inventory skeleton.
604
611
  Reading verbs do not infer its vendor list from edited text and cannot preserve an arbitrary present
@@ -611,16 +618,17 @@ Limits states what makes that one proof generable when the others are not.
611
618
  ### Reading a target
612
619
 
613
620
  `audit`, `repair`, `catalog`, and `overwrite` derive the blueprint from the target itself. The name
614
- and the declared `@orkestrel/*` packages come from `package.json`. The environment axes come
615
- from the directories the target actually ships, because a directory is the fact and a declaration
616
- beside it could disagree. The remaining facts come from exact-case files: `src/bin/main.ts` selects
617
- `bin`, each root `tests/setup*.test.ts` match selects `setup`, `tests/guides.test.ts` selects
618
- `guides`, `tests/integration.test.ts` selects `integration`, `tests/conformance.test.ts` selects
621
+ and the declared `@orkestrel/*` packages come from `package.json`. The environment axes come from
622
+ the directories the target actually ships, because a directory is the fact and a declaration beside
623
+ it could disagree. The remaining facts come from exact-case files: `src/bin/main.ts` selects `bin`,
624
+ each root `tests/setup*.test.ts` match selects `setup`, `tests/guides.test.ts` selects `guides`,
625
+ `tests/integration.test.ts` selects `integration`, `tests/conformance.test.ts` selects
619
626
  `conformance`, `tests/setupService.ts` selects `service`, `tests/setupGlobal.ts` selects `global`,
620
- `configs/app/vite.showcase.config.ts` selects `showcase`, and
621
- `configs/app/vite.journey.config.ts` selects `journey`. A containing directory does not select
622
- the fact by itself. `tests/distribution.test.ts` selects nothing: the published `src` axis the
623
- target ships already decides the `distribution` project, and the file is planned from that.
627
+ `configs/app/vite.showcase.config.ts` selects `showcase`, `configs/app/vite.journey.config.ts`
628
+ selects `journey`, and `configs/agents/tsconfig.skills.json` selects `skills`. A containing
629
+ directory does not select the fact by itself. `tests/distribution.test.ts` selects nothing: the
630
+ published `src` axis the target ships already decides the `distribution` project, and the file is
631
+ planned from that.
624
632
 
625
633
  `vendors` is not reconstructed. Its artifact, `scripts/service.sh`, is a birth-owned inventory
626
634
  skeleton rather than a working installer, so edited script text is not a trustworthy declaration of
@@ -641,6 +649,12 @@ fresh workspace therefore carries no guides project or script. When a developer
641
649
  writable script region. That region accepts the prior generated Vitest-only value and preserves a
642
650
  customized command. The rest of the manifest remains birth-owned.
643
651
 
652
+ The `skills` fact follows the same rule. The exact-case `configs/agents/tsconfig.skills.json`
653
+ wrapper selects it; the root configuration then defines and registers the `skills` project over
654
+ `tests/agents/**/*.test.ts`, and the manifest gains `test:skills` in the `test` chain and
655
+ `check:skills` in the `check` chain. The scaffold checkout carries that wrapper because it ships the
656
+ skill scripts under `.agents/skills/*/scripts/` with their mirrored proofs.
657
+
644
658
  The plan-reading verbs compare the Vitest project set named by the target manifest with the
645
659
  project set the planned root configuration registers. Every planned proof project must also be
646
660
  reachable from the manifest's `test` chain. A target whose manifest does not set `private: true` may
@@ -906,7 +920,7 @@ because the shape is chosen once and read afterwards: `new` refuses the advisory
906
920
  caller creating a workspace holds the same refusal, and the Compile section states it.
907
921
 
908
922
  `bin`, `setup`, `guides`, `integration`, `conformance`, `service`, `vendors`, `global`, `showcase`,
909
- and `journey` are structural facts. Reading verbs set each only when the workspace physically ships the directory
923
+ `journey`, and `skills` are structural facts. Reading verbs set each only when the workspace physically ships the directory
910
924
  or exact-case file that defines it, never because of the workspace's name and never because a
911
925
  sibling fact is set.
912
926
 
@@ -1065,24 +1079,26 @@ than a silent no-op.
1065
1079
  A plan selects over the following groups, and a compile that names none covers all of them. Their
1066
1080
  order is the order a plan lists its artifacts in.
1067
1081
 
1068
- | Group | Holds |
1069
- | --------------- | -------------------------------------------------------------------------- |
1070
- | `manifest` | `package.json` |
1071
- | `configs` | The root and per-target build configuration, and the root dotfiles |
1072
- | `source` | The selected environment barrels and entries |
1073
- | `tests` | The shared setup modules, the entry tests, and the policy sweep |
1074
- | `guides` | The guide index and the vendored guide mirrors |
1075
- | `docs` | `README.md` beside the `AGENTS.md` and `CLAUDE.md` pointers |
1076
- | `orchestration` | The harness permission file, the bench scripts, and the catalog agent file |
1082
+ | Group | Holds |
1083
+ | --------------- | ------------------------------------------------------------------------------------------------- |
1084
+ | `manifest` | `package.json` |
1085
+ | `configs` | The root and per-target build configuration, and the root dotfiles |
1086
+ | `source` | The selected environment barrels and entries |
1087
+ | `tests` | The shared setup modules, the entry tests, and the policy sweep |
1088
+ | `guides` | The guide index and the vendored guide mirrors |
1089
+ | `docs` | `README.md` beside the `AGENTS.md` pointer |
1090
+ | `orchestration` | The harness permission file, the bench scripts, the catalog agent file, and the skill pointer set |
1077
1091
 
1078
1092
  The plan claims paths inside the instruction canon deliberately, and each has a reason. The `docs`
1079
- group carries the `AGENTS.md` and `CLAUDE.md` pointers that name where each contract is read,
1080
- planned at those canon destinations as this package's own template content. The `orchestration`
1081
- group carries `CATALOG_AGENT_PATH`, the host-origin artifact at a canon path, because the `catalog`
1082
- verb refuses a target that lacks the file. Every other canon path is staged for reading, so no group
1083
- selection copies a contract into a target, and a copy a target holds at one of them is foreign drift
1084
- in the group `inferGroup` gives it. A scoped audit reads the canon through that same selection, so a
1085
- run excluding a group reports nothing there.
1093
+ group carries the `AGENTS.md` pointer that names where each contract is read, planned at those canon
1094
+ destinations as this package's own template content. The `orchestration` group carries
1095
+ `CATALOG_AGENT_PATH`, a host-origin artifact at a canon path, because the `catalog` verb refuses a
1096
+ target that lacks the file. It also carries the skill pointer set, three host-origin artifacts for
1097
+ each name in `TARGET_SKILL_NAMES`, so every harness in a target discovers the package-facing skills
1098
+ while their bodies, references, and scripts stay in the installed package. Every other canon path is
1099
+ staged for reading, so no group selection copies a contract into a target, and a copy a target holds
1100
+ at one of them is foreign drift in the group `inferGroup` gives it. A scoped audit reads the canon
1101
+ through that same selection, so a run excluding a group reports nothing there.
1086
1102
 
1087
1103
  ## Ownership and drift
1088
1104
 
@@ -1121,11 +1137,18 @@ turns each path scaffold owns the bytes of into a content-owned artifact, leavin
1121
1137
  workspace-owned paths and the mirror pointers the preceding rows name. What a verb claims at a
1122
1138
  vendored path is the hydrated ownership, and `HostArtifact` carries the same narrowing on the type.
1123
1139
 
1124
- The `AGENTS.md` and `CLAUDE.md` pointers sit outside that row. Their bytes come from a frozen
1125
- template rather than from the data root, so the pure core face already claims them content-owned and
1126
- hydration leaves them alone. `repair` and `overwrite` restore a missing pointer and replace a drifted
1127
- one, in every face, which is what keeps a target's resolution instructions in agreement with the
1128
- release it installed.
1140
+ The `AGENTS.md` pointer sits outside that row. Its bytes come from a frozen template rather than
1141
+ from the data root, so the pure core face already claims them content-owned and hydration leaves
1142
+ them alone. `repair` and `overwrite` restore a missing pointer and replace a drifted one, in every
1143
+ face, which is what keeps a target's resolution instructions in agreement with the release it
1144
+ installed.
1145
+
1146
+ A skill pointer takes the other route. Its `HostArtifact` sets `pointer`, so hydration reads the
1147
+ staged canonical `SKILL.md` and derives the target's bytes with `renderSkillPointer` rather than
1148
+ copying them, and the hydrated artifact is computed, content-owned text. `repair` and `overwrite`
1149
+ restore a missing pointer and replace a hand-edited one with the derived bytes. A staged canonical
1150
+ skill that does not open with a frontmatter block is a broken host, and hydration refuses it with a
1151
+ `TARGET` error naming the staged file and the pointer path.
1129
1152
 
1130
1153
  Birth ownership is what makes a generated workspace the consumer's. `materialize` writes a
1131
1154
  birth-owned path into a vacant target. A later `repair` or `overwrite` call treats that path as
@@ -1490,18 +1513,23 @@ succeed without making requests; remote hooks run setup. Claude Code Cloud conti
1490
1513
  `scripts/ollama.sh`.
1491
1514
 
1492
1515
  `CANON_PATHS` is the instruction canon, staged for reading instead: the `AGENTS.md` coding contract,
1493
- the `CLAUDE.md` harness bridge, the `.agents/orchestration.md` agent-operation contract, the rules
1494
- under `.claude/rules/` and `.cursor/rules/`, the skills under `.agents/skills/` and `.claude/skills/`,
1495
- the templates under `.agents/templates/`, the transport contracts under `.agents/transports/`, the
1496
- agent roles under `.claude/agents/` and `.codex/agents/`, the `.codex/config.toml` bench
1497
- configuration, and the `.mcp.json` and `.cursor/mcp.json` server registrations. A release stages
1498
- every one of them, and a target receives a copy only where the plan claims the path. At the
1499
- `AGENTS.md` and `CLAUDE.md` destinations it receives the pointers: different content at the same
1500
- paths, planned as this package's own template content. At `CATALOG_AGENT_PATH` it receives the staged
1501
- bytes themselves, because the `catalog` verb refuses a target that lacks the file. Everywhere else in
1502
- the canon a target holds nothing, and a reader reaches the contracts from a scaffold checkout sitting
1503
- beside the repository, or from the `node_modules/@orkestrel/scaffold/dist/host/` root inside the
1504
- installed package, which is what the `AGENTS.md` pointer scaffold plans into a target names.
1516
+ the `.claude/AGENTS.md` Claude Code bridge, the `.agents/orchestration.md` agent-operation contract,
1517
+ the rules under `.claude/rules/` and `.cursor/rules/`, the skills under `.agents/skills/` and
1518
+ `.claude/skills/`, the templates under `.agents/templates/`, the transport contracts under
1519
+ `.agents/transports/`, the agent roles under `.claude/agents/` and `.codex/agents/`, the
1520
+ `.codex/config.toml` bench configuration, and the `.mcp.json` and `.cursor/mcp.json` server
1521
+ registrations. A release stages every one of them, and a target receives a copy only where the plan
1522
+ claims the path. At the `AGENTS.md` destination it receives the pointer: different content at the
1523
+ same path, planned as this package's own template content. At `CATALOG_AGENT_PATH` it receives the
1524
+ staged bytes themselves, because the `catalog` verb refuses a target that lacks the file. For each
1525
+ name in `TARGET_SKILL_NAMES` it receives the skill pointer set: the `.claude/skills/<name>/SKILL.md`
1526
+ bridge and the `.agents/skills/<name>/agents/openai.yaml` sidecar as staged bytes, and at
1527
+ `.agents/skills/<name>/SKILL.md` a pointer that hydration derives from the staged canonical skill. A
1528
+ blueprint carrying the `skills` fact ships its own skill canon and receives no pointer set.
1529
+ Everywhere else in the canon a target holds nothing, and a reader reaches the contracts from a
1530
+ scaffold checkout sitting beside the repository, or from the
1531
+ `node_modules/@orkestrel/scaffold/dist/host/` root inside the installed package, which is what the
1532
+ `AGENTS.md` pointer scaffold plans into a target names.
1505
1533
 
1506
1534
  `REFERENCE_PATHS` is the fleet's guides, staged for reading like the canon and owned like neither
1507
1535
  of the other lists. It holds the `guides` directory, so a release stages this repository's mirror of
@@ -1561,12 +1589,12 @@ a commit is a property of the content host. Scaffold neither creates that lag no
1561
1589
  response as fresher than the host served it.
1562
1590
 
1563
1591
  A canon destination costs no request. The fetch list drops every canon destination and `filesToHost`
1564
- keeps the installed floor bytes for each one, claimed or not. The rule covers the destinations a plan
1565
- does claim as well: the `AGENTS.md` and `CLAUDE.md` pointers are written from this package's own
1566
- templates, and the catalog agent file is claimed by presence, so no byte a target holds is taken from
1567
- a fetched canon path. A fill carrying no row for a canon path is complete rather than spoiled, which
1568
- is what lets one `Host` carry live bytes beside floor bytes without mixing baselines within a
1569
- surface.
1592
+ keeps the installed floor bytes for each one, claimed or not. The rule covers the destinations a
1593
+ plan does claim as well: the `AGENTS.md` pointer is written from this package's own templates, the
1594
+ catalog agent file is claimed by presence, and the skill pointer set reads the installed floor
1595
+ bytes, so no byte a target holds is taken from a fetched canon path. A fill carrying no row for a
1596
+ canon path is complete rather than spoiled, which is what lets one `Host` carry live bytes beside
1597
+ floor bytes without mixing baselines within a surface.
1570
1598
 
1571
1599
  `.claude/settings.json` is in that set, and the artifact planned for it is content-owned. `repair`
1572
1600
  and `overwrite` restore its bytes, so an edit made to it inside a target is reverted at the next
@@ -1700,14 +1728,23 @@ except the manifest.
1700
1728
  `configs/browsers.ts` resolution, serves the bundle over a loopback server, and drives it in
1701
1729
  Playwright Chromium.
1702
1730
  - One template artifact each for `README.md` and `guides/README.md`.
1703
- - One template artifact each for `AGENTS.md` and `CLAUDE.md`. They are pointers rather than contracts:
1704
- `AGENTS.md` names the coding contract, the orchestration contract, the rules, and the skills, and
1705
- resolves each against a sibling scaffold checkout or the installed package; `CLAUDE.md` names the
1706
- `AGENTS.md` file beside it and imports nothing, because an `@path` import inlines the imported file
1707
- into every context that loads it. Scaffold owns their bytes, so a release that moves the wording
1708
- moves every target's copy at its next `repair`.
1731
+ - One template artifact for `AGENTS.md`. It is a pointer rather than a contract:
1732
+ `AGENTS.md` names the coding contract, the orchestration contract, the rules, the skills, and the
1733
+ `.claude/AGENTS.md` Claude Code bridge, and resolves each against a sibling scaffold checkout or
1734
+ the installed package. It imports nothing, because an `@path` import inlines the imported file
1735
+ into every context that loads it. No `CLAUDE.md` is planned: Claude Code reads `AGENTS.md`
1736
+ directly, and a `CLAUDE.md` beside it stops that reading, so the path stays canon with no
1737
+ claimant, a copy a target still holds reports `foreign`, and `overwrite` deletes it. Scaffold
1738
+ owns the pointer's bytes, so a release that moves the wording moves every target's copy at its
1739
+ next `repair`.
1709
1740
  - One host artifact per vendored path the workspace selects. A vendored directory is one planned
1710
1741
  path that expands into the files the data root stores beneath it.
1742
+ - Three host artifacts for each name in `TARGET_SKILL_NAMES`, unless the blueprint carries the
1743
+ `skills` fact: the Claude bridge and the Codex sidecar as copies of the staged bytes, and the
1744
+ `SKILL.md` pointer, which carries the canonical frontmatter over a body that names the canonical
1745
+ skill and how to run its scripts from the installed package. A script runs from its built `.js`
1746
+ twin under `node_modules/@orkestrel/scaffold/dist/agents/skills/<skill>/scripts/`, because Node
1747
+ refuses to strip types for a file under `node_modules`.
1711
1748
 
1712
1749
  Every generated manifest declares the toolchain it is gated on. The `engines.node` field carries
1713
1750
  the blueprint's `engines` value, which defaults to the `>=22.18.0` range. The
@@ -1925,17 +1962,22 @@ tree carrying no uncommitted work. An untracked copy is left standing, and a git
1925
1962
  outside the dirty reading as well, so a target can carry its own file at a canon path through every
1926
1963
  visit. The audit reads canon membership by path, so such a copy stays a `foreign` finding and that
1927
1964
  target exits `1` on every run. `repair` never closes it either: that verb writes the planned paths a
1928
- target is missing or has let drift and deletes nothing, so it restores the `AGENTS.md` and
1929
- `CLAUDE.md` pointers and leaves every other copy where it is. A maintainer who wants a local MCP
1930
- server registration keeps it outside the repository, in the harness's own local or user scope, rather
1931
- than at `.mcp.json`, where the file is drift whoever wrote it.
1932
-
1933
- **A target holds no dispatchable role beyond the catalog agent.** The canon is staged for reading, so
1934
- a target receives the `AGENTS.md` and `CLAUDE.md` pointers and `.claude/agents/orkestrel.md`, and
1935
- nothing else a harness reads: no other agent role, no bench configuration, and no MCP registration. A
1936
- harness running in a target loads none of those from `node_modules` either, so a role, a bench, or a
1937
- server that target needs is defined in the harness's own local or user scope — the seam the preceding
1938
- registration entry already names. Fleet targets are not orchestration hosts. A session that
1965
+ target is missing or has let drift and deletes nothing, so it restores the `AGENTS.md` pointer and
1966
+ the skill pointer set and leaves every other copy where it is; a `CLAUDE.md` a target still holds is
1967
+ a `foreign` finding the same way, and `overwrite` deletes it. A maintainer who wants a local MCP
1968
+ server registration keeps it outside the repository, in the harness's own local or user scope,
1969
+ rather than at `.mcp.json`, where the file is drift whoever wrote it.
1970
+
1971
+ **A target holds no dispatchable role beyond the catalog agent.** The canon is staged for reading,
1972
+ so a target receives the `AGENTS.md` pointer, `.claude/agents/orkestrel.md`, and the skill pointer
1973
+ set for each package-facing skill `TARGET_SKILL_NAMES` lists: the Claude bridge, the Codex sidecar,
1974
+ and a pointer that names the canonical skill, all content-owned and restored by `repair`. It
1975
+ receives no other agent role, no bench configuration, and no MCP registration. A harness running in
1976
+ a target loads none of those from `node_modules` either, so a role, a bench, or a server that target
1977
+ needs is defined in the harness's own local or user scope — the seam the preceding registration
1978
+ entry already names. Fleet targets are not orchestration hosts: `TARGET_SKILL_NAMES` leaves out the
1979
+ dispatch, publish, scout, and align skills, which run from a scaffold checkout, and a blueprint
1980
+ carrying the `skills` fact ships its own skill canon and receives no pointer set. A session that
1939
1981
  dispatches roles starts on scaffold, where `.agents/orchestration.md` and the role files sit, and
1940
1982
  attaches the target it is working on.
1941
1983
 
@@ -2115,6 +2157,10 @@ you for asking for the generated proof back.
2115
2157
  The generated distribution proof takes its release contract from the outside. The generated
2116
2158
  `prepublishOnly` invokes it as `npm run test:distribution -- --mode release`, and the proof reads
2117
2159
  `import.meta.env.MODE === 'release'` and **fails** on an unreachable registry rather than skipping.
2160
+ The project factories the root configuration registers receive the invocation record, and each of
2161
+ their projects runs in the invocation's mode. Vitest runs a project whose factory returns no mode in
2162
+ Vitest's own `test` mode, where the proof skips. A journey project is such a project: its
2163
+ birth-owned wrapper drops the record, so it runs in `test` whatever mode the run names.
2118
2164
  An ordinary local run skips that case, because a developer offline is not a defect; a release run
2119
2165
  does not, because skipping there passes the publish gate without ever proving the artifact installs.
2120
2166
  A workspace that replaces the generated proof takes that contract with it: presence ownership leaves
@@ -1480,7 +1480,7 @@ packages wrote is still refused when it is one suite's policy, a redeclaration o
1480
1480
  `@orkestrel` package already publishes, or a race; a shape few packages wrote still ships when the
1481
1481
  mechanism is a contract every consumer has to implement identically.
1482
1482
 
1483
- The journey layer in `src/browser` is that second case. It is what `orkestrel-prove-journey`
1483
+ The journey layer in `src/browser` is that second case. It is what `orkestrel-journey`
1484
1484
  requires every browser workspace to implement, and a workspace writing its own copy of it writes a
1485
1485
  slightly different resolver, a slightly different set of failure voices, and a journey that reads as
1486
1486
  if it proved something it did not. Publishing it once is what keeps those implementations identical.