jonah-fleet 1.5.0 → 1.8.0

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 (44) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +25 -2
  3. package/dist/commands/daemon.d.ts.map +1 -1
  4. package/dist/commands/init.d.ts +3 -0
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/labels.d.ts +11 -0
  7. package/dist/commands/labels.d.ts.map +1 -0
  8. package/dist/commands/status.d.ts.map +1 -1
  9. package/dist/index.js +2292 -476
  10. package/dist/lib/daemon-keys.d.ts +103 -0
  11. package/dist/lib/daemon-keys.d.ts.map +1 -0
  12. package/dist/lib/daemon.d.ts +41 -2
  13. package/dist/lib/daemon.d.ts.map +1 -1
  14. package/dist/lib/evals.d.ts +56 -1
  15. package/dist/lib/evals.d.ts.map +1 -1
  16. package/dist/lib/labels.d.ts +48 -0
  17. package/dist/lib/labels.d.ts.map +1 -0
  18. package/dist/lib/manifest.d.ts +6 -0
  19. package/dist/lib/manifest.d.ts.map +1 -1
  20. package/dist/lib/presets.d.ts +47 -1
  21. package/dist/lib/presets.d.ts.map +1 -1
  22. package/dist/lib/runner.d.ts +66 -0
  23. package/dist/lib/runner.d.ts.map +1 -1
  24. package/dist/lib/telemetry.d.ts +13 -0
  25. package/dist/lib/telemetry.d.ts.map +1 -1
  26. package/dist/lib/terminal-card.d.ts +23 -0
  27. package/dist/lib/terminal-card.d.ts.map +1 -1
  28. package/package.json +4 -4
  29. package/schema.json +68 -0
  30. package/templates/evals/ambiguity-benchmark.json +92 -0
  31. package/templates/prompts/ORCHESTRATION.md +57 -36
  32. package/templates/prompts/_prompt-template.md +13 -1
  33. package/templates/prompts/autowork.md +63 -27
  34. package/templates/prompts/issues-housekeeping.md +1 -1
  35. package/templates/prompts/optimizer.md +3 -0
  36. package/templates/prompts/peer-review.md +13 -3
  37. package/templates/workflows/autowork-cron.yml +74 -2
  38. package/templates/workflows/dependency-check-cron.yml +41 -2
  39. package/templates/workflows/issues-housekeeping-cron.yml +41 -2
  40. package/templates/workflows/prompt-optimizer-cron.yml +41 -2
  41. package/templates/workflows/trigger-autowork-manual.yml +43 -2
  42. package/templates/workflows/trigger-autowork-on-bug.yml +47 -7
  43. package/templates/workflows/trigger-autowork-on-merge.yml +48 -7
  44. package/templates/workflows/trigger-review-routine.yml +46 -7
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-card.d.ts","sourceRoot":"","sources":["../../src/lib/terminal-card.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA8EhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAA4B,GAAG,MAAM,CAuBnG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAsJrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqDjE;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAU;IAEvB,cAEC;IAEM,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAazC;IAEM,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKtC;IAED,OAAO,CAAC,MAAM;IAeP,IAAI,IAAI,IAAI,CAYlB;CACF"}
1
+ {"version":3,"file":"terminal-card.d.ts","sourceRoot":"","sources":["../../src/lib/terminal-card.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsCnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2BhF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAuGhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAA4B,GAAG,MAAM,CA6BnG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAsH9F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA4QrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqDjE;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAU;IAEvB,cAEC;IAEM,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAazC;IAEM,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKtC;IAEM,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB5D;IAED,OAAO,CAAC,MAAM;IAUP,IAAI,IAAI,IAAI,CAYlB;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jonah-fleet",
3
- "version": "1.5.0",
3
+ "version": "1.8.0",
4
4
  "description": "Standalone autonomous agent fleet with Symphony orchestration, claim protocols, and continuous improvement loops",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,8 +13,8 @@
13
13
  "dev": "tsup --watch",
14
14
  "lint": "eslint src tests",
15
15
  "type-check": "tsc --noEmit",
16
- "test": "vitest run",
17
- "test:evals": "vitest run tests/evals.test.ts tests/contribute.test.ts tests/sync-workflow.test.ts",
16
+ "test": "vitest run --exclude '**/node_modules/**' --exclude '**/.jonah-fleet/**'",
17
+ "test:evals": "vitest run tests/evals.test.ts tests/contribute.test.ts tests/sync-workflow.test.ts --exclude '**/.jonah-fleet/**'",
18
18
  "test:watch": "vitest",
19
19
  "format": "prettier --write \"**/*.{ts,json,md,yml}\""
20
20
  },
@@ -44,7 +44,7 @@
44
44
  "@types/node": "^26.4.0",
45
45
  "tsup": "^8.3.5",
46
46
  "typescript": "^7.0.2",
47
- "vitest": "^4.1.11"
47
+ "vitest": "^5.0.0"
48
48
  },
49
49
  "overrides": {
50
50
  "esbuild": "^0.28.2"
package/schema.json CHANGED
@@ -36,6 +36,62 @@
36
36
  "items": { "type": "string" },
37
37
  "description": "List of core engineering skills to install/sync"
38
38
  },
39
+ "models": {
40
+ "type": "object",
41
+ "properties": {
42
+ "default": { "type": "string", "description": "Default model used across routines" },
43
+ "autowork": { "type": "string", "description": "Target model for autowork routine" },
44
+ "peer-review": { "type": "string", "description": "Target model for peer-review routine" },
45
+ "optimizer": { "type": "string", "description": "Target model for optimizer routine" },
46
+ "issues-housekeeping": { "type": "string", "description": "Target model for issues-housekeeping routine" },
47
+ "dependency-update-security-check": { "type": "string", "description": "Target model for dependency-update-security-check routine" },
48
+ "product-planning": { "type": "string", "description": "Target model for product-planning routine" },
49
+ "analytics-review": { "type": "string", "description": "Target model for analytics-review routine" }
50
+ },
51
+ "additionalProperties": { "type": "string" },
52
+ "description": "Per-routine model overrides (e.g. gemini-3.7-flash-high, gemini-3.7-flash)"
53
+ },
54
+ "budgets": {
55
+ "type": "object",
56
+ "properties": {
57
+ "weeklyTokens": {
58
+ "type": "number",
59
+ "description": "Weekly token budget limit across routines"
60
+ },
61
+ "maxIterations": {
62
+ "type": "object",
63
+ "properties": {
64
+ "default": { "type": "number" },
65
+ "autowork": { "type": "number" },
66
+ "peer-review": { "type": "number" },
67
+ "optimizer": { "type": "number" },
68
+ "issues-housekeeping": { "type": "number" },
69
+ "dependency-update-security-check": { "type": "number" },
70
+ "product-planning": { "type": "number" },
71
+ "analytics-review": { "type": "number" }
72
+ },
73
+ "additionalProperties": { "type": "number" },
74
+ "description": "Maximum tool call iterations per routine"
75
+ },
76
+ "timeoutMinutes": {
77
+ "type": "object",
78
+ "properties": {
79
+ "default": { "type": "number" },
80
+ "autowork": { "type": "number" },
81
+ "peer-review": { "type": "number" },
82
+ "optimizer": { "type": "number" },
83
+ "issues-housekeeping": { "type": "number" },
84
+ "dependency-update-security-check": { "type": "number" },
85
+ "product-planning": { "type": "number" },
86
+ "analytics-review": { "type": "number" }
87
+ },
88
+ "additionalProperties": { "type": "number" },
89
+ "description": "Workflow runner timeout in minutes per routine"
90
+ }
91
+ },
92
+ "additionalProperties": false,
93
+ "description": "Per-routine token, iteration, and timeout budgets"
94
+ },
39
95
  "schedules": {
40
96
  "type": "object",
41
97
  "properties": {
@@ -90,6 +146,18 @@
90
146
  },
91
147
  "additionalProperties": false,
92
148
  "description": "Configuration for priority-driven dual local/cloud agent execution"
149
+ },
150
+ "labels": {
151
+ "type": "object",
152
+ "properties": {
153
+ "protected": {
154
+ "type": "array",
155
+ "items": { "type": "string" },
156
+ "description": "User-defined list or wildcard patterns of protected labels retained during label pruning"
157
+ }
158
+ },
159
+ "additionalProperties": false,
160
+ "description": "Configuration for label management and protection shields"
93
161
  }
94
162
  },
95
163
  "required": ["version", "preset", "routines", "skills"],
@@ -0,0 +1,92 @@
1
+ [
2
+ {
3
+ "id": "eval-ambiguous-01",
4
+ "title": "Improve telemetry export speed",
5
+ "body": "The telemetry export is feeling sluggish lately. Please optimize it to make it faster.",
6
+ "labels": ["enhancement"],
7
+ "expectedAction": "ASK_QUESTIONS",
8
+ "rationale": "Lacks baseline metrics, target latency thresholds, profiling data, or specific code bottlenecks.",
9
+ "origin": "synthetic"
10
+ },
11
+ {
12
+ "id": "eval-ambiguous-02",
13
+ "title": "Add role-based permissions",
14
+ "body": "We need role-based permissions in the system so only authorized users can access certain routes.",
15
+ "labels": ["feat"],
16
+ "expectedAction": "ASK_QUESTIONS",
17
+ "rationale": "Does not specify what roles exist, which routes/mutations require auth, or how permissions are stored/checked.",
18
+ "origin": "synthetic"
19
+ },
20
+ {
21
+ "id": "eval-ambiguous-03",
22
+ "title": "Fix the layout on mobile devices",
23
+ "body": "The UI looks broken on phones. Please clean up the styles.",
24
+ "labels": ["bug"],
25
+ "expectedAction": "ASK_QUESTIONS",
26
+ "rationale": "No specific viewport sizes, reproduction steps, screenshots, or target components identified.",
27
+ "origin": "synthetic"
28
+ },
29
+ {
30
+ "id": "eval-ambiguous-04",
31
+ "title": "Refactor database queries",
32
+ "body": "Database queries need to be cleaned up and refactored for better architecture.",
33
+ "labels": ["refactor"],
34
+ "expectedAction": "ASK_QUESTIONS",
35
+ "rationale": "Unbounded scope with no target tables, architectural patterns, or verifiable acceptance criteria.",
36
+ "origin": "synthetic"
37
+ },
38
+ {
39
+ "id": "eval-ambiguous-05",
40
+ "title": "Clean up stale code",
41
+ "body": "There are some old unused functions in the codebase. Let's delete them.",
42
+ "labels": ["chore"],
43
+ "expectedAction": "ASK_QUESTIONS",
44
+ "rationale": "Vague premise without naming files, modules, or defining what criteria determines staleness.",
45
+ "origin": "synthetic"
46
+ },
47
+ {
48
+ "id": "eval-specified-01",
49
+ "title": "Fix CLI flag parsing for --budget in telemetry command",
50
+ "body": "When running `jonah-fleet telemetry --budget 5000000`, the budget is ignored because the option parser expects a number.\n\n## Tasks\n- [ ] Parse `options.budget` string to integer in `src/commands/telemetry.ts`\n- [ ] Fall back to manifest `weeklyTokenBudget` if omitted\n- [ ] Add unit test in `tests/telemetry-cli.test.ts` verifying flag override\n\nVerification: `npm test tests/telemetry-cli.test.ts`",
51
+ "labels": ["bug", "priority/P1"],
52
+ "expectedAction": "PROCEED_TO_IMPLEMENT",
53
+ "rationale": "Carries reproduction path, explicit file locations, task checklist, and test verification command.",
54
+ "origin": "synthetic"
55
+ },
56
+ {
57
+ "id": "eval-specified-02",
58
+ "title": "Add --json output flag to jonah-fleet status command",
59
+ "body": "Support structured machine-readable output for `jonah-fleet status`.\n\n## Tasks\n- [ ] Add `-j, --json` option to `src/index.ts` status command definition\n- [ ] Update `src/commands/status.ts` to output `JSON.stringify(statusReport, null, 2)` when `options.json` is true\n- [ ] Verify unit test passes via `npm test tests/status.test.ts`",
60
+ "labels": ["enhancement", "priority/P2"],
61
+ "expectedAction": "PROCEED_TO_IMPLEMENT",
62
+ "rationale": "Defines explicit CLI interface, component files, output contract, and unit test command.",
63
+ "origin": "synthetic"
64
+ },
65
+ {
66
+ "id": "eval-specified-03",
67
+ "title": "Strict TypeScript compilation failure in src/lib/worktree.ts on Node 22",
68
+ "body": "`tsc --noEmit` fails on `src/lib/worktree.ts:42` with `TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'`.\n\n## Tasks\n- [ ] Add null check for `process.env.GIT_WORK_TREE` before path resolution\n- [ ] Run `npm run type-check` to verify 0 errors",
69
+ "labels": ["bug", "priority/P0"],
70
+ "expectedAction": "PROCEED_TO_IMPLEMENT",
71
+ "rationale": "Exact compiler error code, line number, fix directive, and verification command provided.",
72
+ "origin": "synthetic"
73
+ },
74
+ {
75
+ "id": "eval-specified-04",
76
+ "title": "Add missing grill-me skill validation assertion to tests/installer.test.ts",
77
+ "body": "Ensure `installFleet` verifies `.agents/skills/grill-me/SKILL.md` is installed in standard preset.\n\n## Tasks\n- [ ] Add `expect(fs.existsSync(path.join(tempDir, '.agents/skills/grill-me/SKILL.md'))).toBe(true)` to `tests/installer.test.ts`\n- [ ] Verify test passes with `npm test tests/installer.test.ts`",
78
+ "labels": ["test", "size/S"],
79
+ "expectedAction": "PROCEED_TO_IMPLEMENT",
80
+ "rationale": "Exact code assertion, file path, and verification command specified.",
81
+ "origin": "synthetic"
82
+ },
83
+ {
84
+ "id": "eval-specified-05",
85
+ "title": "Export AmbiguityMetrics interface from src/lib/telemetry.ts",
86
+ "body": "External consumers and tests need direct access to `AmbiguityMetrics`.\n\n## Tasks\n- [ ] Add `export` keyword to `AmbiguityMetrics` interface in `src/lib/telemetry.ts`\n- [ ] Export from `src/index.ts`\n- [ ] Run `npm run type-check` to verify export integrity",
87
+ "labels": ["enhancement", "size/S"],
88
+ "expectedAction": "PROCEED_TO_IMPLEMENT",
89
+ "rationale": "Fully specified type export with exact interface name, target files, and verification steps.",
90
+ "origin": "synthetic"
91
+ }
92
+ ]
@@ -6,16 +6,16 @@ How agent routines in this repository are dispatched, claimed, and reconciled
6
6
 
7
7
  This project's automation is a GitHub-native implementation of the orchestration pattern formalized by OpenAI's [Symphony specification](https://github.com/openai/symphony/blob/main/SPEC.md) for orchestrating autonomous coding agents against an issue tracker. There is **no long-running orchestrator daemon**; the roles map onto GitHub primitives:
8
8
 
9
- | Symphony Concept | Implementation in this repo |
10
- |---|---|
11
- | `WORKFLOW.md` (repo-owned config + prompt templates) | `AGENTS.md` (aliased as `GEMINI.md`/`CLAUDE.md`) + `.github/prompts/*.md` |
12
- | Orchestrator (poll, dispatch, reconcile) | GitHub Actions triggers + scheduled routine sessions |
13
- | Issue tracker (Linear in Symphony) | GitHub Issues |
14
- | Agent runner (Codex app-server in per-issue workspace) | An ephemeral agent session (Antigravity CLI `agy`) in an isolated fresh clone |
15
- | Tracker is reader/scheduler; mutations happen via agent tools | Routines only schedule; the agent session makes every GitHub write |
16
-
9
+ | Symphony Concept | Implementation in this repo |
10
+ | ------------------------------------------------------------- | ----------------------------------------------------------------------------- |
11
+ | `WORKFLOW.md` (repo-owned config + prompt templates) | `AGENTS.md` (aliased as `GEMINI.md`/`CLAUDE.md`) + `.github/prompts/*.md` |
12
+ | Orchestrator (poll, dispatch, reconcile) | GitHub Actions triggers + scheduled routine sessions |
13
+ | Issue tracker (Linear in Symphony) | GitHub Issues |
14
+ | Agent runner (Codex app-server in per-issue workspace) | An ephemeral agent session (Antigravity CLI `agy`) in an isolated fresh clone |
15
+ | Tracker is reader/scheduler; mutations happen via agent tools | Routines only schedule; the agent session makes every GitHub write |
17
16
 
18
17
  Dispatch is both **scheduled** and **event-driven**. All routines run as ephemeral agent sessions via **Antigravity CLI (`agy`)** powered by **Gemini 3.7 Flash (High reasoning)**. The routine suite is calibrated to operate within a **strict 70% weekly token ceiling across all routines combined**, supervised by `optimizer.md`:
18
+
19
19
  - **Scheduled cron sweeps**: Autowork runs periodically (`autowork-cron.yml`), complemented by prompt optimization (`prompt-optimizer-cron.yml`), issues housekeeping (`issues-housekeeping-cron.yml`), and dependency security checks (`dependency-check-cron.yml`).
20
20
  - **Event-driven & manual triggers**: GitHub Actions workflows fire routines on events and interactive commands so work starts within seconds instead of waiting for scheduled ticks:
21
21
  - `trigger-review-routine.yml` fires Peer Review automatically when a PR is marked ready for review, updated, or review is requested (`ready_for_review`, `opened`, `reopened`, `synchronize`, `review_requested`). It can also be manually (re)triggered via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode) or by commenting `/review`, `/peer-review`, `/retrigger`, or `/re-review` on any open pull request.
@@ -27,8 +27,8 @@ Autowork triggers pass the target issue via environment variables (`TARGET_ISSUE
27
27
 
28
28
  Invariants deliberately upheld from this spec:
29
29
 
30
- - **Single-flight per issue** — at most one run works an issue at a time, enforced by the autowork claim protocol (assign → read-back → earliest-timestamp tiebreak). For **umbrella** issues, single-flight is maintained at the *child-issue* level so slices progress cleanly.
31
- - **Recover dead-run claims** — a crashed run's orphaned claim is released back to the pool rather than starving the issue, both opportunistically during candidate selection and periodically via issues housekeeping.
30
+ - **Single-flight per issue and PR convergence** — at most one run works an issue or pull request at a time, enforced by the autowork claim protocol (assign → read-back → earliest-timestamp tiebreak). For **umbrella** issues, single-flight is maintained at the _child-issue_ level so slices progress cleanly.
31
+ - **Recover dead-run claims** — a crashed run's orphaned claim is released back to the pool rather than starving the issue or PR, both opportunistically during candidate selection and periodically via issues housekeeping.
32
32
  - **Reader/writer separation** — the routine that authors a PR never merges it; the Peer Review routine is the sole merge authority for **product** PRs. (Operational log-only PRs are exempt; see Log delivery fallback.)
33
33
  - **Warm-Context Review Synchronization** — Autowork maintains an active warm session during implementation, polling for Peer Review's verdict. When Peer Review bounces a PR to draft with findings, Autowork immediately detects the draft state in-session, applies fixes directly to its warm working tree, and re-marks the PR ready—re-firing Peer Review for Round N+1 without cold-start overhead.
34
34
 
@@ -36,18 +36,29 @@ Invariants deliberately upheld from this spec:
36
36
 
37
37
  ## Stale-Claim Definition
38
38
 
39
- Single source of truth for both autowork candidate reclamation and housekeeping sweeps. An assigned issue is a *stale claim* (a dead autowork run's orphaned reservation, safe to release) only when **all** of these hold:
39
+ Single source of truth for both autowork candidate reclamation and housekeeping sweeps. An assigned issue is a _stale claim_ (a dead autowork run's orphaned reservation, safe to release) only when **all** of these hold:
40
40
 
41
41
  1. **It is an autowork claim, not a manual one.** The issue carries a `🔒 Claimed by autowork run …` comment. An assigned issue with **no** such comment is never stale; leave it alone (it may be a person working manually).
42
42
  2. **No live work exists.** There is **no open PR** referencing the issue (`Closes #N`). An open PR is live, recoverable work that autowork Phase 1 owns — never reclaim it, at any age.
43
43
  3. **The claim is old.** The most recent `🔒 Claimed by autowork run …` comment's GitHub creation time (`created_at`) is **more than 6 hours** ago. Measure age from that `created_at` only — never the issue's `updated_at`.
44
44
 
45
45
  **Releasing a stale claim is a destructive write and MUST be guarded:**
46
+
46
47
  - **Re-read immediately before writing.** Re-read the issue (`issue_read`) right before the unassign and re-confirm conditions 1–3 still hold. If any no longer holds, abort the release and move on.
47
48
  - **Remove only the named dead owner.** Unassign that specific login; never blindly clear all assignees.
48
49
 
49
50
  ---
50
51
 
52
+ ## PR Stale-Claim Definition (Phase 1 Convergence)
53
+
54
+ Single source of truth for Autowork Phase 1 pull request convergence. An assigned pull request or draft PR with unaddressed review comments is a _stale claim_ (safe to reclaim and reassign by another runner) only when **all** of these hold:
55
+
56
+ 1. **It carries an autowork claim comment**: The PR thread contains `🔒 Addressing review findings by autowork run …` or `🔒 Addressing review findings by local autowork session …`.
57
+ 2. **The claim is old**: The most recent claim comment's `created_at` is **more than 2 hours** ago. (2 hours instead of 6 hours because PR review convergence is a rapid turnaround loop).
58
+ 3. **No active commits or review activity**: No new commit has been pushed to the PR branch within the last 2 hours.
59
+
60
+ ---
61
+
51
62
  ## Routine Matching & Invocation
52
63
 
53
64
  **Identify the applicable routine at the start of every conversation, before doing any work:**
@@ -56,15 +67,15 @@ Single source of truth for both autowork candidate reclamation and housekeeping
56
67
  2. **Content match** — compare the task against the routine table below. When matching an interactive request from a human, name the matched routine and confirm before proceeding.
57
68
  3. **No match** — follow the general Working Practices, PR Workflow, and documentation rules with no routine-specific constraints.
58
69
 
59
- | Routine | File | Applies when the conversation is about... |
60
- |---|---|---|
61
- | Autowork | `.github/prompts/autowork.md` | Converging on open work: addressing PR review comments, closing issues whose PRs merged, then claiming and implementing the highest-priority unclaimed issue |
62
- | Peer Review | `.github/prompts/peer-review.md` | Reviewing a pull request (a named PR or scan mode) and merging it or leaving findings and bouncing to draft |
63
- | Prompt Optimizer | `.github/prompts/optimizer.md` | Diagnosing failures, inefficiency, token anomalies, and analyzing resolved bugs to propose prompt/test/workflow fixes and upstream contributions |
64
- | Issues Housekeeping | `.github/prompts/issues-housekeeping.md` | Sweeping open issues for staleness, duplicates, label drift, priority accuracy, and orphaned claims |
65
- | Dependency Update & Security Check | `.github/prompts/dependency-update-security-check.md` | Checking dependencies for updates and known vulnerabilities, opening actionable PRs |
66
- | Product Planning | `.github/prompts/product-planning.md` | Turning roadmap priorities into staged issues (`/to-tickets`) and formal PRDs (`/to-spec`) |
67
- | Analytics Review | `.github/prompts/analytics-review.md` | Evaluating telemetry & measurement trackers against success metrics, emitting action directives (PIVOT/DEPRECATE/ITERATE), and bridging to product planning |
70
+ | Routine | File | Applies when the conversation is about... |
71
+ | ---------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
72
+ | Autowork | `.github/prompts/autowork.md` | Converging on open work: addressing PR review comments, closing issues whose PRs merged, then claiming and implementing the highest-priority unclaimed issue |
73
+ | Peer Review | `.github/prompts/peer-review.md` | Reviewing a pull request (a named PR or scan mode) and merging it or leaving findings and bouncing to draft |
74
+ | Prompt Optimizer | `.github/prompts/optimizer.md` | Diagnosing failures, inefficiency, token anomalies, and analyzing resolved bugs to propose prompt/test/workflow fixes and upstream contributions |
75
+ | Issues Housekeeping | `.github/prompts/issues-housekeeping.md` | Sweeping open issues for staleness, duplicates, label drift, priority accuracy, and orphaned claims |
76
+ | Dependency Update & Security Check | `.github/prompts/dependency-update-security-check.md` | Checking dependencies for updates and known vulnerabilities, opening actionable PRs |
77
+ | Product Planning | `.github/prompts/product-planning.md` | Turning roadmap priorities into staged issues (`/to-tickets`) and formal PRDs (`/to-spec`) |
78
+ | Analytics Review | `.github/prompts/analytics-review.md` | Evaluating telemetry & measurement trackers against success metrics, emitting action directives (PIVOT/DEPRECATE/ITERATE), and bridging to product planning |
68
79
 
69
80
  ---
70
81
 
@@ -98,9 +109,11 @@ The routines invoke specialized engineering skills at key workflow checkpoints:
98
109
  ## Log Delivery Fallback
99
110
 
100
111
  Single source of truth for every routine's Logging section:
101
- 1. **Direct commit to `main` is default**: For operational run logs under `.github/prompts/logs/**`, commit directly to `main` via GitHub API or git push.
102
- 2. **Draft PR fallback**: If direct push fails, commit the log to a dedicated, fresh branch and open a draft PR carrying only the log files.
103
- 3. **Automated landing**: `auto-merge-log-prs.yml` or `issues-housekeeping.md` lands accumulated log PRs. Draft log PRs are never reviewed by Peer Review and do not count toward Autowork's backpressure limits.
112
+
113
+ 1. **Direct commit to `main` is default**: For operational run logs under `.github/prompts/logs/**`, commit directly to `main` via GitHub API or git push. Never commit logs to an active feature branch.
114
+ 2. **Mandatory `[skip ci]`**: All log commits MUST include `[skip ci]` in the commit message (e.g. `docs(log): record {routine-name} run {timestamp} [skip ci]`) to prevent unnecessary CI executions or approval blocks.
115
+ 3. **Draft PR fallback**: If direct push fails, commit the log to a dedicated, fresh branch and open a draft PR carrying only the log files.
116
+ 4. **Automated landing**: `auto-merge-log-prs.yml` or `issues-housekeeping.md` lands accumulated log PRs. Draft log PRs are never reviewed by Peer Review and do not count toward Autowork's backpressure limits.
104
117
 
105
118
  ---
106
119
 
@@ -115,7 +128,9 @@ How token spend, runaway loops, and budget anomalies are detected, triaged, and
115
128
  - **Iteration Ceiling Exhaustion**: >20% of runs in a routine terminate at the `token_limit` / max iteration cap. Trigger: tasks too complex for single-flight execution or unbounded looping. Remediation: enforce vertical slicing / umbrella decomposition, tighten pre-ready self-audits, or refine termination bounds.
116
129
  - **Review Loop Burn**: Pull requests experiencing $\ge 3$ bounce rounds between autowork and peer-review. Trigger: ambiguous reviewer feedback, pedantic non-blocking findings, or brittle test assertions. Remediation: tighten reviewer trust/noise rules, calibrate reviewer severity thresholds, and engage human escalation via ping-pong caps.
117
130
  - **Feedback Loop Stagnation**: A downstream processing routine (e.g. measurement loop, verification, triage) records 0 intake (`filed: 0`) across $\ge 2$ consecutive runs while upstream PRs merge or roadmap/feature issues close in the same window. Trigger: overly broad or qualitative discovery sweeps that falsely claim all items are covered. Remediation: mandate deterministic per-issue matching tables and itemized reconciliation against upstream closed issues/PRs.
118
- 3. **Automated Remediation PRs**: The optimizer automatically drafts targeted PRs—locally for repo-specific rules/configs, or upstream via `npx jonah-fleet contribute` for fleet-wide prompt/workflow improvements.
131
+ - **Passive Order-Taking Anomaly ("Yes-Man Blindspot")**: The Ambiguity Gate trigger rate across intake runs in `autowork` or `triage` is <5% despite elevated PR review bounces ($\ge 2$) or high iteration usage ($\ge 35$), indicating agents are silently guessing requirements and building flawed implementations rather than interrogating underspecified issues. Trigger: agents defaulting to compliance over inquiry. Remediation: tighten Step 12 criteria in `autowork.md` and `triage.md` to force explicit questions on ambiguous terms, and feed problem cases into the automated ambiguity benchmark eval suite.
132
+ - **Speculative Runaway Waste**: An agent run consumed >50k tokens on an underspecified issue with 0 clarifying questions asked, and subsequently failed, bounced, or required post-merge rework. Remediation: tighten ambiguity gate checks and export the failing issue into the automated benchmark eval dataset.
133
+ 3. **Automated Remediation PRs & Benchmark Evals**: The optimizer automatically drafts targeted PRs—locally for repo-specific rules/configs, or upstream via `npx jonah-fleet contribute` for fleet-wide prompt/workflow improvements—and appends failure fixtures to the automated benchmark eval suite.
119
134
 
120
135
  ---
121
136
 
@@ -127,13 +142,14 @@ How external and human contributor pull requests are reconciled into the issue t
127
142
  2. **Autonomous Synthesis on Merge**: When `peer-review.md` approves a pull request lacking a `Closes #N` link, the review routine automatically synthesizes a tracking issue before merging:
128
143
  - Creates a tracked issue via `gh issue create` capturing the PR title, body, and deliverables.
129
144
  - Appends `Closes #<synthesized_issue_id>` to the PR description via `gh pr edit`.
130
- 3. **Audit & Single-Flight Lineage**: When the PR is squash-merged, GitHub's native issue closure kicks in and automatically closes the synthesized issue. This maintains 100% issue auditability, project board tracking, telemetry metrics, and release changelogs without imposing any friction on human contributors.
145
+ 3. **Audit & Single-Flight Lineage**: When the PR is squash-merged, `peer-review` explicitly closes the tracking issue (`gh issue close <ISSUE_NUMBER>`) to guarantee tracking closure, even when bot credentials or draft PR states bypass GitHub's native issue auto-close. This maintains 100% issue auditability, project board tracking, telemetry metrics, and release changelogs without leaving stray open issues.
131
146
 
132
147
  ---
133
148
 
134
149
  ## Fleet Telemetry & Weekly Token Economics
135
150
 
136
151
  Cross-repository telemetry aggregation and token tracking protocol:
152
+
137
153
  1. **Lightweight Routine Telemetry**: Every autonomous routine log (`.github/prompts/logs/*/*.md`) emits a structured `RoutineTelemetrySummary` capturing routine identity, duration, iterations, result, failure category, cost, and tokens.
138
154
  2. **Opt-in Emission Step**: GitHub Actions workflows (`autowork-cron.yml`, `trigger-review-routine.yml`, `prompt-optimizer-cron.yml`) run `jonah-fleet telemetry --emit` using optional `JONAH_FLEET_TELEMETRY_ENDPOINT` secrets.
139
155
  3. **Global 70% Budget Ceiling**: Tracks rolling 7-day spend across all fleet repositories against the global ceiling (~8.75M tokens/week).
@@ -152,24 +168,29 @@ How the fleet guarantees continuous review throughput, recovers from transient A
152
168
  1. **Failure Trapping & Transparency**: When a peer-review workflow session encounters an execution failure (e.g. LLM API rate limit / quota exhaustion or runner timeout), `trigger-review-routine.yml` traps the failure and posts an informational status notice on the PR. Failures are made immediately visible on the PR timeline rather than silently failing in the background.
153
169
  2. **Periodic Scan Sweep (Watchdog)**: `trigger-review-routine.yml` runs a scheduled 2-hour cron sweep (`cron: '45 */2 * * *'`) in Scan mode. Any open PR in `ready_for_review` state that was orphaned due to a transient API rate limit or missed event trigger is automatically picked up, evaluated, and resolved.
154
170
  3. **Interactive Re-triggering**: Any team member or author can immediately re-dispatch review by commenting `/review`, `/peer-review`, `/retrigger`, or `/re-review` on any open pull request, or manually triggering `trigger-review-routine.yml` via `workflow_dispatch`.
155
- 4. **Autowork Phase 1 Watchdog**: During Phase 1 convergence, Autowork actively identifies open ready PRs that have received no review feedback for $>2$ hours, re-triggering review via draft toggle or `/review` comment before picking up new work.
171
+ 4. **Autowork Phase 1 Watchdog**: During Phase 1 convergence, Autowork actively identifies open ready PRs that have received no review feedback for $>2$ hours, re-triggering review via draft toggle or `/review` comment before picking up new work. Review re-triggering is strictly conditioned on all CI checks having passed (`conclusion: SUCCESS`, `mergeStateStatus: CLEAN`) and is strictly prohibited if checks are in-progress or awaiting approval (`ACTION_REQUIRED`).
156
172
 
157
173
  ---
158
174
 
159
- ## Upstream Symphony Intel & Architectural Evaluation Framework
175
+ ## Upstream Symphony & Funes Intel & Architectural Evaluation Framework
160
176
 
161
- How changes and innovations from [openai/symphony](https://github.com/openai/symphony) are systematically audited and evaluated for incorporation into Jonah Fleet:
177
+ How changes and innovations from upstream ecosystems—[openai/symphony](https://github.com/openai/symphony) for issue-tracker orchestration and [huggingface/funes](https://github.com/huggingface/funes) for agent memory & session indexing—are systematically audited and evaluated for incorporation into Jonah Fleet:
162
178
 
163
- 1. **Automated Radar (`symphony-radar.yml`)**: A weekly scheduled workflow runs `.github/scripts/fetch-symphony-radar.js` to inspect upstream commits, specification updates (`SPEC.md`), and releases, generating an actionable digest issue in Jonah Fleet.
179
+ 1. **Automated Ecosystem Radar (`symphony-radar.yml`)**: A weekly scheduled workflow runs `.github/scripts/fetch-symphony-radar.js` to inspect upstream commits, specification updates (`SPEC.md`), and releases across `openai/symphony` (orchestration) and `huggingface/funes` (memory tooling), generating an actionable digest issue in Jonah Fleet.
164
180
  2. **The 4 Evaluation Layers**:
165
181
  - **Layer 1 (Zero-Daemon Invariant)**: Can the enhancement execute in ephemeral GitHub Actions and `agy` CLI sessions without requiring a 24/7 background server or persistent WebSocket?
166
182
  - **Layer 2 (Issue Tracker Abstraction)**: Does the pattern map cleanly to native GitHub Issues, labels, and PR checks without proprietary tracker dependencies?
167
183
  - **Layer 3 (Token & Cost Economy)**: Does the change optimize LLM spend within Jonah Fleet's 70% weekly token ceiling (~8.75M tokens)?
168
184
  - **Layer 4 (Multi-Repo Portability)**: Can the routine or skill be distributed via `agents-manifest.json` and `jonah-fleet sync` across any consumer repository?
169
- 3. **Classification & Action Protocol**:
170
- - **🟢 Category A (Adopt Directly)**: Security guardrails, claim lock invariants, reader/writer rules, prompt engineering optimizations.
171
- - **🟡 Category B (Adapt to Actions/CLI)**: Dynamic orchestrator pacing, backpressure controls, multi-stage review checks.
172
- - **🔴 Category C (Skip)**: Elixir/OTP supervision trees, BEAM memory tuning, proprietary runtime internals.
185
+ 3. **Agent Memory & Session Indexing Evaluation Dimensions (Funes Watch)**:
186
+ - **Zero-LLM Ingestion**: Deterministic parsing of agent session traces (`.jsonl`/Parquet) into LanceDB without spending LLM tokens from the weekly budget.
187
+ - **Pull-Based Memory Delivery**: Memory served strictly on demand via MCP (`recall`, `get`) to prevent prompt context bloat.
188
+ - **Cross-Session Provenance**: Verbatim turns and provenance retention instead of lossy summary drift.
189
+ - **Multi-Agent Portability**: Standardized trace ingestion across Antigravity CLI (`agy`), Claude Code, and Codex.
190
+ 4. **Classification & Action Protocol**:
191
+ - **🟢 Category A (Adopt Directly)**: Security guardrails, claim lock invariants, reader/writer rules, prompt engineering optimizations, deterministic zero-LLM indexing.
192
+ - **🟡 Category B (Adapt to Actions/CLI)**: Dynamic orchestrator pacing, backpressure controls, multi-stage review checks, pull-based memory MCP integrations.
193
+ - **🔴 Category C (Skip)**: Elixir/OTP supervision trees, BEAM memory tuning, proprietary runtime internals, always-loaded memory context dumps.
173
194
 
174
195
  ---
175
196
 
@@ -194,7 +215,7 @@ How agent routines are partitioned between cloud GitHub Actions (24/7 cloud runn
194
215
  2. **PR Priority Mirroring**: When Autowork opens a PR, it automatically mirrors the parent issue's priority labels (`priority/P0`..`P3`) onto the pull request so downstream review workflows can filter triggers without extra API overhead.
195
216
  3. **Workspace Isolation via Git Worktrees**: Local agents execute inside ephemeral worktrees (`.jonah-fleet/worktrees/<routine>-<issue>`) off `origin/main`, ensuring active editor sessions, uncommitted changes, and local branches are never modified or disturbed.
196
217
  4. **Local Claim Protocol**:
197
- - Local agent claims post: `🔒 Claimed by local autowork session (host: <hostname>) <timestamp>`.
218
+ - Local agent issue claims post: `🔒 Claimed by local autowork session (host: <hostname>) <timestamp>`.
219
+ - Local agent PR convergence claims post: `🔒 Addressing review findings by local autowork session (host: <hostname>) <timestamp>`.
198
220
  - Local processes trap `SIGINT`/`SIGTERM` to unassign claims and remove worktrees cleanly on exit.
199
- - Standard 6-hour stale-claim rule safely reclaims orphaned local claims if a machine powers down unexpectedly.
200
-
221
+ - Standard stale-claim rules (6h for issues, 2h for PRs) safely reclaim orphaned local claims if a machine powers down unexpectedly.
@@ -40,4 +40,16 @@ After completing (SUCCESS or FAILURE), write a log file to `.github/prompts/logs
40
40
  - Full execution trace with tool calls
41
41
  - If FAILURE: root cause, category, and suggested fix
42
42
 
43
- **Important**: Commit the log file directly to `main` and push — explicitly permitted for files under `.github/prompts/logs/**`. Follow the Log delivery fallback in `ORCHESTRATION.md` if direct push fails.
43
+ **Log Delivery Protocol & Invariants**:
44
+ - **Negative Rule**: NEVER commit or push run logs to a feature branch or open PR branch. Doing so emits a `pull_request: synchronize` event under bot credentials, triggering GitHub Actions workflow approval gates (`action_required`) that stall CI.
45
+ - **Mandatory `[skip ci]`**: Always append `[skip ci]` to any log commit message (e.g. `docs(log): record {routine-name} run {timestamp} [skip ci]`).
46
+ - **Direct Push to `main`**: Commit the log file directly to `main` and push — explicitly permitted for files under `.github/prompts/logs/**`:
47
+ ```bash
48
+ git checkout main
49
+ git pull origin main
50
+ git add .github/prompts/logs/{routine-name}/{timestamp}.md
51
+ git commit -m "docs(log): record {routine-name} run {timestamp} [skip ci]"
52
+ git push origin main
53
+ ```
54
+ Follow the Log delivery fallback in `ORCHESTRATION.md` if direct push fails.
55
+