@magnusekdahl/parallix 1.3.4 → 1.5.126

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 (227) hide show
  1. package/NOTICES +1423 -0
  2. package/README.md +76 -103
  3. package/build/asset-manifest.json +129 -0
  4. package/{config → build/config}/agents.json +4 -8
  5. package/build/manifest.sha256 +40 -0
  6. package/build/migrations/0001-initial-schema.sql +91 -0
  7. package/build/migrations/0002-import-history.sql +16 -0
  8. package/build/migrations/0003-board-lane-events.sql +72 -0
  9. package/build/migrations/0004-mission-aggregate.sql +151 -0
  10. package/build/migrations/0005-mission-external-task-ref.sql +18 -0
  11. package/build/migrations/0005-repository-scoped-session-markers.sql +47 -0
  12. package/build/migrations/0006-session-markers.sql +35 -0
  13. package/build/migrations/0007-usage-statistics-identity.sql +60 -0
  14. package/build/migrations/0008-review-workflow-state.sql +61 -0
  15. package/build/migrations/0009-review-gate-retries.sql +16 -0
  16. package/build/migrations/0010-review-events-and-implementer-response.sql +64 -0
  17. package/build/migrations/0011-board-lane-events-repository-id.sql +89 -0
  18. package/build/migrations/0012-review-hook-retries.sql +11 -0
  19. package/build/migrations/0013-usage-statistics-thoughts-tokens.sql +11 -0
  20. package/build/migrations/0014-remove-usage-closed.sql +33 -0
  21. package/build/migrations/0015-current-work-latest-per-mission.sql +5 -0
  22. package/build/migrations/0016-review-drop-retry-counters.sql +21 -0
  23. package/build/migrations/0017-retire-mission-import-provenance.sql +5 -0
  24. package/build/migrations/0018-adhoc-mission-counter.sql +19 -0
  25. package/build/migrations/0019-custom-agent-leases.sql +12 -0
  26. package/build/package.json +5 -0
  27. package/{prompts/act-on-review.md → build/prompts/act-on-review-core.md} +6 -4
  28. package/build/prompts/act-on-review.md +1 -0
  29. package/{prompts/draft.md → build/prompts/draft-core.md} +8 -1
  30. package/build/prompts/execute-core.md +37 -0
  31. package/build/prompts/execute.md +0 -0
  32. package/build/prompts/review-core.md +71 -0
  33. package/build/prompts/review.md +0 -0
  34. package/build/px.mjs +1226 -0
  35. package/build/px.mjs.map +7 -0
  36. package/build/sbom.json +2155 -0
  37. package/build/templates/mission-scaffold.md +61 -0
  38. package/build/web/assets/index-B8Hv3ORh.js +9 -0
  39. package/build/web/assets/index-DYY4ROtr.css +1 -0
  40. package/build/web/index.html +13 -0
  41. package/build/web/manifest.json +20 -0
  42. package/package.json +56 -30
  43. package/CHANGELOG.md +0 -140
  44. package/config/agents.local.json.template +0 -8
  45. package/config/integration-pipelines.json +0 -14
  46. package/config/state-map.json.template +0 -31
  47. package/config/workflow.config.schema.json +0 -110
  48. package/docs/adr/0031-ai-agent-instruction-boundary-and-command-floor.md +0 -114
  49. package/docs/adr/0032-mission-refinement-state-and-usage-budget-signals.md +0 -137
  50. package/docs/adr/0034-module-and-skill-invocation-model.md +0 -202
  51. package/docs/adr/0036-mission-sizing-and-dependency-wave-heuristics.md +0 -81
  52. package/docs/adr/0037-ai-workflow-coordination-architecture.md +0 -162
  53. package/docs/adr/0041-integration-pipeline-gates.md +0 -165
  54. package/docs/adr/0042-workflow-cli-color-rendering-approach.md +0 -106
  55. package/docs/adr/0043-git-target-resolution-strategy.md +0 -185
  56. package/docs/adr/0044-workflow-distribution-model.md +0 -277
  57. package/docs/adr/0045-parallax-branch-model.md +0 -182
  58. package/docs/adr/0046-npm-publish-process-and-security.md +0 -138
  59. package/docs/adr/0047-per-mission-change-size-budget.md +0 -161
  60. package/docs/adr/0048-fail-closed-harness-defense-against-agent-hallucinations.md +0 -161
  61. package/docs/adr/index.md +0 -23
  62. package/docs/agents.md +0 -212
  63. package/docs/authority-reference.md +0 -328
  64. package/docs/doc-standards.md +0 -89
  65. package/docs/forgejo-setup.md +0 -55
  66. package/docs/migration/extraction.md +0 -61
  67. package/docs/migration/task-classification.md +0 -36
  68. package/docs/operator-setup.md +0 -76
  69. package/docs/readme-rewrite-benchmark.md +0 -188
  70. package/docs/use-cases.md +0 -149
  71. package/examples/README.md +0 -62
  72. package/examples/run-enterprise-tarball-workflow-smoke.sh +0 -257
  73. package/examples/run-verify-env-smoke.sh +0 -40
  74. package/index.js +0 -262
  75. package/lib/README.md +0 -13
  76. package/lib/agents/agents.js +0 -880
  77. package/lib/agents/agents.ts +0 -978
  78. package/lib/agents/claude-telemetry.js +0 -232
  79. package/lib/agents/claude-telemetry.ts +0 -233
  80. package/lib/agents/claude.js +0 -152
  81. package/lib/agents/claude.ts +0 -158
  82. package/lib/agents/codex-telemetry.js +0 -227
  83. package/lib/agents/codex-telemetry.ts +0 -205
  84. package/lib/agents/codex.js +0 -213
  85. package/lib/agents/codex.ts +0 -238
  86. package/lib/agents/limit-hit.js +0 -259
  87. package/lib/agents/limit-hit.ts +0 -262
  88. package/lib/agents/mistral-telemetry.js +0 -140
  89. package/lib/agents/mistral-telemetry.ts +0 -159
  90. package/lib/agents/mistral.js +0 -174
  91. package/lib/agents/mistral.ts +0 -224
  92. package/lib/agents/opencode-export.js +0 -158
  93. package/lib/agents/opencode-export.ts +0 -160
  94. package/lib/agents/opencode-telemetry.js +0 -372
  95. package/lib/agents/opencode-telemetry.ts +0 -350
  96. package/lib/agents/opencode.js +0 -355
  97. package/lib/agents/opencode.ts +0 -372
  98. package/lib/agents/stage-telemetry.js +0 -41
  99. package/lib/agents/stage-telemetry.ts +0 -47
  100. package/lib/commands/active.js +0 -642
  101. package/lib/commands/active.ts +0 -707
  102. package/lib/commands/checkpoint.js +0 -102
  103. package/lib/commands/checkpoint.ts +0 -79
  104. package/lib/commands/config.js +0 -76
  105. package/lib/commands/config.ts +0 -52
  106. package/lib/commands/coverage-gate.js +0 -408
  107. package/lib/commands/coverage-gate.ts +0 -367
  108. package/lib/commands/diff.js +0 -151
  109. package/lib/commands/diff.ts +0 -130
  110. package/lib/commands/draft.js +0 -920
  111. package/lib/commands/draft.ts +0 -1026
  112. package/lib/commands/handoff.js +0 -685
  113. package/lib/commands/handoff.ts +0 -705
  114. package/lib/commands/integrate.js +0 -1612
  115. package/lib/commands/integrate.ts +0 -1724
  116. package/lib/commands/mission-start.js +0 -313
  117. package/lib/commands/mission-start.ts +0 -268
  118. package/lib/commands/rebase.js +0 -667
  119. package/lib/commands/rebase.ts +0 -639
  120. package/lib/commands/repair-handoff.js +0 -363
  121. package/lib/commands/repair-handoff.ts +0 -373
  122. package/lib/commands/resolve-conflict.js +0 -137
  123. package/lib/commands/resolve-conflict.ts +0 -117
  124. package/lib/commands/review.js +0 -18
  125. package/lib/commands/review.ts +0 -19
  126. package/lib/commands/setup-review.js +0 -18
  127. package/lib/commands/setup-review.ts +0 -19
  128. package/lib/commands/setup.js +0 -9
  129. package/lib/commands/setup.ts +0 -7
  130. package/lib/commands/stats-backfill.js +0 -448
  131. package/lib/commands/stats-backfill.ts +0 -423
  132. package/lib/commands/stats.js +0 -2016
  133. package/lib/commands/stats.ts +0 -2135
  134. package/lib/commands/status.js +0 -246
  135. package/lib/commands/status.ts +0 -224
  136. package/lib/commands/verify.js +0 -12
  137. package/lib/commands/verify.ts +0 -7
  138. package/lib/core/fmt.js +0 -178
  139. package/lib/core/fmt.ts +0 -189
  140. package/lib/core/git.js +0 -140
  141. package/lib/core/git.ts +0 -146
  142. package/lib/core/gitignore.js +0 -73
  143. package/lib/core/gitignore.ts +0 -108
  144. package/lib/core/mission-utils.js +0 -1058
  145. package/lib/core/mission-utils.ts +0 -998
  146. package/lib/core/nels.js +0 -184
  147. package/lib/core/nels.ts +0 -189
  148. package/lib/core/persistent-data-migration.js +0 -285
  149. package/lib/core/persistent-data-migration.ts +0 -257
  150. package/lib/core/product-config.js +0 -460
  151. package/lib/core/product-config.ts +0 -518
  152. package/lib/core/runtime-matrix.js +0 -49
  153. package/lib/core/runtime-matrix.ts +0 -84
  154. package/lib/core/spawn-tee.js +0 -160
  155. package/lib/core/spawn-tee.ts +0 -202
  156. package/lib/core/state-map.js +0 -108
  157. package/lib/core/state-map.ts +0 -115
  158. package/lib/core/storage.js +0 -151
  159. package/lib/core/storage.ts +0 -182
  160. package/lib/core/subagent-limit.js +0 -27
  161. package/lib/core/subagent-limit.ts +0 -25
  162. package/lib/core/verification.js +0 -176
  163. package/lib/core/verification.ts +0 -200
  164. package/lib/index.js +0 -160
  165. package/lib/index.ts +0 -134
  166. package/lib/review/rebase.js +0 -168
  167. package/lib/review/rebase.ts +0 -188
  168. package/lib/review/review-adapter.js +0 -234
  169. package/lib/review/review-adapter.ts +0 -198
  170. package/lib/review/review-artifacts.js +0 -542
  171. package/lib/review/review-artifacts.ts +0 -622
  172. package/lib/review/review-commands.js +0 -1318
  173. package/lib/review/review-commands.ts +0 -1579
  174. package/lib/review/review-events.js +0 -716
  175. package/lib/review/review-events.ts +0 -954
  176. package/lib/review/review-loop.js +0 -1271
  177. package/lib/review/review-loop.ts +0 -1493
  178. package/lib/review/review-polling.js +0 -132
  179. package/lib/review/review-polling.ts +0 -194
  180. package/lib/review/review-prompts.js +0 -212
  181. package/lib/review/review-prompts.ts +0 -186
  182. package/lib/review/review-state.js +0 -325
  183. package/lib/review/review-state.ts +0 -353
  184. package/lib/review/review.js +0 -126
  185. package/lib/review/review.ts +0 -143
  186. package/lib/tools/backlog.js +0 -848
  187. package/lib/tools/backlog.ts +0 -835
  188. package/lib/tools/forgejo.js +0 -1659
  189. package/lib/tools/forgejo.ts +0 -1793
  190. package/lib/tools/gatekeeper.js +0 -134
  191. package/lib/tools/gatekeeper.ts +0 -124
  192. package/lib/tools/redgreen.js +0 -239
  193. package/lib/tools/redgreen.ts +0 -221
  194. package/lib/tools/sessions.js +0 -87
  195. package/lib/tools/sessions.ts +0 -81
  196. package/lib/tools/setup-review.js +0 -1083
  197. package/lib/tools/setup-review.ts +0 -1152
  198. package/prompts/act-on-review-verbose.md +0 -20
  199. package/prompts/execute.md +0 -24
  200. package/prompts/portfolio.md +0 -30
  201. package/prompts/review-verbose.md +0 -36
  202. package/prompts/review.md +0 -50
  203. package/px.js +0 -268
  204. package/templates/AGENTS-snippet.md +0 -14
  205. package/templates/AGENTS.md.template +0 -34
  206. package/templates/CLAUDE.md.template +0 -27
  207. package/templates/CODEX.md.template +0 -38
  208. package/templates/MISTRAL.md.template +0 -24
  209. package/templates/claude-commands/act-on-review.md +0 -3
  210. package/templates/claude-commands/area-review.md +0 -3
  211. package/templates/claude-commands/draft.md +0 -6
  212. package/templates/claude-commands/execute.md +0 -6
  213. package/templates/claude-commands/integrate.md +0 -4
  214. package/templates/claude-commands/portfolio.md +0 -5
  215. package/templates/claude-commands/review.md +0 -4
  216. package/templates/codex/config.toml +0 -6
  217. package/templates/mission-scaffold.md +0 -39
  218. package/templates/vibe/skills/act-on-review/SKILL.md +0 -16
  219. package/templates/vibe/skills/area-review/SKILL.md +0 -16
  220. package/templates/vibe/skills/draft/SKILL.md +0 -16
  221. package/templates/vibe/skills/execute/SKILL.md +0 -16
  222. package/templates/vibe/skills/integrate/SKILL.md +0 -16
  223. package/templates/vibe/skills/portfolio/SKILL.md +0 -21
  224. package/templates/vibe/skills/review/SKILL.md +0 -16
  225. package/tools/setup-forgejo-docker.sh +0 -87
  226. /package/{config → build/config}/state-map.json +0 -0
  227. /package/{data/.gitkeep → build/prompts/draft.md} +0 -0
package/README.md CHANGED
@@ -1,45 +1,52 @@
1
1
  # Parallix
2
2
 
3
- **Parallix is a local-first Git workflow CLI for running AI coding agents in isolated, reviewable missions instead of letting one long-lived agent session mutate your main checkout.**
3
+ **Parallix is an agent-agnostic, local-first workflow that puts a trust ladder around AI coding work: separate review that prefers a different agent family when one is available, repository-owned verification where you configure a gate, Linux Bubblewrap confinement when available (falling back to an agent's native sandbox, or blocking until explicit consent when neither exists), and a human-owned squash merge.**
4
4
 
5
- It is for engineers who already use Git and terminal-first coding agents such as Claude Code, Codex, OpenCode/custom, and Vibe/Mistral, and want branch isolation, resumable checkpoints, agent-family failover, and a forced review step without building that harness by hand.
5
+ Coding agents become much more useful when you can run several pieces of work at once. But simply starting more agents quickly creates a new bottleneck: they compete for the same working tree, lose context across long runs, hit provider limits, and produce more changes than one engineer can safely supervise and integrate.
6
6
 
7
- It wraps your existing AI coding workflow without replacing it: each mission gets its own branch and worktree, long runs checkpoint to markdown, review is a separate phase, and integration still goes through your repo's own verification command. A human still chooses the mission, launches each phase, reads the output, and decides what lands.
7
+ Parallix is the delivery layer around those agents. It gives every piece of work an isolated mission, lets multiple missions progress concurrently, preserves execution across sessions, separates implementation from review, runs repository-owned verification, and leaves the final integration decision with the human operator. Parallel Git isolation is how that trust ladder can operate across concurrent missions instead of one shared checkout.
8
8
 
9
- **The first concrete thing you can do** is install the CLI and run one complete mission:
9
+ Parallix is deliberately not tied to one agent vendor or model family. The same mission workflow can use different agent families for drafting, implementation, and review, including commercially hosted agents, locally hosted AI, and custom runtimes.
10
+
11
+ ## Install
12
+
13
+ For Bash, install Parallix and load its bundled worktree-switching integration
14
+ in one step:
10
15
 
11
16
  ```sh
12
- npm install -g @magnusekdahl/parallix
13
- px draft "create a hello world program"
14
- px active
15
- px integrate
17
+ npm install -g @magnusekdahl/parallix && eval "$(px shell-init bash)"
16
18
  ```
17
19
 
18
- That path shows the whole value: isolate the work on its own branch and worktree, let an agent execute it with checkpoints, autorun a separate review phase, and only then integrate it back when you are satisfied with the result.
20
+ **The first concrete thing you can do** is run one complete mission:
21
+
22
+ [![Terminal demonstration showing a new directory, mission drafting, mission inspection, autonomous review, diff inspection, and operator integration](https://raw.githubusercontent.com/oxtan-maker/parallix/main/docs/assets/first-value-demo.gif)](https://raw.githubusercontent.com/oxtan-maker/parallix/main/docs/assets/first-value-demo.gif)
23
+
24
+ The operator inspects the drafted mission before execution, then inspects the reviewed diff and decides whether to run `px integrate`. Parallix does not merge autonomously.
25
+
19
26
 
20
27
  ## Why Parallix?
21
28
 
22
- Running AI coding agents one session at a time hits a ceiling fast:
29
+ The main reason to use coding agents is leverage: while one agent is working, another can be working on something else. The useful ceiling is therefore not how fast one agent can type code, but **how much trustworthy work one engineer can keep moving in parallel**, and running one session at a time leaves most of that unused. Simply starting several agents, however, creates a new set of coordination problems:
23
30
 
24
- - **One working tree, many agents.** Point two agents at the same checkout and they fight over the index, the branch, and uncommitted files. You either serialize them — one idle while the other runs — or hand-manage `git worktree` and branch names yourself.
31
+ - **One working tree, many agents.** Point two agents at the same checkout and they fight over the index, the branch, and uncommitted files. You either serialize them — throwing away the parallelism — or hand-manage `git worktree` and branch names yourself.
25
32
  - **Runs die on usage caps.** An agent prints "usage limit reached", the run stops, and you babysit it: restart later or hand-switch to a different model.
26
33
  - **Long tasks lose their place.** A crashed or context-exhausted agent leaves you reconstructing what was already done by re-reading diffs.
27
34
  - **The author grades its own homework.** The agent that wrote the change also declares it done. Nobody independent looks before it lands.
28
35
 
29
- Parallix is a mission-based development workflow that addresses each of these directly, with the mechanics living in tested code rather than in prompts. It is not another agent or model — it is the operator-owned layer around the agents you already use.
36
+ Parallix is a mission-based development workflow that addresses each of these directly so parallel agents can translate into actual delivery throughput. The mechanics live in tested code rather than in prompts. It is not another agent or model — it is the operator-owned layer around the agents you already use.
30
37
 
31
38
  ## What it does
32
39
 
33
- Each capability below is tied to a use case in [`docs/use-cases.md`](docs/use-cases.md), with the confidence level (Confirmed / Partial) carried through honestly.
34
-
35
40
  - **Run several AI coding agents on one repo without clobbering each other**. Every mission gets its own `mission/<slug>` branch and its own sibling git worktree (`../<repo>-<slug>`) automatically, so N agents make progress independently and each lands by squash-merge.
36
- - **Fail over automatically when an agent hits its usage limit** *(UC-2 — Confirmed).* Per-family limit messages are pattern-detected; the agent family is written to a timed blocklist and the run retries with the next eligible, unblocked family. Only when all are exhausted does it fail loudly. Agent usage limits stop a single session; they don't have to stop the mission.
37
- - **Resume a long mission deterministically**. Every checkpoint runs the gate, commits a checkpoint document with a literal `Next action:` line, and pushes it — so a later session or a different agent resumes from a written instruction, not a guess.
38
- - **Force a second, preferentially-different coding agent review before merge** *(UC-4 — Partial).* Review is a separate step whose reviewer selection excludes the implementer to prefer a different agent family, and a self-approval is code-blocked at the provider. It falls back to the same family when no other agent is runnable, so this forces a second review *attempt* — it does not guarantee a different reviewer.
39
- - **Publish work to a Forgejo reviewer surface without making Forgejo your branch authority**. When the review provider is enabled, Parallix syncs the local baseline to a dedicated `review` remote and opens or updates the PR there; if Forgejo is disabled, the branch/worktree flow still runs locally.
41
+ - **Use different agent families — including local AI — in the same workflow**. Parallix owns the mission lifecycle rather than one vendor's agent framework. Drafting, implementation, and review can use different eligible families, and custom/local runtimes participate in the same branch, checkpoint, review, and integration model.
42
+ - **Fail over automatically when an agent hits its usage limit**. Per-family limit messages are pattern-detected; the agent family is written to a timed blocklist and the run retries with the next eligible, unblocked family. Only when all are exhausted does it fail loudly. Agent usage limits stop a single session; they don't have to stop the mission.
43
+ - **Resume a long mission deterministically**. The execution agent records completed checkpoints with evidence and a concrete next action, and commits them locally, so a later session or a different agent can resume from the recorded progress.
44
+ - **Force a second, preferentially-different coding agent review before merge**. Review is a separate step whose reviewer selection excludes the implementer to prefer a different agent family, and a self-approval is code-blocked at the provider. It falls back to the same family when no other agent is runnable, so this forces a second review *attempt* — it only guarantees a different reviewer when one is available.
45
+ - **Publish work to a Forgejo reviewer surface without making Forgejo your branch authority**. When the review provider is enabled, Parallix syncs the local baseline to a dedicated `review` remote running locally and opens or updates the PR there; if Forgejo is disabled, the branch/worktree flow still runs without it.
40
46
  - **Use a repo-local Graphify knowledge graph for smaller codebase context pulls**. In repositories where the operator has already installed the Graphify skill, the workflow keeps `graphify-out/` isolated per worktree and refreshes it during review/integration, while the installed agent guidance steers codebase questions toward `graphify query` / `path` / `explain` before full reports or raw grep. That reduces token-usage.
41
47
  - **Keep your existing verification gate instead of agent self-reporting**. The gate is a configured shell command with a no-op default: declare your existing `make` / `npm` / script command in `workflow.config.json` and it runs verbatim; declare nothing and verification is a documented no-op pass, not an invented gate.
42
- - **See which agent family actually pays off across every repo one runtime drives** *(UC-6 — Partial).* A single operator-owned `stats.csv` accumulates per-agent usage telemetry across repositories. Token-cost comparison is complete today only for the families with structured telemetry (codex, claude, opencode/local AI/custom); vibe/mistral record honest zeros by design.
48
+ - **Confine supported agent processes with Bubblewrap on Linux**. When Bubblewrap is available, Parallix mounts the host filesystem read-only and selectively grants write access required by the current mission. Implementation gets its mission worktree and required Git state writable; review keeps the worktree read-only. If Bubblewrap is unavailable, Parallix falls back to the agent's own native sandbox where the family exposes one (e.g. Codex `--sandbox`, Qwen `-s`), otherwise it blocks the mutating launch until the operator explicitly consents to run unsandboxed — no silent fallback.
49
+ - **Evaluate which agent family actually pays off across every repo one runtime drives**. A single operator-owned measurement database (`<PARALLIX_HOME>/parallix.db`) accumulates per-agent usage telemetry across repositories.
43
50
 
44
51
  ## The core workflow
45
52
 
@@ -53,76 +60,23 @@ backlog → draft → active → review → approved → done
53
60
  checkpoints gates cleanup
54
61
  ```
55
62
 
56
- In practice: a human drafts a mission, Parallix creates the branch and worktree, an agent runs and writes checkpoints, a verification gate runs, a second (preferentially different) agent reviews the diff, and only then is the work integrated back to your primary branch by squash-merge. Blocking review findings loop back to `active` on the same branch and PR.
57
-
58
- ## Quick start
59
-
60
- Install from the public npm registry and run a complete mission:
61
-
62
- ```sh
63
- npm install -g @magnusekdahl/parallix
64
- px draft "hello world"
65
- px active
66
- px integrate
67
- ```
68
-
69
- `px draft` creates the mission branch, sibling worktree, mission file, and task record. Then `cd` into the mission worktree and run `px active` and `px integrate` there with no slug; the CLI infers the mission from the current branch/worktree.
70
-
71
- Other draft entry points are available when you need them:
72
-
73
- ```sh
74
- # Draft from the current repository directory name
75
- px draft .
76
-
77
- # Draft from an existing structured task file
78
- px draft task-001
79
- ```
80
-
81
- Optional but useful: run `px setup` if you want help creating `workflow.config.json`, appending workflow entries to `.gitignore`, or bootstrapping Forgejo review wiring.
82
-
83
- Optional but useful: add `px shell-init` to your shell rc so mission transitions can `cd` your terminal into the next worktree:
84
-
85
- ```sh
86
- echo 'eval "$(px shell-init bash)"' >> ~/.bashrc
87
- ```
88
-
89
- Alternatively, install from a local tarball (useful for development or when offline):
90
-
91
- ```sh
92
- npm pack
93
- npm install -g ./magnus-parallix-*.tgz
94
- ```
95
-
96
- Parallix runs on built-in defaults without setup. `px setup` becomes useful when you want to configure your verification command, customize the mission layout, or bootstrap the Forgejo review surface (repo, token files, and `review` remote). Forgejo is the PR viewer and publication surface here, not the authority for local branch ancestry or integration.
97
-
98
- `px draft` now works without a pre-existing task file. If the input is free text or a directory path, Parallix creates a synthetic markdown task with classification `unknown` so the later phases, stats, and preflight checks still have a consistent record to work from.
99
-
100
- If you already use Backlog.md-style task files, that still works. `px draft task-001` remains valid, and Parallix will use the existing task metadata and classification when it is present.
101
-
102
- ## Optional task files
63
+ In practice: a human drafts a mission, Parallix creates the branch and worktree, an agent runs and writes checkpoints, a configured verification gate runs, a second agent reviews the diff, and only then is the work integrated back to your primary branch by squash-merge. Review uses a different agent family when one is available; when none is runnable, it falls back to the same family as a second review attempt. Blocking review findings loop back to `active` on the same branch and PR.
103
64
 
104
- Structured markdown task files are now optional. They are still useful when you want stable IDs, explicit labels, or an external task-management flow.
65
+ ## Defence in depth
105
66
 
106
- ```md
107
- backlog/tasks/task-001 - my-first-task.md
108
- ---
109
- id: TASK-001
110
- title: my first task
111
- status: backlog
112
- assignee: []
113
- labels: ["user_value"]
114
- dependencies: []
115
- ---
116
- ```
67
+ Running several agents in parallel is only worth doing if you can trust what comes back. Parallix combines isolation, mission-specific checks, separate review, and automatic repair so confidence comes from checked results throughout delivery.
117
68
 
118
- Then run the mission by slug:
69
+ 1. **Isolation.** Every mission gets its own branch and sibling worktree, so parallel agents do not compete over the same working tree, index, or branch.
70
+ 2. **Confinement.** On Linux with Bubblewrap enabled, supported agent processes see a read-only host filesystem, with write access limited to the mission worktree and the Git, temporary, and agent-state paths needed for the current step. During review, the mission worktree is read-only too.
71
+ 3. **Your existing checks at lifecycle transitions.** Connect your test pyramid by assigning existing test commands to the stages where you want them to run. For example, run fast unit tests and static analysis before a mission moves from `active` to `review`, and reserve expensive integration and end-to-end suites for the final merge. Parallix runs the selected commands and blocks progress when they fail. The [lifecycle check configuration](docs/config.md#lifecycle-gates) shows how to connect those commands to each stage.
72
+ 4. **Defences tailored to the mission.** Parallix instructs the drafting agent to investigate the codebase and mission, define concrete success criteria, and select suitable verification commands. For bug fixes, it calls for a failing reproduction test before implementation. The mission's declared checks run before it moves from `active` to `review`, turning the plan into checks on the delivery.
73
+ 5. **Evidence for review.** Before a mission moves from `active` to `review`, Parallix checks that the final checkpoint connects success criteria to concrete references, such as tests or runnable repository commands. Missing mission or checkpoint documents block that transition. Reviewers get a stated goal and supporting evidence to examine; generic claims such as “verified” are insufficient.
74
+ 6. **Separate review.** A second agent reviews the delivery, using a different agent family when one is available. The pull request author cannot formally approve their own work.
75
+ 7. **Automatic, focused repair.** When checks detect a repairable delivery failure, Parallix sends the agent back with a tight prompt containing the specific failure, captured output, and the repair required. It reruns the failing check to confirm the fix. Retries are bounded, and unresolved failures are surfaced to the operator.
76
+ 8. **Validate the final tree before merge.** When you choose to integrate an approved mission, Parallix runs the checks you assigned to integration against the exact tree about to land. This is where the broader tests from your pyramid check that the change works with the rest of the system. A failing check stops the merge.
77
+ 9. **Operator decision.** Nothing merges itself. A human reads the diff and decides whether to integrate at all.
119
78
 
120
- ```sh
121
- px draft task-001
122
- px active task-001
123
- ```
124
-
125
- Optional but useful: install the Graphify skill once per supported agent family if you want graph-backed codebase navigation in long missions and reviews. This is not a hard requirement like having a task file for `px draft`; when Graphify is not installed, Parallix skips graph updates and continues the workflow. The operator setup is documented separately because it is a workstation capability, not a minimum install step.
79
+ Repository checks and mission-specific defences complement separate review: passing a command or finding an evidence reference does not prove the change meets its goal. Parallix runs the checks your repository and mission declare; the operator retains the final judgement. See [use cases](docs/use-cases.md) for supported capabilities.
126
80
 
127
81
  ## Example
128
82
 
@@ -151,22 +105,37 @@ px active task-042
151
105
  px integrate task-042
152
106
  ```
153
107
 
154
- The verification gate that runs at each phase is whatever you declare in `workflow.config.json`. In this repo that dispatcher is `./scripts/verify-local.sh {{area}}`: earlier phases use the fast general suite, while `px integrate` calls `verify-local.sh integrate`, which resolves repo-side integration gates from `config/integration-pipelines.json` and runs the stricter pre-merge checks there.
108
+ Parallix runs on built-in defaults with no config file; `px setup` writes one when you want to declare your own verification gate or mission layout. See the [configuration reference](docs/config.md) for the supported overrides and their defaults. The verification gate that runs at each phase is whatever you declare in `workflow.config.json`. In this repo that dispatcher is `./scripts/verify-local.sh {{area}}`: earlier phases use the fast general suite, while `px integrate` calls `verify-local.sh integrate`, which resolves repo-side integration gates from `config/integration-pipelines.json` and runs the stricter pre-merge checks there.
109
+
110
+ When a mission goes wrong and you want to start it over, `px cancel <slug> --yes`
111
+ retires it: it deletes that one mission's lifecycle rows from the operator
112
+ database, archives its Backlog task file so the card leaves the board, keeps its
113
+ recorded usage and cost, and prints the
114
+ `git worktree remove ... && git branch -D ...` cleanup for you to run yourself.
115
+ The same action sits behind a confirmation on the TUI board (`Shift+X`) and on
116
+ the web board (the `cancel ✕` button). See the [board guide](docs/tui-board.md)
117
+ for the details.
118
+
119
+ ## Optional integrations
120
+
121
+ Both are optional integrations, and each one is wired independently of the other.
122
+
123
+ **Backlog.md.** Point `px draft` at a task key and Parallix adopts the existing record instead of creating one: it reads the ID, title, labels, and classification from `backlog/tasks/<slug> - <title>.md` and carries them through the mission. As the mission moves, Parallix writes the task's `status` frontmatter and, on completion, moves the file into `backlog/completed/`, so the board reflects mission state without a second bookkeeping step. Drafting from free text instead produces an equivalent synthetic record, so nothing downstream depends on you keeping task files.
124
+
125
+ **Forgejo.** Review publication is off until you opt in. If you want its reviewer surface, `px setup` can bootstrap the review repository, agent tokens, and the `review` git remote; otherwise the branch/worktree workflow runs without Forgejo. Forgejo user accounts must already exist before that optional setup; see [`docs/forgejo-setup.md`](docs/forgejo-setup.md) for account creation, token layout, and running a local instance.
155
126
 
156
127
  ## Use cases
157
128
 
158
- The full evidence-backed inventory is in [`docs/use-cases.md`](docs/use-cases.md). The README focuses on the three claims that are best supported by the current code and retrospective data:
129
+ The durable capability guide and confidence boundaries are in [`docs/use-cases.md`](docs/use-cases.md).
159
130
 
160
- 1. **Parallel multi-agent execution (UC-1).** The isolated worktree-per-mission model is the *specific* mechanic an internal retrospective measured as the only configuration to beat a human baseline. Depending on whether you frame output as direct user-value missions or total completed missions in an already-productized setup, the observed gain ranges from roughly **+57%** to about **+1,280%**.
161
- 2. **Usage-limit auto-failover (UC-2).** Family-specific limit detection → timed blocklist → retry-next-eligible is a tested control loop, not a retry button.
162
- 3. **Second review gate (UC-4, Partial).** A self-approval is code-blocked and reviewer selection excludes the implementer family — forcing a second review *attempt* by a preferentially different agent, with an honest same-family fallback.
131
+ An **internal retrospective, not external evidence,** measured the isolated worktree-per-mission model as the only configuration to beat a human baseline. Depending on whether you frame output as direct user-value missions or total completed missions in an already-productized setup, the observed gain ranges from roughly **+57%** to about **an order of magnitude**.
163
132
 
164
133
  ## What Parallix is not
165
134
 
166
- - **Not a model and not an AI coding agent.** It does not generate code itself. It coordinates the agents and models you already use (Claude Code, Codex, OpenCode/custom, and Vibe/Mistral).
167
- - **Not an IDE or an editor plugin.** It is a CLI workflow harness around Git and your existing toolchain — there is no UI, no autocomplete, no inline suggestions.
135
+ - **Not a model and not an AI coding agent.** It does not generate code itself. It is agent-agnostic infrastructure around the agents and models you already use, including hosted and local AI.
136
+ - **Not an IDE or an editor plugin.** It is a CLI workflow harness around Git and your existing toolchain. It has a terminal mission board, but no code editor, autocomplete, or inline suggestions.
168
137
  - **Not a magic autonomous engineer.** This is a human-in-the-loop workflow. Nothing merges itself, and the safe operating model is that a human decides what to queue, when to run `px active`, how to respond to review findings, and whether `px integrate` should happen at all.
169
- - **Not a guaranteed throughput multiplier.** The observed gain varies with context. In the data we have, it ranges from roughly **+57%** on strict user-value output to about **+1,280%** on total completed-mission throughput in a later productized setup. Those are both real observations, but they are different mission-output measures and should be labeled that way.
138
+ - **Not a guaranteed throughput multiplier.** The observed gain varies with context.
170
139
 
171
140
  ## Current status
172
141
 
@@ -174,35 +143,39 @@ The full evidence-backed inventory is in [`docs/use-cases.md`](docs/use-cases.md
174
143
 
175
144
  - **Distribution:** Published to the public npm registry as `@magnusekdahl/parallix`. Local tarball install (`npm pack`) is also supported. No Homebrew, no Docker image, no standalone binary, and no CI/release automation today.
176
145
  - **Review surface:** Forgejo is supported as the hosted PR viewer/publication surface, but the workflow remains local-first and can run without Forgejo when that provider is disabled.
177
- - **Versioning:** `CHANGELOG.md` is the versioning authority; PATCH bumps are the release discipline.
178
146
  - **Telemetry:** structured token/usage telemetry exists for the codex and claude families; the local-custom and mistral paths record honest zeros by design rather than fabricated numbers.
179
147
  - **Graphify:** the knowledge-graph path is supported for codex, claude, and custom/opencode after one-time operator setup. It is optional, not a workflow prerequisite. The credible claim today is better-scoped context retrieval, not a proven token-savings benchmark.
180
- - **Review coverage** is best-effort, not guaranteed — see UC-4's caveats in [`docs/use-cases.md`](docs/use-cases.md).
181
148
 
182
149
  This is a tool for a local-first developer workflow on one machine, driven by an operator who reads the caveats.
183
150
 
184
151
  ## Documentation
185
152
 
186
- - [`docs/use-cases.md`](docs/use-cases.md) — evidence-backed use-case inventory with confidence levels and red-team analysis (primary source of truth for what Parallix actually does today).
187
- - [`docs/authority-reference.md`](docs/authority-reference.md) — the internal operator reference: workflow modes, the authority model, agent selection, the layered validation model, checkpoint model, state mapping, command aliases, stats, persistent operator data, and the full public-distribution story.
153
+ - [`docs/use-cases.md`](docs/use-cases.md) — durable capability identities, confidence levels, and positioning boundaries.
188
154
  - [`docs/forgejo-setup.md`](docs/forgejo-setup.md) — how the Forgejo review surface, tokens, and `review` remote are bootstrapped.
189
155
  - [`docs/operator-setup.md`](docs/operator-setup.md) — one-time Graphify skill installation for codex, claude, and custom/opencode.
190
- - [`docs/readme-rewrite-benchmark.md`](docs/readme-rewrite-benchmark.md) — how comparable developer-tool READMEs are structured, and the decisions behind this one.
191
156
  - [`AGENTS.md`](AGENTS.md) — hard rules, restricted actions, and verification entrypoints.
192
- - `docs/adr/` — architecture decision records, including ADR 0044 (distribution model).
157
+ - `docs/adr/` — architecture decision records, including ADR 0044 (distribution model) and ADR 0048 (the fail-closed harness defence inventory cited above).
193
158
 
194
159
  ## Development
195
160
 
196
161
  ```sh
197
- npm test # FORCE_COLOR=0 node --test test/*.test.js
162
+ npm test
163
+ npm run test:integration # real process, Git/worktree, package, and local-network boundary coverage
164
+ npm run test:codeql # CodeQL SAST scan (javascript-typescript security/code-scanning), run manually; not part of local integration
198
165
  ```
199
166
 
200
- The test suite is the verification gate this repo declares in `workflow.config.json`. Run it before integrating any change. Contributions follow the same mission lifecycle the tool itself runs: branch, worktree, checkpoints, a second review, and a passing gate before integration.
167
+ The test suite is the verification gate this repo declares in `workflow.config.json`. Run it before integrating any change. Contributions follow the same mission lifecycle the tool itself runs: branch, worktree, checkpoints, a second review, and a passing gate before integration. To exercise the packaged artifact the way a user receives it: `npm pack && npm install -g ./magnusekdahl-parallix-*.tgz`.
201
168
 
202
- If you are developing Parallix itself from a checkout, the repo-root dispatcher is:
169
+ If you are developing Parallix itself from a checkout, use the built runtime
170
+ after `npm run build`, or run the TypeScript entry directly with the development
171
+ script:
203
172
 
204
173
  ```sh
205
- node index.js <command>
174
+ npm run build
175
+ node build/px.mjs <command>
176
+
177
+ # Direct-source development path
178
+ npm run dev -- <command>
206
179
  ```
207
180
 
208
181
  ## License
@@ -0,0 +1,129 @@
1
+ {
2
+ "version": 1,
3
+ "assets": [
4
+ {
5
+ "key": "config/agents.json",
6
+ "sha256": "c380d909ddf757f9bbe5136d79652a19396ae69068d144e2b6031ed4b7fb4b78"
7
+ },
8
+ {
9
+ "key": "config/state-map.json",
10
+ "sha256": "6a4ec47387d1240e32967dc8e4ce54a15d69df2676b7a96ff72baafe996fef7d"
11
+ },
12
+ {
13
+ "key": "prompts/act-on-review-core.md",
14
+ "sha256": "c7931a2b30343eb509e6d06c8c71d6f0591fbe9bca9029ae8f88781858c8e26c"
15
+ },
16
+ {
17
+ "key": "prompts/act-on-review.md",
18
+ "sha256": "8f06b68b92c8cfc6f3ee0ff7a1e258258c1a1c2220bdfe5b1a3d5fbaab6befeb"
19
+ },
20
+ {
21
+ "key": "prompts/draft-core.md",
22
+ "sha256": "f5565ff259a2c830e8853573f7a774fb2ce21e1631d457a025d63ebcf9f4ea6a"
23
+ },
24
+ {
25
+ "key": "prompts/draft.md",
26
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
27
+ },
28
+ {
29
+ "key": "prompts/execute-core.md",
30
+ "sha256": "51b16691ee421a55c5a2da30e62fb8e41c910a5e1e3a16ea45ed6f67aa5e031f"
31
+ },
32
+ {
33
+ "key": "prompts/execute.md",
34
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
35
+ },
36
+ {
37
+ "key": "prompts/review-core.md",
38
+ "sha256": "7be9123246e77e669d0bbd7c1f6c6f436f58af0c216cb4ee43fd82824b344bbf"
39
+ },
40
+ {
41
+ "key": "prompts/review.md",
42
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
43
+ },
44
+ {
45
+ "key": "templates/mission-scaffold.md",
46
+ "sha256": "ce7f4aa6eb9e684434f243a64018d4dfa9962348bfdb5d59881783326cc0ec90"
47
+ },
48
+ {
49
+ "key": "migrations/0001-initial-schema.sql",
50
+ "sha256": "30a76fa3839753ddbfe312428dd1b7285ac1b8d0bd678fc79c79018ec6154f69"
51
+ },
52
+ {
53
+ "key": "migrations/0002-import-history.sql",
54
+ "sha256": "a8a0febfb4e448a11a5a16b2227d5cc1959bf4594aadd6fd65ea764283020edd"
55
+ },
56
+ {
57
+ "key": "migrations/0003-board-lane-events.sql",
58
+ "sha256": "d4080e33cb1a77e504188dbdafa0765ddf3391d99e1d81a76ab3a5ce3b9b40f2"
59
+ },
60
+ {
61
+ "key": "migrations/0004-mission-aggregate.sql",
62
+ "sha256": "27a88fa469f0197b9c54a0c1878c3fa3339061c15eb1b1b1928b72249ac7c67d"
63
+ },
64
+ {
65
+ "key": "migrations/0005-mission-external-task-ref.sql",
66
+ "sha256": "c92e3addb896b7f93221e70bf69c7eed70e94832921ef0177e28abf283639458"
67
+ },
68
+ {
69
+ "key": "migrations/0005-repository-scoped-session-markers.sql",
70
+ "sha256": "2c6318e475a40ecac6489bbd6b4bafc3fb5af80cfc8760dbff88b073fd694673"
71
+ },
72
+ {
73
+ "key": "migrations/0006-session-markers.sql",
74
+ "sha256": "f06bf2ae50ba8e1ed51b1cb643b5f6dc739f107bb8b7cabc7d511b5f42087433"
75
+ },
76
+ {
77
+ "key": "migrations/0007-usage-statistics-identity.sql",
78
+ "sha256": "0bba52d7101501a2a2bc95d20abed97f52bae10670bdf15e55c5d09c391315b3"
79
+ },
80
+ {
81
+ "key": "migrations/0008-review-workflow-state.sql",
82
+ "sha256": "02d772850468eb5b064080ca1fcb35100cfaf21cbeed4fe6a877278ab3b87148"
83
+ },
84
+ {
85
+ "key": "migrations/0009-review-gate-retries.sql",
86
+ "sha256": "905cbf1fdfbd357cc705ceb4762170ad6d649424bfc977dd4b241a31fa9e642d"
87
+ },
88
+ {
89
+ "key": "migrations/0010-review-events-and-implementer-response.sql",
90
+ "sha256": "c8f9327fe161bfdea6a7e56ad3fab2c1bc97a30989da3cb1236c35d9d672d07a"
91
+ },
92
+ {
93
+ "key": "migrations/0011-board-lane-events-repository-id.sql",
94
+ "sha256": "cee3b1df36dfa117ae8ef56f0cca813b81808ca62b65a6c6eb1f41fc0ad98d05"
95
+ },
96
+ {
97
+ "key": "migrations/0012-review-hook-retries.sql",
98
+ "sha256": "3511bf668060e7a70237176c80a8145ce521d41ff2965351e02e059ecd1992eb"
99
+ },
100
+ {
101
+ "key": "migrations/0013-usage-statistics-thoughts-tokens.sql",
102
+ "sha256": "b3b9c80e6372eeb3b2bf3b12813dc6fbc4c5d20f601a5abbb6ac0a7605467eb7"
103
+ },
104
+ {
105
+ "key": "migrations/0014-remove-usage-closed.sql",
106
+ "sha256": "4a14bf444be8cbb1d1ef67e0526fb3b31609e04877e0eec32e0b3e0094fa1757"
107
+ },
108
+ {
109
+ "key": "migrations/0015-current-work-latest-per-mission.sql",
110
+ "sha256": "a08063b188a91e901d462f73f4f154c98d85068324cef45eb144250e5000051a"
111
+ },
112
+ {
113
+ "key": "migrations/0016-review-drop-retry-counters.sql",
114
+ "sha256": "0acd31e661e720b563b92b3f75f99218dd99011b787ee8aad76b9a3bc1e363c4"
115
+ },
116
+ {
117
+ "key": "migrations/0017-retire-mission-import-provenance.sql",
118
+ "sha256": "f46823014782c22a9e40b486958770d2b5f7e7180fc9fe6be961a791cca97b50"
119
+ },
120
+ {
121
+ "key": "migrations/0018-adhoc-mission-counter.sql",
122
+ "sha256": "3560376d8e31e0b8fc527509211378a839ba24ef5e5e5fac9ee6dadc06c172c2"
123
+ },
124
+ {
125
+ "key": "migrations/0019-custom-agent-leases.sql",
126
+ "sha256": "07559cd5363f01a309d028673e6dcb9e222a848fae79c57d2fee9001589da19d"
127
+ }
128
+ ]
129
+ }
@@ -1,21 +1,17 @@
1
1
  {
2
- "_comment": "Per-step agent eligibility policy. Modify to change which agents are eligible for each workflow step.",
2
+ "_comment": "Per-step agent eligibility policy. Modify to change which agents are eligible for each workflow step. In an installed/published build, drop a copy at <working-tree>/config/agents.json to override the bundled file without a rebuild; the working-tree copy is authoritative for steps.*.eligible. The bundled copy under the package root is the fallback when no working-tree copy exists.",
3
3
  "_weights_comment": "Weights are relative integers (not percentages). Agent is selected by weighted random draw from eligible-and-supported set. Omit weights to use equal probability.",
4
4
  "steps": {
5
5
  "draft": {
6
- "eligible": ["codex", "custom", "mistral"],
6
+ "eligible": ["codex", "custom", "qwen", "vibe"],
7
7
  "selection": "random"
8
8
  },
9
9
  "active": {
10
- "eligible": ["codex", "claude", "custom", "mistral"],
11
- "selection": "random"
12
- },
13
- "conflict-resolution": {
14
- "eligible": ["claude", "codex", "mistral"],
10
+ "eligible": ["codex", "claude", "custom", "qwen", "vibe"],
15
11
  "selection": "random"
16
12
  },
17
13
  "review": {
18
- "eligible": ["codex", "claude", "custom", "mistral"],
14
+ "eligible": ["codex", "claude", "custom", "qwen", "vibe"],
19
15
  "selection": "random"
20
16
  }
21
17
  },
@@ -0,0 +1,40 @@
1
+ 2e6369b99697e6aaebc09838469bc8a4e546739bc39b05df7818a593a1ff320c asset-manifest.json
2
+ c380d909ddf757f9bbe5136d79652a19396ae69068d144e2b6031ed4b7fb4b78 config/agents.json
3
+ 6a4ec47387d1240e32967dc8e4ce54a15d69df2676b7a96ff72baafe996fef7d config/state-map.json
4
+ 30a76fa3839753ddbfe312428dd1b7285ac1b8d0bd678fc79c79018ec6154f69 migrations/0001-initial-schema.sql
5
+ a8a0febfb4e448a11a5a16b2227d5cc1959bf4594aadd6fd65ea764283020edd migrations/0002-import-history.sql
6
+ d4080e33cb1a77e504188dbdafa0765ddf3391d99e1d81a76ab3a5ce3b9b40f2 migrations/0003-board-lane-events.sql
7
+ 27a88fa469f0197b9c54a0c1878c3fa3339061c15eb1b1b1928b72249ac7c67d migrations/0004-mission-aggregate.sql
8
+ c92e3addb896b7f93221e70bf69c7eed70e94832921ef0177e28abf283639458 migrations/0005-mission-external-task-ref.sql
9
+ 2c6318e475a40ecac6489bbd6b4bafc3fb5af80cfc8760dbff88b073fd694673 migrations/0005-repository-scoped-session-markers.sql
10
+ f06bf2ae50ba8e1ed51b1cb643b5f6dc739f107bb8b7cabc7d511b5f42087433 migrations/0006-session-markers.sql
11
+ 0bba52d7101501a2a2bc95d20abed97f52bae10670bdf15e55c5d09c391315b3 migrations/0007-usage-statistics-identity.sql
12
+ 02d772850468eb5b064080ca1fcb35100cfaf21cbeed4fe6a877278ab3b87148 migrations/0008-review-workflow-state.sql
13
+ 905cbf1fdfbd357cc705ceb4762170ad6d649424bfc977dd4b241a31fa9e642d migrations/0009-review-gate-retries.sql
14
+ c8f9327fe161bfdea6a7e56ad3fab2c1bc97a30989da3cb1236c35d9d672d07a migrations/0010-review-events-and-implementer-response.sql
15
+ cee3b1df36dfa117ae8ef56f0cca813b81808ca62b65a6c6eb1f41fc0ad98d05 migrations/0011-board-lane-events-repository-id.sql
16
+ 3511bf668060e7a70237176c80a8145ce521d41ff2965351e02e059ecd1992eb migrations/0012-review-hook-retries.sql
17
+ b3b9c80e6372eeb3b2bf3b12813dc6fbc4c5d20f601a5abbb6ac0a7605467eb7 migrations/0013-usage-statistics-thoughts-tokens.sql
18
+ 4a14bf444be8cbb1d1ef67e0526fb3b31609e04877e0eec32e0b3e0094fa1757 migrations/0014-remove-usage-closed.sql
19
+ a08063b188a91e901d462f73f4f154c98d85068324cef45eb144250e5000051a migrations/0015-current-work-latest-per-mission.sql
20
+ 0acd31e661e720b563b92b3f75f99218dd99011b787ee8aad76b9a3bc1e363c4 migrations/0016-review-drop-retry-counters.sql
21
+ f46823014782c22a9e40b486958770d2b5f7e7180fc9fe6be961a791cca97b50 migrations/0017-retire-mission-import-provenance.sql
22
+ 3560376d8e31e0b8fc527509211378a839ba24ef5e5e5fac9ee6dadc06c172c2 migrations/0018-adhoc-mission-counter.sql
23
+ 07559cd5363f01a309d028673e6dcb9e222a848fae79c57d2fee9001589da19d migrations/0019-custom-agent-leases.sql
24
+ 0b5d1cd2c31f63f18d543abd23de8efae08ed0692bd1335c9664329e73743d56 package.json
25
+ c7931a2b30343eb509e6d06c8c71d6f0591fbe9bca9029ae8f88781858c8e26c prompts/act-on-review-core.md
26
+ 8f06b68b92c8cfc6f3ee0ff7a1e258258c1a1c2220bdfe5b1a3d5fbaab6befeb prompts/act-on-review.md
27
+ f5565ff259a2c830e8853573f7a774fb2ce21e1631d457a025d63ebcf9f4ea6a prompts/draft-core.md
28
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/draft.md
29
+ 51b16691ee421a55c5a2da30e62fb8e41c910a5e1e3a16ea45ed6f67aa5e031f prompts/execute-core.md
30
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/execute.md
31
+ 7be9123246e77e669d0bbd7c1f6c6f436f58af0c216cb4ee43fd82824b344bbf prompts/review-core.md
32
+ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/review.md
33
+ 73d251f710121157b0e0cdabe1919551359f3b3658d8bf59ba6111e9272dfb7d px.mjs
34
+ f3f642e1a3ac8c624ca8894e9eac29a1eed18073a91b1cd871615263dc364631 px.mjs.map
35
+ fbf9b7bd1d7cf095d0533f064b6aa0bac6b1606268765915a61ae3a7c918089e sbom.json
36
+ ce7f4aa6eb9e684434f243a64018d4dfa9962348bfdb5d59881783326cc0ec90 templates/mission-scaffold.md
37
+ 99784eaf9444cd3b2531bc71976751ffe78f8305f6affe78b8a258e4c9509dd2 web/assets/index-B8Hv3ORh.js
38
+ 807f92b40d54c1112d284e7c491702aa90e25edfc32ff5af9f4889beec5583a8 web/assets/index-DYY4ROtr.css
39
+ 9464b53a502745042971e980f4b89d1e37300d4eca96e8ab6e0591fb561c5562 web/index.html
40
+ 3f454a7af0f992df9a8da22f5a75768d4a4c4fca91d8bc5c5e8a5617882fa7bf web/manifest.json
@@ -0,0 +1,91 @@
1
+ -- Migration: 0001-initial-schema
2
+ -- Description: Create initial operator-local state tables for all six domains
3
+ -- Authority: operator-local only (agent-blocklist, usage-statistics, known-repositories,
4
+ -- ui-preferences, operational-history, migration-ledger)
5
+ -- No repository artifacts are stored in this schema.
6
+
7
+ -- Agent blocklist: operator-local agent blocking rules
8
+ CREATE TABLE IF NOT EXISTS agent_blocklist (
9
+ agent TEXT PRIMARY KEY NOT NULL,
10
+ blocked INTEGER NOT NULL DEFAULT 0,
11
+ until TEXT,
12
+ reason TEXT,
13
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
14
+ );
15
+
16
+ -- Usage statistics: agent work measurements and completed-mission projections.
17
+ -- Types conform to the TASK-2294 domain model (src/domain/usage.ts): token,
18
+ -- tool-call and round counts are INTEGER; durations, costs and provider-usage
19
+ -- percentages are REAL. NULL means "unavailable" (an unmeasured value), which
20
+ -- maps to the domain's `Measurement<'unavailable'>` kind — distinct from a
21
+ -- measured 0. Free-text and ISO-8601 timestamp columns remain TEXT (SQLite has
22
+ -- no native date type; ISO-8601 text is sortable and idiomatic).
23
+ CREATE TABLE IF NOT EXISTS usage_statistics (
24
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
25
+ date TEXT,
26
+ repo TEXT NOT NULL DEFAULT '',
27
+ mission TEXT NOT NULL DEFAULT '',
28
+ classification TEXT,
29
+ implementer TEXT,
30
+ pr_fix_rounds INTEGER,
31
+ provider TEXT,
32
+ model TEXT,
33
+ implementer_agent TEXT,
34
+ reviewer_agent TEXT,
35
+ stage TEXT DEFAULT 'default',
36
+ input_tokens INTEGER,
37
+ output_tokens INTEGER,
38
+ cached_tokens INTEGER,
39
+ context_tokens INTEGER,
40
+ tool_calls INTEGER,
41
+ openai_usage_before REAL,
42
+ openai_usage_after REAL,
43
+ openai_usage_delta REAL,
44
+ duration_minutes REAL,
45
+ cost_usd REAL,
46
+ closed TEXT
47
+ );
48
+
49
+ CREATE INDEX IF NOT EXISTS idx_usage_statistics_mission
50
+ ON usage_statistics(repo, mission, stage);
51
+
52
+ CREATE INDEX IF NOT EXISTS idx_usage_statistics_date
53
+ ON usage_statistics(date);
54
+
55
+ -- Known repositories: operator-local cache of repository identity
56
+ CREATE TABLE IF NOT EXISTS known_repositories (
57
+ id TEXT PRIMARY KEY NOT NULL,
58
+ path TEXT NOT NULL,
59
+ last_accessed TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
60
+ );
61
+
62
+ CREATE INDEX IF NOT EXISTS idx_known_repositories_path
63
+ ON known_repositories(path);
64
+
65
+ -- UI preferences: key-value store for operator-local UI settings
66
+ CREATE TABLE IF NOT EXISTS ui_preferences (
67
+ key TEXT PRIMARY KEY NOT NULL,
68
+ value TEXT NOT NULL,
69
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
70
+ );
71
+
72
+ -- Operational history: local operational event log
73
+ CREATE TABLE IF NOT EXISTS operational_history (
74
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
75
+ event_type TEXT NOT NULL,
76
+ event_data TEXT NOT NULL DEFAULT '{}',
77
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
78
+ );
79
+
80
+ CREATE INDEX IF NOT EXISTS idx_operational_history_type
81
+ ON operational_history(event_type);
82
+
83
+ CREATE INDEX IF NOT EXISTS idx_operational_history_created
84
+ ON operational_history(created_at);
85
+
86
+ -- Migration ledger: records applied migrations with checksums
87
+ CREATE TABLE IF NOT EXISTS schema_migrations (
88
+ id TEXT PRIMARY KEY,
89
+ checksum TEXT NOT NULL,
90
+ applied_at TEXT NOT NULL
91
+ );
@@ -0,0 +1,16 @@
1
+ -- Migration: 0002-import-history
2
+ -- Description: Add import history ledger for source path, digest, and idempotency tracking
3
+ -- Authority: operator-local only
4
+
5
+ CREATE TABLE IF NOT EXISTS import_history (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ source_path TEXT NOT NULL,
8
+ digest TEXT NOT NULL,
9
+ imported_count INTEGER NOT NULL DEFAULT 0,
10
+ skipped_count INTEGER NOT NULL DEFAULT 0,
11
+ imported_at TEXT NOT NULL,
12
+ backup_path TEXT
13
+ );
14
+
15
+ CREATE INDEX IF NOT EXISTS idx_import_history_source
16
+ ON import_history(source_path);