@orkestrel/scaffold 0.0.77 → 0.0.79
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.
- package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +204 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +102 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +95 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +207 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +108 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +114 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +108 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +156 -0
- package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +196 -0
- package/dist/agents/skills/orkestrel-publish/scripts/compare.js +206 -0
- package/dist/agents/skills/orkestrel-publish/scripts/pins.js +93 -0
- package/dist/agents/skills/orkestrel-publish/scripts/wave.js +458 -0
- package/dist/agents/skills/orkestrel-publish/scripts/window.js +188 -0
- package/dist/agents/skills/orkestrel-scout/scripts/map.js +300 -0
- package/dist/agents/templates/brief.md +55 -0
- package/dist/bin/main.js +58 -6
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +77 -135
- package/dist/host/agents/orchestration.md +147 -998
- package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +2 -2
- package/dist/host/agents/skills/enterprise-bootstrap/references/inspection.md +1 -1
- package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/SKILL.md +6 -13
- package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/agents/openai.yaml +1 -1
- package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/references/fleet.md +5 -7
- package/dist/host/agents/skills/{orkestrel-build-application → orkestrel-build}/SKILL.md +11 -22
- package/dist/host/agents/skills/{orkestrel-build-application → orkestrel-build}/agents/openai.yaml +1 -1
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +8 -16
- package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +3 -3
- package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +13 -13
- package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +61 -0
- package/dist/host/agents/skills/orkestrel-dispatch/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +25 -0
- package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +32 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +259 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +110 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +115 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +239 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +124 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +123 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +129 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +157 -0
- package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +42 -193
- package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +38 -108
- package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +35 -134
- package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/SKILL.md +10 -14
- package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/agents/openai.yaml +1 -1
- package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/hardening.md +3 -4
- package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +228 -0
- package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/SKILL.md +15 -23
- package/dist/host/agents/skills/orkestrel-journey/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/captures.md +1 -1
- package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/SKILL.md +25 -33
- package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/agents/openai.yaml +1 -1
- package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/references/capture-harness.md +3 -3
- package/dist/host/agents/skills/orkestrel-publish/SKILL.md +33 -20
- package/dist/host/agents/skills/orkestrel-publish/references/release.md +39 -0
- package/dist/host/agents/skills/orkestrel-publish/references/wave.md +22 -21
- package/dist/host/agents/skills/orkestrel-publish/references/window.md +27 -14
- package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +220 -0
- package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +114 -0
- package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +629 -0
- package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +242 -0
- package/dist/host/agents/skills/orkestrel-scout/SKILL.md +28 -0
- package/dist/host/agents/skills/orkestrel-scout/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +352 -0
- package/dist/host/agents/templates/brief.md +21 -142
- package/dist/host/agents/transports/claude-cli.md +21 -0
- package/dist/host/agents/transports/codex.md +38 -159
- package/dist/host/agents/transports/cursor.md +16 -65
- package/dist/host/claude/AGENTS.md +38 -0
- package/dist/host/claude/agents/analyst.md +14 -53
- package/dist/host/claude/agents/astra.md +26 -0
- package/dist/host/claude/agents/builder.md +14 -30
- package/dist/host/claude/agents/checker.md +13 -57
- package/dist/host/claude/agents/distiller.md +11 -26
- package/dist/host/claude/agents/grok.md +12 -35
- package/dist/host/claude/agents/opus.md +14 -30
- package/dist/host/claude/agents/orkestrel.md +4 -4
- package/dist/host/claude/agents/planner.md +10 -44
- package/dist/host/claude/agents/researcher.md +11 -30
- package/dist/host/claude/agents/reviewer.md +11 -95
- package/dist/host/claude/agents/scout.md +9 -23
- package/dist/host/claude/agents/verifier.md +15 -33
- package/dist/host/claude/rules/documentation.md +8 -2
- package/dist/host/claude/rules/portability.md +7 -1
- package/dist/host/claude/rules/quality.md +36 -96
- package/dist/host/claude/rules/styles.md +3 -0
- package/dist/host/claude/rules/tests.md +6 -3
- package/dist/host/claude/rules/workspace.md +21 -15
- package/dist/host/claude/rules/writing.md +57 -108
- package/dist/host/claude/settings.json +5 -3
- package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +1 -1
- package/dist/host/claude/skills/{orkestrel-align-packages → orkestrel-align}/SKILL.md +2 -2
- package/dist/host/claude/skills/{orkestrel-build-application → orkestrel-build}/SKILL.md +2 -2
- package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +11 -0
- package/dist/host/claude/skills/orkestrel-falsify/SKILL.md +2 -1
- package/dist/host/claude/skills/{orkestrel-harden-package → orkestrel-harden}/SKILL.md +2 -2
- package/dist/host/claude/skills/{orkestrel-prove-journey → orkestrel-journey}/SKILL.md +2 -2
- package/dist/host/claude/skills/orkestrel-polish/SKILL.md +12 -0
- package/dist/host/claude/skills/orkestrel-scout/SKILL.md +11 -0
- package/dist/host/codex/agents/analyst.toml +14 -31
- package/dist/host/codex/agents/astra.toml +25 -0
- package/dist/host/codex/agents/builder.toml +13 -20
- package/dist/host/codex/agents/checker.toml +13 -27
- package/dist/host/codex/agents/distiller.toml +9 -22
- package/dist/host/codex/agents/grok.toml +11 -30
- package/dist/host/codex/agents/opus.toml +14 -22
- package/dist/host/codex/agents/orkestrel.toml +1 -1
- package/dist/host/codex/agents/planner.toml +11 -28
- package/dist/host/codex/agents/researcher.toml +10 -22
- package/dist/host/codex/agents/reviewer.toml +11 -27
- package/dist/host/codex/agents/scout.toml +11 -17
- package/dist/host/codex/agents/verifier.toml +16 -12
- package/dist/host/codex/config.toml +18 -21
- package/dist/host/cursor/mcp.json +0 -4
- package/dist/host/cursor/rules/orchestration.mdc +12 -20
- package/dist/host/dotfiles/mcp.json +0 -4
- package/dist/host/dotfiles/oxlintrc.json +7 -0
- package/dist/host/guides/probe.md +18 -14
- package/dist/host/guides/scaffold.md +147 -83
- package/dist/host/guides/test.md +442 -148
- package/dist/host/manifest.json +322 -185
- package/dist/host/scripts/codex.sh +0 -0
- package/dist/host/scripts/cursor.sh +0 -0
- package/dist/host/scripts/deps.sh +0 -0
- package/dist/host/scripts/ollama.sh +0 -0
- package/dist/host/tests/config.test.ts +86 -55
- package/dist/host/tests/policy.test.ts +1 -5
- package/dist/host/tests/setupPolicy.ts +179 -4
- package/dist/src/core/index.cjs +264 -89
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +95 -30
- package/dist/src/core/index.d.ts +95 -30
- package/dist/src/core/index.js +262 -90
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +55 -9
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +29 -4
- package/dist/src/server/index.d.ts +29 -4
- package/dist/src/server/index.js +56 -11
- package/dist/src/server/index.js.map +1 -1
- package/package.json +16 -12
- package/dist/host/CLAUDE.md +0 -61
- package/dist/host/agents/skills/orkestrel-prove-journey/agents/openai.yaml +0 -4
- package/dist/host/agents/transports/claude.md +0 -49
- package/dist/host/claude/agents/application.md +0 -36
- package/dist/host/claude/agents/sol.md +0 -61
- package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +0 -12
- package/dist/host/codex/agents/application.toml +0 -25
- package/dist/host/codex/agents/sol.toml +0 -19
- /package/dist/host/agents/skills/{orkestrel-align-packages → orkestrel-align}/references/integration.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/centralization.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/contract.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-harden-package → orkestrel-harden}/references/research.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/decide.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/layer.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/statechart.md +0 -0
- /package/dist/host/agents/skills/{orkestrel-prove-journey → orkestrel-journey}/references/styles.md +0 -0
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: orkestrel-polish
|
|
3
|
-
description: Drive a rendered or externally driven surface to shipped quality through capture-evidence verdict
|
|
2
|
+
name: orkestrel-polish
|
|
3
|
+
description: Drive a rendered or externally driven surface to shipped quality through one capture-evidence verdict round and its fix units. Use when asked to polish an interface, bring a rendered surface to enterprise grade, judge what actually renders rather than what the source claims, or reconcile design, state-truth, and inventory findings into fix units on captured proof. Run a verdict alone for a narrow request; run the round with its fix units for a polish or production-readiness request.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Polish a rendered surface
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Read
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
laws bind every fix unit; this skill adds only the campaign.
|
|
15
|
-
3. [capture-harness.md](references/capture-harness.md) before building, eyeballing, or
|
|
16
|
-
trusting a portfolio.
|
|
17
|
-
4. `guides/README.md`, the governing guide for the surface, and `ROADMAP.md` when present.
|
|
18
|
-
5. The authoritative `*/types.ts` for the surface, its components and partials, and the
|
|
19
|
-
shipped resolved cascade of every stylesheet the surface actually loads.
|
|
20
|
-
|
|
21
|
-
Treat the current user instruction as authoritative. Treat repository rules as the coding
|
|
22
|
-
contract and this skill as the workflow. Preserve dirty and user-owned work.
|
|
10
|
+
`AGENTS.md` § Authority and loading names the files every unit reads. This skill adds
|
|
11
|
+
[capture-harness.md](references/capture-harness.md) before building, eyeballing, or trusting a
|
|
12
|
+
portfolio, the authoritative `*/types.ts` for the surface, its components and partials, and the
|
|
13
|
+
shipped resolved cascade of every stylesheet the surface loads. Preserve dirty and user-owned work.
|
|
23
14
|
|
|
24
15
|
## Judge the rendering, not the source
|
|
25
16
|
|
|
@@ -41,14 +32,14 @@ supposed to produce it. Source-reading review passes a component that renders no
|
|
|
41
32
|
Choose the smallest scope that satisfies the request:
|
|
42
33
|
|
|
43
34
|
- **Verdict:** one portfolio, one lane, no fixes.
|
|
44
|
-
- **Round:** portfolio → independent verdicts → reconciliation → fix units →
|
|
45
|
-
|
|
46
|
-
- **Campaign:** rounds repeated until one terminal converged line, then independent gates.
|
|
35
|
+
- **Round:** portfolio → independent verdicts → reconciliation → fix units → recapture → one
|
|
36
|
+
re-verdict on the repaired items → independent gates.
|
|
47
37
|
|
|
48
38
|
A narrow verdict request does not authorize fixes. A polish request authorizes fixing every
|
|
49
|
-
confirmed finding in scope and rebuilding the harness gaps the verdicts expose.
|
|
39
|
+
confirmed finding in scope and rebuilding the harness gaps the verdicts expose. A second round
|
|
40
|
+
over the same surface needs an instruction from the user.
|
|
50
41
|
|
|
51
|
-
## Execute the
|
|
42
|
+
## Execute the round
|
|
52
43
|
|
|
53
44
|
1. **Build the portfolio.** Produce the full evidence set with the harness reference, then
|
|
54
45
|
eyeball every artifact yourself before spending a verdict round on it. An unexamined
|
|
@@ -60,9 +51,10 @@ confirmed finding in scope and rebuilding the harness gaps the verdicts expose.
|
|
|
60
51
|
§ "Return the fixed verdict shape" fixes. The
|
|
61
52
|
lanes are subjective design fit; objective state truth; and mechanical inventory of
|
|
62
53
|
copy, classes, icons, and accessibility attributes. This is the surface variant of the
|
|
63
|
-
|
|
64
|
-
subagent with a clean context,
|
|
65
|
-
|
|
54
|
+
review in `.agents/orchestration.md` § Size gate, so its rules bind: each lane is a fresh
|
|
55
|
+
subagent with a clean context, blind to the others until reconciliation, run once, and no
|
|
56
|
+
lane is dropped because an engine is dark. A narrow verdict request runs the selected lane once
|
|
57
|
+
and stops.
|
|
66
58
|
4. **Reconcile.** Confirmed findings get carriers; refuted findings die on the record with
|
|
67
59
|
the evidence that killed them; conflicts get a dated ruling. Then walk the reconciled
|
|
68
60
|
list once and name the fix-brief item carrying each finding — a finding with no carrier
|
|
@@ -71,14 +63,14 @@ confirmed finding in scope and rebuilding the harness gaps the verdicts expose.
|
|
|
71
63
|
truth the subjective lane reads. Each unit records the failing proof before the
|
|
72
64
|
repair — the exact command and its red count — and the same command's green count
|
|
73
65
|
after. Commit each accepted unit before dispatching the next.
|
|
74
|
-
6. **
|
|
75
|
-
|
|
76
|
-
7. **Recapture,** repairing every harness gap the verdicts exposed
|
|
77
|
-
|
|
78
|
-
8. **
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
66
|
+
6. **Defer each fix unit's review to the re-verdict.** No separate cross-audit runs; a fix that
|
|
67
|
+
adopted the verdict's prescription verbatim closes with the recapture alone.
|
|
68
|
+
7. **Recapture,** repairing every harness gap the verdicts exposed. The re-verdict reads the
|
|
69
|
+
recaptured portfolio, never the old one.
|
|
70
|
+
8. **Re-verdict the repaired items once.** Point the lanes at the recaptured portfolio and only at
|
|
71
|
+
the items the fix units repaired, plus regressions of an item already in the inventory. A
|
|
72
|
+
fresh preference about an item already converged is recorded for the user, not made this
|
|
73
|
+
round's blocker. An item still open after the re-verdict is reported open; the round ends.
|
|
82
74
|
9. **Verify independently.** An independent runner executes the repository-prescribed
|
|
83
75
|
gates; a fixer's own report never establishes green.
|
|
84
76
|
|
|
@@ -115,7 +107,7 @@ line, or a green claim from the engine that wrote the code. Completion requires:
|
|
|
115
107
|
- every confirmed finding fixed or explicitly ruled out of scope on the record;
|
|
116
108
|
- a final portfolio whose captures show the accepted state;
|
|
117
109
|
- red-then-green evidence for every defect unit;
|
|
118
|
-
- every
|
|
110
|
+
- every repaired item converged in the re-verdict against that final portfolio, and every open item named;
|
|
119
111
|
- independent gate evidence.
|
|
120
112
|
|
|
121
113
|
Report what changed, which capture proves each change, the exact test and gate results, and
|
package/dist/host/agents/skills/{orkestrel-polish-surface → orkestrel-polish}/agents/openai.yaml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: 'Polish Rendered Surface'
|
|
3
3
|
short_description: 'Drive a rendered surface to shipped quality on captured evidence'
|
|
4
|
-
default_prompt: 'Use $orkestrel-polish
|
|
4
|
+
default_prompt: 'Use $orkestrel-polish to bring this rendered surface to shipped quality on captured evidence.'
|
|
@@ -6,7 +6,7 @@ project can host — a served page, a foreign client, a process the runner canno
|
|
|
6
6
|
Choose one source per surface, and never judge a round against a portfolio that is part
|
|
7
7
|
journey-generated and part spawned.
|
|
8
8
|
|
|
9
|
-
- Read the `orkestrel-
|
|
9
|
+
- Read the `orkestrel-journey` skill for how the journey run generates a portfolio. This file
|
|
10
10
|
adds only what the review requires of a portfolio and how a spawned harness produces one.
|
|
11
11
|
- Own the spawned harness as the campaign owner. Never let a verdict lane write or edit it.
|
|
12
12
|
- Treat the spawned harness as a throwaway instrument: written for this surface, rebuilt or deleted
|
|
@@ -31,7 +31,7 @@ Apply this section to a spawned harness only.
|
|
|
31
31
|
## Validate the seed before capturing
|
|
32
32
|
|
|
33
33
|
Apply this section to a spawned harness only. In the journey run the acceptance journey is the seed,
|
|
34
|
-
and `orkestrel-
|
|
34
|
+
and `orkestrel-journey` fixes how it enters and what it may reach past.
|
|
35
35
|
|
|
36
36
|
- Build seed payloads from the surface's own published contract, never from memory of it; a
|
|
37
37
|
near-miss field name renders an empty screen that reads as a product defect.
|
|
@@ -60,7 +60,7 @@ itself.
|
|
|
60
60
|
row only where the surface declares none.
|
|
61
61
|
- Read the journey run's per-variant written artifact for the accessibility snapshot and the logs,
|
|
62
62
|
and cite the statechart harness by its deep link where a lane must watch the widget move rather
|
|
63
|
-
than read a still of it. `orkestrel-
|
|
63
|
+
than read a still of it. `orkestrel-journey` fixes what each holds and what each is named
|
|
64
64
|
for.
|
|
65
65
|
- Shoot the whole surface before selecting or focusing anything inside it. A capture taken after a
|
|
66
66
|
selection reports a duplicate or highlighted artifact that does not exist.
|
|
@@ -5,26 +5,34 @@ description: Run an Orkestrel release from layer order to registry confirmation.
|
|
|
5
5
|
|
|
6
6
|
# Publish an Orkestrel release
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Read
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
`AGENTS.md` § Authority and loading names the files every unit reads. This skill adds, in this order:
|
|
11
11
|
|
|
12
|
-
1. `
|
|
13
|
-
|
|
14
|
-
executor, § Writing concurrency, and § Dispatch anatomy. Each named section binds every step
|
|
12
|
+
1. `references/release.md`, the `orkestrel-dispatch` skill and the launch reference it names, and `.agents/orchestration.md` § Routing,
|
|
13
|
+
§ Parallelism, and § Dispatch. Each named section binds every step
|
|
15
14
|
here.
|
|
16
|
-
|
|
15
|
+
2. The reference the moment needs: [wave.md](references/wave.md) before visiting a repository,
|
|
17
16
|
ruling on a bump, or preparing a layer; [window.md](references/window.md) before running
|
|
18
17
|
`npm login` or any upload.
|
|
19
|
-
|
|
18
|
+
3. The live evidence: the registry's packument for every package in the round, each target's
|
|
20
19
|
manifest, and the catalog table the contract names as the layer order.
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
## Scripts
|
|
22
|
+
|
|
23
|
+
| Script | Does |
|
|
24
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
25
|
+
| `scripts/compare.ts` | `[--package NAME] [--version V] [--tarball PATH] [--dist dist] [--json]`, run from the package root after its build: fetches the published tarball and lists the material differences from the rebuilt `dist/` (sourcemaps excluded, whitespace-only differences ignored). Exit 0 when nothing differs, 3 when something does, 2 when the tarball cannot be read, 64 on usage (no package name, no `dist/`, or `--tarball` with no path). |
|
|
26
|
+
| `scripts/pins.ts` | `--version PRIOR [--range PRIOR_RANGE ...] [--paths src,tests] [--json]`, run from the package root: lists every line under the paths carrying the prior version literal or a prior range literal, once per line, sweeping a one-comparator range such as `^8.3.0` for its bare version in any form. Exit 0 with no hits, 3 with hits, 64 on usage (no literal, or a flag with no value). |
|
|
27
|
+
| `scripts/wave.ts` | `--visit [--target DIR] [--offline] [--from STEP] [--to STEP] [--prior VERSION] [--dry-run] [--json] [--out FILE]` runs one repository's visit in the order [wave.md](references/wave.md) § Visit a repository fixes (pin, commit, overwrite, verify, install, pins, format, gates, compare), stops at the first failing step, and prints each step's exit, the bump ruling (the rebuilt dist against the published tarball, and the final runtime dependency set against the published manifest), and a row for `.orkestrel/release.md`; `--prior` names the version a pre-ruled bump replaced so the self-pin sweep finds it; `--plan` prints the packages by layer from the catalog table. Exit 0 when every step passed, 1 when one failed, 2 when a reading failed, 64 on usage. |
|
|
28
|
+
| `scripts/window.ts` | `--whoami [--wait SECONDS]` reads or polls `npm whoami`; `--login` prints the operator's login command and polls `whoami` until it answers; `--publish DIR... --otp CODE` uploads back to back with `npm publish --ignore-scripts --otp`, journals each upload under `tmp/units/`, stops at the first refusal naming where to resume, and confirms each accepted version against the registry; `--confirm NAME@VERSION...` re-reads the registry until it serves the version. Exit 0 on success, 3 when not. |
|
|
29
|
+
|
|
30
|
+
The user's current instruction wins. `references/release.md` owns the credential
|
|
23
31
|
and authorization law; nothing here weakens it.
|
|
24
32
|
|
|
25
33
|
## The boundary with the contract
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
`references/release.md` binds every release, and this skill does not
|
|
28
36
|
repeat it. Read that section for the credential and approval law, the long-running-command
|
|
29
37
|
binding, the serialization of uploads, the tarball swap that serves a consumer whose dependency
|
|
30
38
|
has not published, what a bump obliges downstream, and where the layer order comes from.
|
|
@@ -37,20 +45,25 @@ following the skill.
|
|
|
37
45
|
|
|
38
46
|
## Run the release
|
|
39
47
|
|
|
40
|
-
1. **Name the round.** List the packages the release covers, and group them into layers
|
|
41
|
-
contract's
|
|
48
|
+
1. **Name the round.** List the packages the release covers, and group them into layers with
|
|
49
|
+
`node .agents/skills/orkestrel-publish/scripts/wave.ts --plan`, which reads the contract's
|
|
50
|
+
layer order from the catalog table.
|
|
42
51
|
2. **Take the registry evidence.** Read what the registry serves for every package in the round.
|
|
43
52
|
Derive each pin from that reading, never from a local manifest.
|
|
44
|
-
3. **Visit each repository.** Run
|
|
45
|
-
in
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
3. **Visit each repository.** Run `node .agents/skills/orkestrel-publish/scripts/wave.ts --visit --target <repository>`,
|
|
54
|
+
which runs the visit in [wave.md](references/wave.md) in its stated order and stops at the first
|
|
55
|
+
failing step; repair that step by hand and re-run from it with `--from`. Run visits in parallel
|
|
56
|
+
slices of disjoint repositories, each slice serial inside itself.
|
|
57
|
+
4. **Rule on each package's bump.** Take the visit's comparison and range reading; repeat `compare.ts` only after the artifact changes or an unanswered result. Apply the triggers in [wave.md](references/wave.md) § Rule on
|
|
58
|
+
the bump; `references/release.md` § What a bump obliges owns the blast radius.
|
|
48
59
|
5. **Prepare the whole layer before authenticating**, in the order [wave.md](references/wave.md)
|
|
49
60
|
§ Prepare a layer fixes. Every one of those steps happens outside the window.
|
|
50
|
-
6. **Reach the approval.** Follow [window.md](references/window.md)
|
|
51
|
-
only after the user signals
|
|
61
|
+
6. **Reach the approval.** Follow [window.md](references/window.md): run
|
|
62
|
+
`node .agents/skills/orkestrel-publish/scripts/window.ts --login` only after the user signals
|
|
63
|
+
they are at the keyboard, and read its `whoami` answer as the session.
|
|
52
64
|
7. **Authorize and upload.** Follow [window.md](references/window.md). Take the account's one-time
|
|
53
|
-
code where it has one
|
|
65
|
+
code where it has one and run
|
|
66
|
+
`node .agents/skills/orkestrel-publish/scripts/window.ts --publish <layer directories> --otp <code>`; § Authorize the upload there fixes that code's life and the layer it
|
|
54
67
|
carries. Where the account answers with no code, follow § Spend the window there.
|
|
55
68
|
8. **Close the layer from the registry, then prepare the next**, per [wave.md](references/wave.md)
|
|
56
69
|
§ Prepare a layer.
|
|
@@ -64,9 +77,9 @@ Completion requires:
|
|
|
64
77
|
|
|
65
78
|
- every package the round named has ended published at a registry-confirmed version, published on
|
|
66
79
|
a later round with the reason recorded, or ruled as no bump with the evidence that ruled it;
|
|
67
|
-
- every obligation § What a bump obliges places on a published package's dependents has closed as
|
|
80
|
+
- every obligation `references/release.md` § What a bump obliges places on a published package's dependents has closed as
|
|
68
81
|
that section requires;
|
|
69
|
-
- every tarball swap is restored per §
|
|
82
|
+
- every tarball swap is restored per `references/release.md` § Fix a dependency before it publishes, and no target
|
|
70
83
|
repository is left holding an uncommitted bump or an unpushed commit;
|
|
71
84
|
- every gate that proved a package ran outside the window and against the artifact that shipped;
|
|
72
85
|
- every gate red at a package's baseline for a cause `ROADMAP.md` already carries is recorded as a
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Release laws
|
|
2
|
+
|
|
3
|
+
`orkestrel-publish/SKILL.md` names this file. It carries the fleet release rules that bind an executor who is publishing or preparing a package to publish.
|
|
4
|
+
|
|
5
|
+
## Publishing is the user's
|
|
6
|
+
|
|
7
|
+
- Publishing is the user's decision and the user's credential. Prepare, surface the approval, and run the publishes the user asked for. Never substitute an API key, an access token, a copied auth file, or another login flow, and never ask the user to paste a token into the conversation.
|
|
8
|
+
- A publish chain is a long-running command: write it as a TypeScript file and launch it through the `orkestrel-dispatch` skill's `scripts/launch.ts`; confirm the previous chain is dead by process id before starting another. Publish serially; concurrent publishes collide on the authentication handshake.
|
|
9
|
+
- A wave over unpublished tips derives its order per run from the dependency graph and records only the round each package landed in.
|
|
10
|
+
|
|
11
|
+
## Fix a dependency before it publishes
|
|
12
|
+
|
|
13
|
+
When a consumer meets a defect that lives in a package it only has from the registry, build the dependency from source, pack it, and install the tarball into the consumer. Do not wait for the release and do not work around it in the consumer.
|
|
14
|
+
|
|
15
|
+
- Install the tarball; never link it. A link skips packing, the `files` list, and the exports map.
|
|
16
|
+
- Write the build, pack, and install to a script and run the file.
|
|
17
|
+
- Record the range you replaced in the same step that replaces it.
|
|
18
|
+
- Rebuild and repack whenever the dependency's source moves; a stale tarball is a stale `dist/`.
|
|
19
|
+
- Delete the consumer's `node_modules/.vite` directory after every tarball install, or install into a fresh worktree; Vite keys its pre-bundle on the installed version.
|
|
20
|
+
- Run one unit per checkout, at that checkout's catalog layer.
|
|
21
|
+
- Fetch and merge the dependency's default branch before packing it.
|
|
22
|
+
- Restore the registry copy before any gate that must prove the published artifact, and before publishing anything. The release still follows layer order: the dependency publishes first, then the consumer re-pins and re-runs its gates.
|
|
23
|
+
- Keep tarballs under `tmp/`; sweep them at acceptance; never commit them.
|
|
24
|
+
|
|
25
|
+
## What a bump obliges
|
|
26
|
+
|
|
27
|
+
- A runtime `dependencies` bump reaches every consumer: each package downstream re-pins, re-runs its gates, bumps, and republishes in layer order.
|
|
28
|
+
- A development `devDependencies` bump reaches nobody: re-pin, prove the gates green, commit to `main`; do not bump or publish.
|
|
29
|
+
- A development bump that moves the published artifact is a runtime bump. Prove the direction with the build: rebuild after the re-pin and run `node .agents/skills/orkestrel-publish/scripts/compare.ts`, which compares `dist/` against the published tarball on material content only. Exit 3 bumps and publishes that package, and its dependents follow the runtime rule.
|
|
30
|
+
- Every package is `0.0.x`, where a caret pins one exact release, so the fleet publishes in topological layer order derived from runtime `dependencies` and `peerDependencies` edges, never from a development edge.
|
|
31
|
+
- Read the order from the catalog table in `.claude/agents/orkestrel.md`, regenerated with `scaffold catalog` before sequencing a cascade. Never write a second order elsewhere.
|
|
32
|
+
|
|
33
|
+
## The scaffold surface
|
|
34
|
+
|
|
35
|
+
- `scaffold` is a development dependency of every package, so it publishes on its own and propagates as files, never as a cascade. Each package builds against the published `scaffold`.
|
|
36
|
+
- `scaffold` ships `dist/host`, the vendored file set every target receives through `repair`. Bump and publish `scaffold` when any vendored byte or the set of vendored paths changes.
|
|
37
|
+
- After a vendored-only release, re-pin `@orkestrel/scaffold` in each target, run `repair` there, and prove that target's gates still green. A target bumps only when its own published surface moved.
|
|
38
|
+
- Keep a target's own Claude permissions in `.claude/settings.local.json`; `repair` restores the vendored `.claude/settings.json`.
|
|
39
|
+
- Never edit a vendored file inside a target; `repair` restores it and `scaffold audit` reports the drift. Change the vendored file in the scaffold repository and release.
|
|
@@ -7,8 +7,9 @@ prepare the next.
|
|
|
7
7
|
|
|
8
8
|
## Visit a repository
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
step that writes it.
|
|
10
|
+
`scripts/wave.ts --visit` runs these steps in this order and stops at the first one that fails; a
|
|
11
|
+
step that reads generated or installed state is invalid before the step that writes it. Run a step
|
|
12
|
+
by hand only to repair it, then resume with `--from <step>`.
|
|
12
13
|
|
|
13
14
|
1. Re-pin every `@orkestrel` range to the registry caret (peer ranges included) and install, so
|
|
14
15
|
the overwrite runs the current vendored host.
|
|
@@ -39,18 +40,18 @@ step that writes it.
|
|
|
39
40
|
6. Sweep the self-pins, per § Sweep the self-pins: the re-pin moves the snapshot class.
|
|
40
41
|
7. Run the mutating `format` script to converge generated writes.
|
|
41
42
|
8. Run the quality gates.
|
|
42
|
-
9.
|
|
43
|
-
|
|
44
|
-
ruling a bump owed.
|
|
43
|
+
9. Run `node .agents/skills/orkestrel-publish/scripts/compare.ts` to compare the rebuilt `dist/`
|
|
44
|
+
against the published tarball for material content. An exit of 2 is an unanswered comparison,
|
|
45
|
+
never a moved dist: fetch and re-run rather than ruling a bump owed.
|
|
45
46
|
|
|
46
47
|
Restore any unpublished tarball the target is holding before the quality gates run, per
|
|
47
|
-
|
|
48
|
+
`release.md` § Fix a dependency before it publishes. A distribution proof run
|
|
48
49
|
against a local tarball proves the local tarball. Stage an unpublished tarball with
|
|
49
50
|
`npm install --no-save`, because a `file:` pin refuses the blueprint and the manifest keeps a
|
|
50
51
|
registry range.
|
|
51
52
|
|
|
52
|
-
Where a visit runs before scaffold itself publishes, run
|
|
53
|
-
the sweep with `scaffold audit --offline`. The online verbs read vendored bytes from the published
|
|
53
|
+
Where a visit runs before scaffold itself publishes, run the visit with `--offline`; the runner
|
|
54
|
+
performs the offline overwrite and proves the sweep with `scaffold audit --offline`. The online verbs read vendored bytes from the published
|
|
54
55
|
package, so an unpublished scaffold's visit otherwise writes the registry's older floor, and an
|
|
55
56
|
online audit reports the floor-restored files as stale until the release. The `--offline` overwrite
|
|
56
57
|
skips the catalog step and exits `1` with a note naming that refusal, so run the full
|
|
@@ -61,15 +62,15 @@ reporting per target. Refuse a failed target, name it, repair it, and re-run it
|
|
|
61
62
|
|
|
62
63
|
## Rule on the bump
|
|
63
64
|
|
|
64
|
-
Bump on either trigger: the rebuilt dist differs materially from the
|
|
65
|
-
final runtime dependency set differs from the published packument.
|
|
65
|
+
Bump on either trigger: `scripts/compare.ts` exits 3 (the rebuilt dist differs materially from the
|
|
66
|
+
published tarball), or the final runtime dependency set differs from the published packument.
|
|
66
67
|
|
|
67
68
|
- Test the final dependency set against the packument, never "did my step move a pin". The
|
|
68
69
|
`declare` step inside `scaffold overwrite` re-pins before any later check, so the step-local
|
|
69
70
|
reading reports nothing moved while the manifest surface did.
|
|
70
71
|
- Treat a re-pinned runtime range as published surface. Without the bump a consumer installs
|
|
71
72
|
duplicate copies of the moved dependency.
|
|
72
|
-
- Compare material content only, as
|
|
73
|
+
- Compare material content only, as `release.md` § What a bump obliges defines it,
|
|
73
74
|
and take the blast radius of a bump from that section rather than deciding it here.
|
|
74
75
|
- Ship a dist built before the version bump wherever the bump edits no emitted byte. Check that
|
|
75
76
|
per package rather than assuming it: a package that imports its own `package.json` version into
|
|
@@ -77,7 +78,7 @@ final runtime dependency set differs from the published packument.
|
|
|
77
78
|
Rebuild after the bump there and pack from the rebuilt tree. The `npm publish --ignore-scripts`
|
|
78
79
|
command skips `prepack`, so that rebuild is the operator's step rather than the publish's. The
|
|
79
80
|
same holds for a package that writes its declared ranges into published output: its `dist/`
|
|
80
|
-
moves on a development re-pin, and
|
|
81
|
+
moves on a development re-pin, and `release.md` § What a bump obliges rules that
|
|
81
82
|
re-pin a release.
|
|
82
83
|
|
|
83
84
|
One trigger orders rather than bumps. A package the fleet consumes as a development dependency,
|
|
@@ -105,8 +106,9 @@ Prepare a published package's layer in this order, after the visit has ruled the
|
|
|
105
106
|
5. **Write the release commit and push before the window opens.** The preparation commit inside
|
|
106
107
|
the visit is a different commit at a different moment.
|
|
107
108
|
|
|
108
|
-
Where an inventory taken before the round already ruled every dist moved, the bump
|
|
109
|
-
visit
|
|
109
|
+
Where an inventory taken before the round already ruled every dist moved, apply the bump before
|
|
110
|
+
the visit, pass the replaced version through `--prior` so the self-pin sweep finds it, and complete
|
|
111
|
+
the remaining steps of this section after the visit, whose comparison confirms the ruling.
|
|
110
112
|
|
|
111
113
|
Prepare the next layer only after this one is on the registry. A dependent's new pin cannot
|
|
112
114
|
install until the version it names exists, so preparation and publication interleave and cannot be
|
|
@@ -123,13 +125,12 @@ every one of them. A snapshot of generated output carries the ranges the package
|
|
|
123
125
|
its own version, and any re-pin, a development one included, falsifies it. Run this sweep after the
|
|
124
126
|
re-pin install, not after the manifest edit.
|
|
125
127
|
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
version, so the version sweep cannot reach it.
|
|
128
|
+
- Run `node .agents/skills/orkestrel-publish/scripts/pins.ts --version <prior> --range <prior range> ...`
|
|
129
|
+
with the prior version and the prior range of every re-pinned dependency, rule on every hit, and
|
|
130
|
+
move every generated-manifest snapshot hit with its re-pin.
|
|
131
|
+
A canned packument in a fixture and a looked-up version in a CLI suite carry the version with no
|
|
132
|
+
tripwire comment beside them, and a generated-manifest fixture carries the ranges and never the
|
|
133
|
+
package's own version, so one run names both classes.
|
|
133
134
|
- Move a documented tripwire — a golden digest over generated output — in the same change as the
|
|
134
135
|
version bump. That is what the tripwire is for.
|
|
135
136
|
- Re-take a generated artifact's digest after the install, because the generated bytes can derive
|
|
@@ -9,8 +9,11 @@ rest of the layer either fits inside it or takes another approval.
|
|
|
9
9
|
|
|
10
10
|
## Arm the terminal
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
|
|
12
|
+
- Read the session with `node .agents/skills/orkestrel-publish/scripts/window.ts --whoami`; `--login` prints the command the operator runs in a real terminal and polls `whoami` until it answers. No child of a script holds the TTY npm needs, so the login itself is the operator's.
|
|
13
|
+
|
|
14
|
+
- Run the login and every browser-authorized publish under `script -qfc '<command>' <log>`. npm
|
|
15
|
+
offers the browser approval only when it sees a TTY; without one it fails `EOTP` with no way to
|
|
16
|
+
answer. The one-time-code path runs under captured pipes instead, per § Authorize the upload.
|
|
14
17
|
- Pass `--browser=false` to `npm login` and to every `npm publish`. Without it npm prints
|
|
15
18
|
`Press ENTER to open in the browser...` and blocks. Never answer that prompt with a newline: the
|
|
16
19
|
web flow consumes the newline on a later read, drops to a legacy `Username:` prompt, and exits
|
|
@@ -27,13 +30,15 @@ rest of the layer either fits inside it or takes another approval.
|
|
|
27
30
|
and an overnight gap expires it, so a session-start answer does not hold.
|
|
28
31
|
- Read a login log that shows the spinner and then a legacy `Username:` prompt as a dead attempt
|
|
29
32
|
rather than as a prompt to answer: expired, or refused on its first poll per § Read a `403` on the
|
|
30
|
-
poll. Kill it by the process id recorded at its launch, per
|
|
31
|
-
|
|
32
|
-
over the process list reaches a live upload as readily as the dead login.
|
|
33
|
-
- On a Windows host, Git Bash ships no `script` binary, so
|
|
34
|
-
prepare the layer, prove the gates, surface the exact `npm publish` command, and
|
|
35
|
-
runs it in a real terminal. Everything before and after the upload — bumps, re-pins,
|
|
36
|
-
registry reads — stays with the Orchestrator
|
|
33
|
+
poll. Kill it by the process id recorded at its launch, per the `orkestrel-dispatch` skill's launch
|
|
34
|
+
reference § Kill and relaunch. Every browser-authorized publish here runs under the same `script -qfc` form, so
|
|
35
|
+
a pattern over the process list reaches a live upload as readily as the dead login.
|
|
36
|
+
- On a Windows host, Git Bash ships no `script` binary, so a browser-authorized upload is
|
|
37
|
+
operator-driven: prepare the layer, prove the gates, surface the exact `npm publish` command, and
|
|
38
|
+
the operator runs it in a real terminal. Everything before and after the upload — bumps, re-pins,
|
|
39
|
+
gates, registry reads — stays with the Orchestrator, and the one-time-code path in § Authorize the
|
|
40
|
+
upload runs through `window.ts` on every host. The fifo stdin law still binds a browser-authorized
|
|
41
|
+
upload on that host.
|
|
37
42
|
|
|
38
43
|
## Reach the approval
|
|
39
44
|
|
|
@@ -80,6 +85,8 @@ rest of the layer either fits inside it or takes another approval.
|
|
|
80
85
|
|
|
81
86
|
## Authorize the upload
|
|
82
87
|
|
|
88
|
+
- Where the account answers with a one-time code, run `node .agents/skills/orkestrel-publish/scripts/window.ts --publish <layer directories> --otp <code>`: it uploads back to back, journals each upload under `tmp/units/`, stops at the first refusal naming the package to resume from on a fresh code, and confirms each accepted version against the registry. The browser path stays the operator's.
|
|
89
|
+
|
|
83
90
|
- Take the account's one-time code where the account has one. The
|
|
84
91
|
`npm publish --ignore-scripts --otp=<code>` command uploads with no browser authorization and no
|
|
85
92
|
poll. The code has its own life: measured on 2026-09-04 against `registry.npmjs.org`, one code
|
|
@@ -93,12 +100,16 @@ rest of the layer either fits inside it or takes another approval.
|
|
|
93
100
|
describes for the browser path: the chain stops at the refused package, and the layer resumes
|
|
94
101
|
from that package on a fresh code. Never retry the refused upload on the same code.
|
|
95
102
|
- Ask for the code and nothing else. Never ask for a password, an access token, or an auth file.
|
|
96
|
-
|
|
97
|
-
-
|
|
103
|
+
`release.md` § Publishing is the user's owns that law.
|
|
104
|
+
- A one-time-code upload needs no terminal arming: `window.ts --publish` holds the upload under
|
|
105
|
+
captured pipes, where npm's non-TTY guard rethrows an authentication refusal instead of prompting,
|
|
106
|
+
so a spent code is refused `EOTP` with no prompt and no browser flow, which is the stop the runner
|
|
107
|
+
reads. The runner passes `--browser=false` and re-reads `whoami` immediately before the first
|
|
108
|
+
upload. Never run a one-time-code upload on a TTY: there npm answers a refused code with a prompt
|
|
109
|
+
the chain cannot see.
|
|
98
110
|
- Fall back to the browser authorization where the account answers with no code. That path mints
|
|
99
111
|
the `auth/cli/<id>` URL, needs the click inside the session's life, and opens the five-minute
|
|
100
|
-
window.
|
|
101
|
-
45-second abandon and the one-time code uploaded the package with no retry.
|
|
112
|
+
window.
|
|
102
113
|
- Tell the user that approving an `auth/cli/<id>` URL opens a five-minute window covering the rest
|
|
103
114
|
of the layer.
|
|
104
115
|
|
|
@@ -130,7 +141,7 @@ rest of the layer either fits inside it or takes another approval.
|
|
|
130
141
|
- Expect a large layer to outlast one window. Size batches to what uploads in five minutes and
|
|
131
142
|
name each planned approval point to the user, rather than discovering them mid-run.
|
|
132
143
|
- The contract's serialization law binds every upload in the window, and
|
|
133
|
-
|
|
144
|
+
the `orkestrel-dispatch` skill binds the chain that runs them.
|
|
134
145
|
|
|
135
146
|
## Read a `403` on the poll
|
|
136
147
|
|
|
@@ -155,6 +166,8 @@ the same status. Rule from the evidence, never from which cause reads likelier.
|
|
|
155
166
|
|
|
156
167
|
## Read the verdict from the registry
|
|
157
168
|
|
|
169
|
+
- Confirm a layer with `node .agents/skills/orkestrel-publish/scripts/window.ts --confirm <name@version>...`, which re-reads the registry until it serves each version or the wait ends.
|
|
170
|
+
|
|
158
171
|
- Read `+ @orkestrel/<name>@<version>` in the upload's own journal as the accepted verdict, and
|
|
159
172
|
advance the chain on it. The registry's read lags its processing by minutes, which the
|
|
160
173
|
`Your package is being processed and may take a few minutes to become available.` notice beside
|