role-os 2.3.0 → 2.3.1
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/package.json +1 -1
- package/src/mission-run.mjs +1 -1
- package/src/mission.mjs +22 -5
- package/src/swarm/domain-detect.mjs +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "role-os",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "Role OS — a multi-Claude operating system where 61 specialized roles execute work through contracts, conflict detection, escalation, and structured evidence. 10 team packs, 9 missions including dogfood swarm (multi-pass convergence), deep audit with manifest-scaled dynamic dispatch, and brainstorm with traceable disagreement.",
|
|
5
5
|
"homepage": "https://mcp-tool-shop-org.github.io/role-os/",
|
|
6
6
|
"bugs": {
|
package/src/mission-run.mjs
CHANGED
|
@@ -205,7 +205,7 @@ function buildDynamicSteps(mission, manifest) {
|
|
|
205
205
|
function buildSwarmSteps(mission, manifest) {
|
|
206
206
|
const steps = [];
|
|
207
207
|
const domains = manifest.domains || [];
|
|
208
|
-
const stages = manifest.stages || ["health-a", "health-b", "health-c", "feature"];
|
|
208
|
+
const stages = manifest.stages || ["health-a", "health-b", "health-c", "feature", "treatment"];
|
|
209
209
|
const waveLoops = mission.waveLoops || [];
|
|
210
210
|
|
|
211
211
|
// For each stage, create domain agent steps + coordinator gate
|
package/src/mission.mjs
CHANGED
|
@@ -331,9 +331,9 @@ export const MISSIONS = {
|
|
|
331
331
|
// ── Dogfood Swarm (Multi-Pass Health + Feature Convergence) ─────────────────
|
|
332
332
|
"dogfood-swarm": {
|
|
333
333
|
name: "Dogfood Swarm",
|
|
334
|
-
description: "Three-stage health pass (bug/security → proactive → humanization)
|
|
334
|
+
description: "Three-stage health pass (bug/security → proactive → humanization), iterative feature pass, final synthesis, then Full Treatment (shipcheck, branding, handbook, repo-knowledge). Moves a repo from 'works' to 'whole.' Domain agent count scales with repo structure.",
|
|
335
335
|
pack: "swarm",
|
|
336
|
-
entryPath: "Generate swarm manifest → Save-point tag → Health-A wave (5 agents parallel, loop until 0 CRITICAL+HIGH) → Health-B wave (proactive, user review) → Health-C wave (humanization, loop) → Feature wave (user approval gate, loop) →
|
|
336
|
+
entryPath: "Generate swarm manifest → Save-point tag → Health-A wave (5 agents parallel, loop until 0 CRITICAL+HIGH) → Health-B wave (proactive, user review) → Health-C wave (humanization, loop) → Feature wave (user approval gate, loop) → Final test → Full Treatment (shipcheck → README + translations → landing page → handbook → repo-knowledge DB) → Critic verdict",
|
|
337
337
|
roleChain: [
|
|
338
338
|
"Swarm Coordinator", // ×1 — orchestrates all stages, enforces gates
|
|
339
339
|
"Swarm Backend Agent", // ×1 — exclusive ownership of backend files
|
|
@@ -390,6 +390,15 @@ export const MISSIONS = {
|
|
|
390
390
|
buildGate: true,
|
|
391
391
|
userApproval: true,
|
|
392
392
|
},
|
|
393
|
+
{
|
|
394
|
+
stage: "treatment",
|
|
395
|
+
lens: "Full Treatment — shipcheck gate (hard gates A-D must pass), README finalize + logo + badges, translations (user-run), landing page scaffold, handbook (3-7 pages via Starlight), repo metadata, repo-knowledge DB entry, deploy + verify",
|
|
396
|
+
exitCondition: "shipcheck audit exits 0 + landing page deployed + handbook pages live + repo-knowledge DB entry created",
|
|
397
|
+
maxIterations: 2,
|
|
398
|
+
buildGate: true,
|
|
399
|
+
userApproval: true,
|
|
400
|
+
notes: "Read memory/full-treatment.md + memory/handbook-playbook.md before starting. Translations run locally by user (not Claude). Version must be v1.0.0 minimum. CI must pass before moving on.",
|
|
401
|
+
},
|
|
393
402
|
],
|
|
394
403
|
// Exclusive ownership — domain file boundaries (new primitive, unique to swarm)
|
|
395
404
|
exclusiveOwnership: {
|
|
@@ -430,6 +439,11 @@ export const MISSIONS = {
|
|
|
430
439
|
{ role: "Swarm Frontend Agent", produces: "wave-report", consumedBy: "Swarm Coordinator", stage: "feature" },
|
|
431
440
|
{ role: "Swarm Coordinator", produces: "swarm-gate", consumedBy: "Swarm Synthesizer", stage: "feature" },
|
|
432
441
|
|
|
442
|
+
// Treatment: Full Treatment wave (shipcheck, README, landing page, handbook, repo-knowledge)
|
|
443
|
+
{ role: "Swarm Infra Agent", produces: "wave-report", consumedBy: "Swarm Coordinator", stage: "treatment" },
|
|
444
|
+
{ role: "Swarm Frontend Agent", produces: "wave-report", consumedBy: "Swarm Coordinator", stage: "treatment" },
|
|
445
|
+
{ role: "Swarm Coordinator", produces: "swarm-gate", consumedBy: "Swarm Synthesizer", stage: "treatment" },
|
|
446
|
+
|
|
433
447
|
// Final: Synthesize + Critic verdict
|
|
434
448
|
{ role: "Swarm Synthesizer", produces: "swarm-final-report", consumedBy: "Critic Reviewer", stage: "final" },
|
|
435
449
|
{ role: "Critic Reviewer", produces: "review-verdict", consumedBy: null, stage: "final" },
|
|
@@ -441,17 +455,20 @@ export const MISSIONS = {
|
|
|
441
455
|
{ trigger: "health pass stuck at max iterations", from: "Swarm Coordinator", to: "Swarm Synthesizer", action: "synthesize with partial health — document remaining CRITICAL/HIGH" },
|
|
442
456
|
{ trigger: "feature audit finds no gaps", from: "Swarm Coordinator", to: "Swarm Synthesizer", action: "skip feature execution, advance to final synthesis" },
|
|
443
457
|
{ trigger: "user rejects feature audit", from: "Swarm Coordinator", to: "Swarm Coordinator", action: "re-scope feature audit with user feedback, re-run" },
|
|
458
|
+
{ trigger: "shipcheck audit fails during treatment", from: "Swarm Coordinator", to: "Swarm Infra Agent", action: "fix failing hard gates (A-D), re-run shipcheck audit" },
|
|
459
|
+
{ trigger: "translations not run by user", from: "Swarm Coordinator", to: "Swarm Coordinator", action: "prompt user to run translate-all.mjs locally, do NOT run from Claude" },
|
|
444
460
|
],
|
|
445
|
-
honestPartial: "One or more
|
|
461
|
+
honestPartial: "One or more stages complete but later stages blocked or incomplete. Per-stage findings are individually valid and actionable. Manifest and wave reports exist even if synthesis does not. Build gate status is known. A repo that passes health+feature but not treatment is 'production-ready but not whole.'",
|
|
446
462
|
stopConditions: [
|
|
447
|
-
"All
|
|
463
|
+
"All five stages converge (health, feature, final test, treatment) — Synthesizer produces final report, Critic accepts",
|
|
448
464
|
"Health pass stuck after max iterations — synthesize with partial health findings",
|
|
449
465
|
"Feature pass stuck after max iterations — synthesize with partial feature progress",
|
|
466
|
+
"Treatment blocked (shipcheck fails, translations pending) — synthesize with partial treatment status",
|
|
450
467
|
"Build gate fails repeatedly — stop and report infrastructure issue",
|
|
451
468
|
"User halts swarm — synthesize from completed stages",
|
|
452
469
|
],
|
|
453
470
|
dispatchDefaults: { model: "sonnet", maxTurns: 40, maxBudgetUsd: 6.0 },
|
|
454
|
-
trialEvidence: "Proven on claude-collaborate (2026-03-28): 35→129 tests, 106 health findings fixed, v1.1.0 shipped. Protocol
|
|
471
|
+
trialEvidence: "Proven on claude-collaborate (2026-03-28): 35→129 tests, 106 health findings fixed, v1.1.0 shipped. Stillpoint (2026-03-29): 26→136 tests, treatment pending. Protocol v3.0 (added Phase 10: Full Treatment).",
|
|
455
472
|
},
|
|
456
473
|
};
|
|
457
474
|
|
|
@@ -140,7 +140,7 @@ export function generateSwarmManifest(cwd, options = {}) {
|
|
|
140
140
|
repo: repoName,
|
|
141
141
|
repoType,
|
|
142
142
|
domains,
|
|
143
|
-
stages: ["health-a", "health-b", "health-c", "feature"],
|
|
143
|
+
stages: ["health-a", "health-b", "health-c", "feature", "treatment"],
|
|
144
144
|
exclusiveOwnership: {
|
|
145
145
|
mode: "strict",
|
|
146
146
|
maxAgentsPerWave: domains.length,
|