@magnusekdahl/parallix 1.5.289 → 1.5.396

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 (35) hide show
  1. package/NOTICES +137 -4
  2. package/README.md +9 -6
  3. package/build/asset-manifest.json +59 -7
  4. package/build/config/agents.json +3 -3
  5. package/build/decision/tokenizer-data.gz +0 -0
  6. package/build/manifest.sha256 +29 -16
  7. package/build/migrations/0018-adhoc-mission-counter.sql +1 -1
  8. package/build/migrations/0031-goal-check-recorded-round.sql +4 -0
  9. package/build/migrations/0032-goal-check-repaired-gate.sql +4 -0
  10. package/build/migrations/0033-goal-check-repaired-gates.sql +2 -0
  11. package/build/migrations/0034-checkpoint-repair.sql +2 -0
  12. package/build/migrations/0034-mission-description.sql +4 -0
  13. package/build/migrations/0035-review-round-baseline.sql +3 -0
  14. package/build/migrations/0036-integration-repair-assessment.sql +2 -0
  15. package/build/migrations/0037-checkpoint-evidence-history.sql +39 -0
  16. package/build/migrations/0038-success-criterion-identity.sql +30 -0
  17. package/build/migrations/0039-review-decided-revision.sql +2 -0
  18. package/build/migrations/0039-workflow-operations.sql +12 -0
  19. package/build/migrations/0040-goal-check-carried-from.sql +2 -0
  20. package/build/package.json +1 -1
  21. package/build/prompts/act-on-review-core.md +5 -5
  22. package/build/prompts/act-on-review.md +1 -1
  23. package/build/prompts/draft-core.md +19 -7
  24. package/build/prompts/execute-core.md +15 -16
  25. package/build/prompts/review-core.md +4 -3
  26. package/build/px.mjs +1012 -1090
  27. package/build/px.mjs.map +4 -4
  28. package/build/sbom.json +32 -6
  29. package/build/web/assets/index-BQ-hgXcF.js +9 -0
  30. package/build/web/assets/index-Be2y914M.css +1 -0
  31. package/build/web/index.html +2 -2
  32. package/build/web/manifest.json +9 -9
  33. package/package.json +11 -5
  34. package/build/web/assets/index-HfrsWWLp.css +0 -1
  35. package/build/web/assets/index-Q1kufqqY.js +0 -9
package/NOTICES CHANGED
@@ -1,4 +1,4 @@
1
- THIRD-PARTY NOTICES for @magnusekdahl/parallix 1.5.289
1
+ THIRD-PARTY NOTICES for @magnusekdahl/parallix 1.5.396
2
2
 
3
3
  @magnusekdahl/parallix itself is licensed under AGPL-3.0-or-later; see LICENSE.
4
4
 
@@ -7,7 +7,7 @@ third-party packages listed below are statically inlined into that payload by
7
7
  the build, so their notices are reproduced here. This file is generated by
8
8
  scripts/release-metadata.ts from package-lock.json; do not edit it by hand.
9
9
 
10
- Bundled third-party packages: 82
10
+ Bundled third-party packages: 83
11
11
 
12
12
  ==============================================================================
13
13
  INDEX
@@ -57,6 +57,7 @@ ink@6.8.0 — MIT — vadimdemedes/ink
57
57
  ipaddr.js@2.5.0 — MIT — git+https://github.com/whitequark/ipaddr.js.git
58
58
  is-fullwidth-code-point@5.1.0 — MIT — sindresorhus/is-fullwidth-code-point
59
59
  is-in-ci@2.0.0 — MIT — sindresorhus/is-in-ci
60
+ jevtok-ts@0.2.0 — MIT — https://github.com/aarzhaev/jevtok-ts#readme
60
61
  json-schema-ref-resolver@3.0.0 — MIT — https://github.com/fastify/json-schema-ref-resolver#readme
61
62
  json-schema-traverse@1.0.0 — MIT — https://github.com/epoberezkin/json-schema-traverse#readme
62
63
  light-my-request@6.6.0 — BSD-3-Clause — https://github.com/fastify/light-my-request#readme
@@ -79,7 +80,7 @@ safe-regex2@5.1.1 — MIT — https://github.com/fastify/safe-regex2
79
80
  safe-stable-stringify@2.5.0 — MIT — https://github.com/BridgeAR/safe-stable-stringify#readme
80
81
  scheduler@0.27.0 — MIT — https://react.dev/
81
82
  secure-json-parse@4.1.0 — BSD-3-Clause — https://github.com/fastify/secure-json-parse#readme
82
- semver@7.7.4 — ISC — git+https://github.com/npm/node-semver.git
83
+ semver@7.8.5 — ISC — git+https://github.com/npm/node-semver.git
83
84
  set-cookie-parser@2.7.2 — MIT — https://github.com/nfriedly/set-cookie-parser
84
85
  signal-exit@3.0.7 — ISC — https://github.com/tapjs/signal-exit
85
86
  slice-ansi@8.0.0 — MIT — chalk/slice-ansi
@@ -830,6 +831,138 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
830
831
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
831
832
  THE SOFTWARE.
832
833
 
834
+ ------------------------------------------------------------------------------
835
+ jevtok-ts@0.2.0 (MIT)
836
+ ------------------------------------------------------------------------------
837
+
838
+ MIT License
839
+
840
+ Copyright (c) 2026 Alexander Arzhaev
841
+ Copyright (c) 2026 LabGuy94
842
+
843
+ Permission is hereby granted, free of charge, to any person obtaining a copy
844
+ of this software and associated documentation files (the "Software"), to deal
845
+ in the Software without restriction, including without limitation the rights
846
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
847
+ copies of the Software, and to permit persons to whom the Software is
848
+ furnished to do so, subject to the following conditions:
849
+
850
+ The above copyright notice and this permission notice shall be included in all
851
+ copies or substantial portions of the Software.
852
+
853
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
854
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
855
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
856
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
857
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
858
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
859
+ SOFTWARE.
860
+
861
+ # Third-party notices
862
+
863
+ ## jevtok (MIT)
864
+
865
+ The tokenizer and request accounting are a TypeScript port of [LabGuy94/jevtok](https://github.com/LabGuy94/jevtok), pinned to commit `698c53b778ce901be82c166d809e4b1f7948a465`.
866
+ The Jev lookup/merge bitmaps and test fixtures are copied without modification from that revision. Fixture `source` labels are retained; the public fixture corpus is a subset of the upstream author's reported research corpus. Fixtures are not shipped in the npm artifact.
867
+
868
+ ```text
869
+ MIT License
870
+
871
+ Copyright (c) 2026 LabGuy94
872
+
873
+ Permission is hereby granted, free of charge, to any person obtaining a copy
874
+ of this software and associated documentation files (the "Software"), to deal
875
+ in the Software without restriction, including without limitation the rights
876
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
877
+ copies of the Software, and to permit persons to whom the Software is
878
+ furnished to do so, subject to the following conditions:
879
+
880
+ The above copyright notice and this permission notice shall be included in all
881
+ copies or substantial portions of the Software.
882
+
883
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
884
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
885
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
886
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
887
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
888
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
889
+ SOFTWARE.
890
+ ```
891
+
892
+ ## o200k_base vocabulary / tiktoken (MIT)
893
+
894
+ Vocabulary from [OpenAI tiktoken](https://github.com/openai/tiktoken), downloaded from the URL and verified against the SHA-256 recorded in `data/manifest.json`. No tiktoken runtime is shipped.
895
+
896
+ ```text
897
+ MIT License
898
+
899
+ Copyright (c) 2022 OpenAI, Shantanu Jain
900
+
901
+ Permission is hereby granted, free of charge, to any person obtaining a copy
902
+ of this software and associated documentation files (the "Software"), to deal
903
+ in the Software without restriction, including without limitation the rights
904
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
905
+ copies of the Software, and to permit persons to whom the Software is
906
+ furnished to do so, subject to the following conditions:
907
+
908
+ The above copyright notice and this permission notice shall be included in all
909
+ copies or substantial portions of the Software.
910
+
911
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
912
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
913
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
914
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
915
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
916
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
917
+ SOFTWARE.
918
+ ```
919
+
920
+ ## Unicode character data
921
+
922
+ Character-class ranges are generated from Python regex 2026.9.10 Unicode properties; no regex package implementation code is included.
923
+
924
+ ```text
925
+ UNICODE LICENSE V3
926
+
927
+ COPYRIGHT AND PERMISSION NOTICE
928
+
929
+ Copyright © 1991-2026 Unicode, Inc.
930
+
931
+ NOTICE TO USER: Carefully read the following legal agreement. BY
932
+ DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
933
+ SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
934
+ TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
935
+ DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
936
+
937
+ Permission is hereby granted, free of charge, to any person obtaining a
938
+ copy of data files and any associated documentation (the "Data Files") or
939
+ software and any associated documentation (the "Software") to deal in the
940
+ Data Files or Software without restriction, including without limitation
941
+ the rights to use, copy, modify, merge, publish, distribute, and/or sell
942
+ copies of the Data Files or Software, and to permit persons to whom the
943
+ Data Files or Software are furnished to do so, provided that either (a)
944
+ this copyright and permission notice appear with all copies of the Data
945
+ Files or Software, or (b) this copyright and permission notice appear in
946
+ associated Documentation.
947
+
948
+ THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
949
+ KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
950
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
951
+ THIRD PARTY RIGHTS.
952
+
953
+ IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
954
+ BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
955
+ OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
956
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
957
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
958
+ FILES OR SOFTWARE.
959
+
960
+ Except as contained in this notice, the name of a copyright holder shall
961
+ not be used in advertising or otherwise to promote the sale, use or other
962
+ dealings in these Data Files or Software without prior written
963
+ authorization of the copyright holder.
964
+ ```
965
+
833
966
  ------------------------------------------------------------------------------
834
967
  json-schema-ref-resolver@3.0.0 (MIT)
835
968
  ------------------------------------------------------------------------------
@@ -1227,7 +1360,7 @@ Redistribution and use in source and binary forms, with or without modification,
1227
1360
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1228
1361
 
1229
1362
  ------------------------------------------------------------------------------
1230
- semver@7.7.4 (ISC)
1363
+ semver@7.8.5 (ISC)
1231
1364
  ------------------------------------------------------------------------------
1232
1365
 
1233
1366
  The ISC License
package/README.md CHANGED
@@ -47,7 +47,7 @@ Observed one-maintainer dogfooding throughput. The [methodology and evidence](do
47
47
  - **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.
48
48
  - **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.
49
49
  - **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.
50
- - **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.
50
+ - **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 updates an existing graph after squash integration on the receiving base worktree, while the installed agent guidance steers codebase questions toward `graphify query` / `path` / `explain` before full reports or raw grep. That reduces token-usage.
51
51
  - **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.
52
52
  - **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.
53
53
  - **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.
@@ -73,7 +73,7 @@ backlog → draft → active → review → approved → done
73
73
 
74
74
  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. Each mission lands as one squash commit whose subject is the recorded mission title and whose body records the mission's task reference, so the primary branch history names what was delivered at a glance. 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. An operator can opt into a no-output deadline for silent reviewers with `WORKFLOW_REVIEW_AGENT_NO_OUTPUT_MAX_MS`, after which the next eligible reviewer is tried. Blocking review findings loop back to `active` on the same branch and PR.
75
75
 
76
- The mission enters `review` before each review round and `integration` when approval succeeds. Review gate repairs return it to `active` before repair work and back to `review` after verification. Commit and rebase repairs needed to finish integration stay in `integration`. Integration gate failures return the mission to `active` and require a fresh review before integration resumes. The mission reaches `done` only after integration and cleanup succeed. A failed lifecycle write stops dependent work and is reported as a failure. Once activation commits, a failed agent run leaves the mission and its Backlog mirror active for retry. Agents use the launching CLI for their workflow commands so an older global installation cannot bypass these boundaries.
76
+ The mission enters `review` before each review round and `integration` when approval succeeds. Review gate repairs return it to `active` before repair work and back to `review` after verification. Commit and rebase repairs needed to finish integration stay in `integration`. Integration gate failures return the mission to `active`. A fresh round either reviews the repair or mechanically restores prior approval when the mission patch is unchanged and the failed gate has recorded green validation. Both paths stop for human integration. The mission reaches `done` only after integration and cleanup succeed. A failed lifecycle write stops dependent work and is reported as a failure. Once activation commits, a failed agent run leaves the mission and its Backlog mirror active for retry. Agents use the launching CLI for their workflow commands so an older global installation cannot bypass these boundaries.
77
77
 
78
78
  ## Defence in depth
79
79
 
@@ -84,7 +84,7 @@ Running several agents in parallel is only worth doing if you can trust what com
84
84
  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.
85
85
  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.
86
86
  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.
87
- 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. For eligible repeat findings, Jev can classify the repair from revision-pinned evidence and clear the finding set or return it to the implementer. This runs by default when Jev and its review identity are available; uncertain evidence and broader changes go to the general reviewer. Operators can [opt out](docs/config.md#repeat-review-classification).
87
+ 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. On any review round, Jev can judge the prior findings, whether an integration repair weakened the check its recorded green gate re-ran or, on a first review, the mission success criteria from revision-pinned evidence, then clear them or return them to the implementer. This runs by default when Jev and its review identity are available; uncertain evidence and broader changes go to the general reviewer. Operators can [opt out](docs/config.md#review-classification).
88
88
  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.
89
89
  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.
90
90
  9. **Operator decision.** Nothing merges itself. A human reads the diff and decides whether to integrate at all.
@@ -168,8 +168,8 @@ Both are optional integrations, and each one is wired independently of the other
168
168
  ## Use cases
169
169
 
170
170
  The durable capability guide and confidence boundaries are in [`docs/use-cases.md`](docs/use-cases.md).
171
- For automatic interactive mission terminals and bounded retained agent-run output,
172
- see [agent-run history](docs/agent-run-history.md).
171
+ For automatic interactive mission terminals and bounded retained mission history
172
+ (also shown on the `px web` board), see [agent-run history](docs/agent-run-history.md).
173
173
 
174
174
  ## What Parallix is not
175
175
 
@@ -220,7 +220,10 @@ The test suite is the verification gate this repo declares in `workflow.config.j
220
220
 
221
221
  Four Node floors are distinct here: the shipped runtime floor is `>=22.23.1` (`package.json` `engines.node`, also the bundle target); the ordinary development and unit-test floor is Node `24.15.0` or newer, which the unit-test module mock helper needs; the coverage-tooling floor is Node `26.7` or newer for `--test-coverage-include-all`; and GitHub CI selects Node `26` for the coverage run and Node `24` for the release path. The local verifier accepts any Node `20` or newer so `node --test` runs, but coverage still needs the `26.7` floor. 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`.
222
222
 
223
- If you are developing Parallix itself from a checkout, use the built runtime
223
+ If you are developing Parallix itself from a checkout, install dependencies with
224
+ the pinned pnpm (`pnpm install --frozen-lockfile`; `package.json` `packageManager`
225
+ names the version, and `pnpm-lock.yaml` is the only lockfile). Packaging and
226
+ publication still use npm. Then use the built runtime
224
227
  after `npm run build`, or run the TypeScript entry directly with the development
225
228
  script:
226
229
 
@@ -3,7 +3,7 @@
3
3
  "assets": [
4
4
  {
5
5
  "key": "config/agents.json",
6
- "sha256": "c380d909ddf757f9bbe5136d79652a19396ae69068d144e2b6031ed4b7fb4b78"
6
+ "sha256": "ec3ec505e42adc8cddc17651d7a1a85b6359a433e1e62f3c6c22a4896150187f"
7
7
  },
8
8
  {
9
9
  "key": "config/state-map.json",
@@ -11,15 +11,15 @@
11
11
  },
12
12
  {
13
13
  "key": "prompts/act-on-review-core.md",
14
- "sha256": "677c3ead4d810656bd0993ee8a1db2170b42bd94505d52620c0dcdc4e9f5ca4f"
14
+ "sha256": "e0f14f5d559391eccebd1a85da0c709c90ff74f04a5cb8809303f0d372a3bc86"
15
15
  },
16
16
  {
17
17
  "key": "prompts/act-on-review.md",
18
- "sha256": "412facaee4a56f6436317d6b228ff57cb0605aca88ca143056ab50895ef62eee"
18
+ "sha256": "c3e7caaaaa110fd7da1b055a593d8f56a66cb8bb7bb70ccdb3f43250fba7e9d2"
19
19
  },
20
20
  {
21
21
  "key": "prompts/draft-core.md",
22
- "sha256": "794bc41c7ce01d3f5ec06aa4ae37c75dfc54079c1ca62062f231c45d91d9637b"
22
+ "sha256": "352006d7edd95c47dd405d98b7ec1103b1705e9232e153e89637ddb4bf389655"
23
23
  },
24
24
  {
25
25
  "key": "prompts/draft.md",
@@ -27,7 +27,7 @@
27
27
  },
28
28
  {
29
29
  "key": "prompts/execute-core.md",
30
- "sha256": "e571826c71ad14cf0156ef7fc99bf273fa6af2752c01e627238f3c6b5bdb63e1"
30
+ "sha256": "de5ad6f1eef4b856e912865667cb738fc0716b707dd62068ef176f89f0bf3032"
31
31
  },
32
32
  {
33
33
  "key": "prompts/execute.md",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  {
37
37
  "key": "prompts/review-core.md",
38
- "sha256": "e6c0aa4683fac33f41b79fb27407cd3c9de384239d2b1067e2b30acb5e7fecb0"
38
+ "sha256": "f0c58cd3d9853de4e2715f85d6e43a99c2820e84b86bc0f8f1c54d82618c457b"
39
39
  },
40
40
  {
41
41
  "key": "prompts/review.md",
@@ -119,7 +119,7 @@
119
119
  },
120
120
  {
121
121
  "key": "migrations/0018-adhoc-mission-counter.sql",
122
- "sha256": "3560376d8e31e0b8fc527509211378a839ba24ef5e5e5fac9ee6dadc06c172c2"
122
+ "sha256": "f73067a9a12a99ea5193b9d477eb23f069c2fb88c7227f4c5b88d84498f651a0"
123
123
  },
124
124
  {
125
125
  "key": "migrations/0019-custom-agent-leases.sql",
@@ -168,6 +168,58 @@
168
168
  {
169
169
  "key": "migrations/0030-review-classification.sql",
170
170
  "sha256": "746f8bf0b0edb91367dd426fc926264e803c7d17ede8689ad2a8457757002a7c"
171
+ },
172
+ {
173
+ "key": "migrations/0031-goal-check-recorded-round.sql",
174
+ "sha256": "d0ab23bc2a56e89e4521bf70fc907d6f2bacae3aa21e055ebe8481e79ac5e637"
175
+ },
176
+ {
177
+ "key": "migrations/0032-goal-check-repaired-gate.sql",
178
+ "sha256": "ce4a14e002907e5f4d20cf902140dd220b18dcf5128960d771491aabcb26f85f"
179
+ },
180
+ {
181
+ "key": "migrations/0033-goal-check-repaired-gates.sql",
182
+ "sha256": "e6303934e715b0bf7ac1078abb7f2bd6e488a4b1e299d69c7612cc4ba2d1a578"
183
+ },
184
+ {
185
+ "key": "migrations/0034-checkpoint-repair.sql",
186
+ "sha256": "c899f9b25fe86e454b99d9db28feb89573fc7d0b40b0b50328a619a92d90e556"
187
+ },
188
+ {
189
+ "key": "migrations/0034-mission-description.sql",
190
+ "sha256": "16ccaf2fe41cd1e578bfbedd0675c854d3ce9daa3ac51f205d6766250775cf13"
191
+ },
192
+ {
193
+ "key": "migrations/0035-review-round-baseline.sql",
194
+ "sha256": "7a8f2aacf87ff92fc9c3270ed719a433fcd6dff2496347f66d5180fadf6e7d28"
195
+ },
196
+ {
197
+ "key": "migrations/0036-integration-repair-assessment.sql",
198
+ "sha256": "f723967c48b0c9be7a018730167467901a9de22516bad7ac13679254003d19d8"
199
+ },
200
+ {
201
+ "key": "migrations/0037-checkpoint-evidence-history.sql",
202
+ "sha256": "7b0bf1d87073edea601e68dd14d4e323f3fc3be740adadb7a8b7bbae55947e4c"
203
+ },
204
+ {
205
+ "key": "migrations/0038-success-criterion-identity.sql",
206
+ "sha256": "d59c6e91e82e9cdd93fb2735209a396cfd9d68c73dbee18b55b4db68b00d44f1"
207
+ },
208
+ {
209
+ "key": "migrations/0039-review-decided-revision.sql",
210
+ "sha256": "5cb00acc4e4924adcc082d750871db65d2e4f2075e8e81b61fe9663ff3786b12"
211
+ },
212
+ {
213
+ "key": "migrations/0039-workflow-operations.sql",
214
+ "sha256": "899d9d535e079ef2bd04cc1a52b24ab8fdb82195f1d6257218f0dc4827c20562"
215
+ },
216
+ {
217
+ "key": "migrations/0040-goal-check-carried-from.sql",
218
+ "sha256": "f600df1684fe3a7e8423090759a6578378e44a306a6498457e69eb72c858d902"
219
+ },
220
+ {
221
+ "key": "decision/tokenizer-data.gz",
222
+ "sha256": "c83abf9a2ab7966fbeec566cacb00c1aa48f6ac0ca66054fa7999d000c020012"
171
223
  }
172
224
  ]
173
225
  }
@@ -3,15 +3,15 @@
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", "qwen", "vibe"],
6
+ "eligible": ["codex", "custom"],
7
7
  "selection": "random"
8
8
  },
9
9
  "active": {
10
- "eligible": ["codex", "claude", "custom", "qwen", "vibe"],
10
+ "eligible": ["codex", "claude", "custom"],
11
11
  "selection": "random"
12
12
  },
13
13
  "review": {
14
- "eligible": ["codex", "claude", "custom", "qwen", "vibe"],
14
+ "eligible": ["codex", "claude", "custom"],
15
15
  "selection": "random"
16
16
  }
17
17
  },
Binary file
@@ -1,6 +1,7 @@
1
- 08e99fe1707dd9d807cfc906dbc2ea87887085bf1231b9775ab8e5865ae4eb01 asset-manifest.json
2
- c380d909ddf757f9bbe5136d79652a19396ae69068d144e2b6031ed4b7fb4b78 config/agents.json
1
+ 86aebfc27253a868ee2a0229005404b963f4fea5a68694d6720037ea7eaa71af asset-manifest.json
2
+ ec3ec505e42adc8cddc17651d7a1a85b6359a433e1e62f3c6c22a4896150187f config/agents.json
3
3
  6a4ec47387d1240e32967dc8e4ce54a15d69df2676b7a96ff72baafe996fef7d config/state-map.json
4
+ c83abf9a2ab7966fbeec566cacb00c1aa48f6ac0ca66054fa7999d000c020012 decision/tokenizer-data.gz
4
5
  30a76fa3839753ddbfe312428dd1b7285ac1b8d0bd678fc79c79018ec6154f69 migrations/0001-initial-schema.sql
5
6
  a8a0febfb4e448a11a5a16b2227d5cc1959bf4594aadd6fd65ea764283020edd migrations/0002-import-history.sql
6
7
  d4080e33cb1a77e504188dbdafa0765ddf3391d99e1d81a76ab3a5ce3b9b40f2 migrations/0003-board-lane-events.sql
@@ -19,7 +20,7 @@ b3b9c80e6372eeb3b2bf3b12813dc6fbc4c5d20f601a5abbb6ac0a7605467eb7 migrations/001
19
20
  a08063b188a91e901d462f73f4f154c98d85068324cef45eb144250e5000051a migrations/0015-current-work-latest-per-mission.sql
20
21
  0acd31e661e720b563b92b3f75f99218dd99011b787ee8aad76b9a3bc1e363c4 migrations/0016-review-drop-retry-counters.sql
21
22
  f46823014782c22a9e40b486958770d2b5f7e7180fc9fe6be961a791cca97b50 migrations/0017-retire-mission-import-provenance.sql
22
- 3560376d8e31e0b8fc527509211378a839ba24ef5e5e5fac9ee6dadc06c172c2 migrations/0018-adhoc-mission-counter.sql
23
+ f73067a9a12a99ea5193b9d477eb23f069c2fb88c7227f4c5b88d84498f651a0 migrations/0018-adhoc-mission-counter.sql
23
24
  07559cd5363f01a309d028673e6dcb9e222a848fae79c57d2fee9001589da19d migrations/0019-custom-agent-leases.sql
24
25
  39f48ffde5a766f82b4c59725a6bf49750496e6f2efa92b983b2c4756a3cf314 migrations/0020-mission-execution-context.sql
25
26
  6e8112f6674086f47403172e3a5f3506d1e1ed6defb0e05b2bd00dea66f84858 migrations/0021-mission-brief-and-declared-gates.sql
@@ -32,20 +33,32 @@ a0c669ba6c6883bb498c59eb8a8a1688dc445de56520a22d7c0302b4a2fbf8b0 migrations/002
32
33
  0196b4d563b829467680704349e591085597cb59e34052df0d72b4b78892f51a migrations/0028-review-revocation-cause.sql
33
34
  b4091b8c3d770f8ac5072745a234de10d6e02cc3c4f0e6497888629041b54e7e migrations/0029-mission-success-criterion-completion.sql
34
35
  746f8bf0b0edb91367dd426fc926264e803c7d17ede8689ad2a8457757002a7c migrations/0030-review-classification.sql
35
- 5db10eda2b526f83090baf0f02ca31d7dfff1d22823f71bbeab0fa5f1101b599 package.json
36
- 677c3ead4d810656bd0993ee8a1db2170b42bd94505d52620c0dcdc4e9f5ca4f prompts/act-on-review-core.md
37
- 412facaee4a56f6436317d6b228ff57cb0605aca88ca143056ab50895ef62eee prompts/act-on-review.md
38
- 794bc41c7ce01d3f5ec06aa4ae37c75dfc54079c1ca62062f231c45d91d9637b prompts/draft-core.md
36
+ d0ab23bc2a56e89e4521bf70fc907d6f2bacae3aa21e055ebe8481e79ac5e637 migrations/0031-goal-check-recorded-round.sql
37
+ ce4a14e002907e5f4d20cf902140dd220b18dcf5128960d771491aabcb26f85f migrations/0032-goal-check-repaired-gate.sql
38
+ e6303934e715b0bf7ac1078abb7f2bd6e488a4b1e299d69c7612cc4ba2d1a578 migrations/0033-goal-check-repaired-gates.sql
39
+ c899f9b25fe86e454b99d9db28feb89573fc7d0b40b0b50328a619a92d90e556 migrations/0034-checkpoint-repair.sql
40
+ 16ccaf2fe41cd1e578bfbedd0675c854d3ce9daa3ac51f205d6766250775cf13 migrations/0034-mission-description.sql
41
+ 7a8f2aacf87ff92fc9c3270ed719a433fcd6dff2496347f66d5180fadf6e7d28 migrations/0035-review-round-baseline.sql
42
+ f723967c48b0c9be7a018730167467901a9de22516bad7ac13679254003d19d8 migrations/0036-integration-repair-assessment.sql
43
+ 7b0bf1d87073edea601e68dd14d4e323f3fc3be740adadb7a8b7bbae55947e4c migrations/0037-checkpoint-evidence-history.sql
44
+ d59c6e91e82e9cdd93fb2735209a396cfd9d68c73dbee18b55b4db68b00d44f1 migrations/0038-success-criterion-identity.sql
45
+ 5cb00acc4e4924adcc082d750871db65d2e4f2075e8e81b61fe9663ff3786b12 migrations/0039-review-decided-revision.sql
46
+ 899d9d535e079ef2bd04cc1a52b24ab8fdb82195f1d6257218f0dc4827c20562 migrations/0039-workflow-operations.sql
47
+ f600df1684fe3a7e8423090759a6578378e44a306a6498457e69eb72c858d902 migrations/0040-goal-check-carried-from.sql
48
+ e59a0c67c4b8424b799df70ab577193e19cd5d9b668ff6a8404120996cad41ac package.json
49
+ e0f14f5d559391eccebd1a85da0c709c90ff74f04a5cb8809303f0d372a3bc86 prompts/act-on-review-core.md
50
+ c3e7caaaaa110fd7da1b055a593d8f56a66cb8bb7bb70ccdb3f43250fba7e9d2 prompts/act-on-review.md
51
+ 352006d7edd95c47dd405d98b7ec1103b1705e9232e153e89637ddb4bf389655 prompts/draft-core.md
39
52
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/draft.md
40
- e571826c71ad14cf0156ef7fc99bf273fa6af2752c01e627238f3c6b5bdb63e1 prompts/execute-core.md
53
+ de5ad6f1eef4b856e912865667cb738fc0716b707dd62068ef176f89f0bf3032 prompts/execute-core.md
41
54
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/execute.md
42
- e6c0aa4683fac33f41b79fb27407cd3c9de384239d2b1067e2b30acb5e7fecb0 prompts/review-core.md
55
+ f0c58cd3d9853de4e2715f85d6e43a99c2820e84b86bc0f8f1c54d82618c457b prompts/review-core.md
43
56
  06431c3f965935db27b254164d3bfa66aa7cc2a5602031f181dcc5e32f3e5739 prompts/review.md
44
- 103733eb66f5596c3be417ce2f48fa2dd0c7a6f98199a017090288b0fd0058b8 px.mjs
45
- 420c601237630102601f28a9243148af35569cbe3e2df24be82c2d2c4ea06806 px.mjs.map
46
- e4f4497b62b0a329d019ce3633734461eba55e5a4be67640352f892187e9d65b sbom.json
57
+ 1988a864fd84fd3f5e237936b0c09c4a63a4d98b21abba669435bed58af78a63 px.mjs
58
+ 6dd177eaed4915152edca6c2fce37b9adb4024e3e394e008620ac21b85860158 px.mjs.map
59
+ ff1b3bac82f67dd6f05110e8b0a40413b0c9d066c29420b6beeaea4d13aa5eaa sbom.json
47
60
  64ceff9f8a45d1769c8e70b0545a554065ffd285aa33b862447cb2ac70d28093 templates/mission-scaffold.md
48
- 3cd549801655754fd23632c7cda05fbc3bf3a7108965ad8ed7cd99244e292b71 web/assets/index-HfrsWWLp.css
49
- 105c3e33c65a58dbf7d79cb030c4f4a3aeedecaac14e9e5515303bbcd88ce0f8 web/assets/index-Q1kufqqY.js
50
- 67cce8af16fb67e1e84174298ad61ec960281fbe84a5d6292146211e9b66c75b web/index.html
51
- 214574cd1f7e48e8f8729079f7cb9f47c6555ace31f34cd13a9e87d2071779ba web/manifest.json
61
+ 93018b03d47df2eaee99a621a4a13cad30abe83eb4fb6790fa365391fe2c8758 web/assets/index-BQ-hgXcF.js
62
+ 94c3956301ced21ddf9270a745d884db8c49a7492feb490b747f33d35f5df6d2 web/assets/index-Be2y914M.css
63
+ b1735e3482fca2da61dcc0ff7546a814e975a0af68da119aa08f5bb252b979dd web/index.html
64
+ 030d23e75f0747078c42fd4d712715ec0eb65a769d7099fb7ea6b11ff04a21a0 web/manifest.json
@@ -4,7 +4,7 @@
4
4
  -- Backlog-backed missions keep their identity in a Backlog task file. Adhoc
5
5
  -- missions have no such file in an adhoc-only repository, so their identity is
6
6
  -- minted here instead: a monotonic counter owned per repository, allocated
7
- -- atomically, so `parallix-adhoc-<NNNN>` can never collide with, or be confused
7
+ -- atomically, so `px-<NNNN>` can never collide with, or be confused
8
8
  -- for, Backlog.md task numbering. No content hash in the identity: slug,
9
9
  -- mission id, branch, and worktree suffix all derive from this counter.
10
10
  --
@@ -0,0 +1,4 @@
1
+ -- TASK-2665: a Goal Check row records the review round it was written in, so a
2
+ -- repair round can tell its fresh fix evidence from rows kept from earlier
3
+ -- rounds. Existing rows carry no round: nothing recorded when they were written.
4
+ ALTER TABLE mission_checkpoint_goal_checks ADD COLUMN recorded_round INTEGER CHECK (recorded_round IS NULL OR recorded_round >= 1);
@@ -0,0 +1,4 @@
1
+ -- TASK-2665: a Goal Check row written to repair an integration gate failure
2
+ -- remembers that gate, so a later failure of the same gate still owes this
3
+ -- criterion fresh proof after the repair replaced the gate-citing reference.
4
+ ALTER TABLE mission_checkpoint_goal_checks ADD COLUMN repaired_gate TEXT;
@@ -0,0 +1,2 @@
1
+ -- Preserve gate-specific criterion obligations across interleaved repairs.
2
+ ALTER TABLE mission_checkpoint_goal_checks ADD COLUMN repaired_gates TEXT;
@@ -0,0 +1,2 @@
1
+ -- Incident-associated repair state is nested Mission checkpoint authority.
2
+ ALTER TABLE mission_checkpoints ADD COLUMN repair_json TEXT;
@@ -0,0 +1,4 @@
1
+ -- TASK-2693: a mission captured on the board may carry a description with no
2
+ -- reason attached. A brief needs both goal and why, so the description lives on
3
+ -- the mission until a refining agent records the brief with `px goal set`.
4
+ ALTER TABLE missions ADD COLUMN description TEXT;
@@ -0,0 +1,3 @@
1
+ -- TASK-2704: the primary-branch revision a round's mission diff is measured from, so a repair
2
+ -- compares baseline-relative mission diffs rather than diffs polluted by main.
3
+ ALTER TABLE mission_review_rounds ADD COLUMN review_baseline TEXT;
@@ -0,0 +1,2 @@
1
+ ALTER TABLE mission_review_rounds ADD COLUMN integration_repair_assessment TEXT;
2
+ ALTER TABLE mission_review_rounds ADD COLUMN mechanical_source TEXT;
@@ -0,0 +1,39 @@
1
+ -- Preserve existing evidence verbatim. Recording metadata was never stored;
2
+ -- row-level recorded_round is known, but no checkpoint-level round is inferred.
3
+ ALTER TABLE mission_checkpoints ADD COLUMN recording_json TEXT;
4
+ CREATE TABLE mission_checkpoint_versions (
5
+ mission_id TEXT NOT NULL REFERENCES missions(id) ON DELETE CASCADE,
6
+ version INTEGER NOT NULL CHECK (version >= 1),
7
+ name TEXT NOT NULL,
8
+ checkpoint_json TEXT NOT NULL,
9
+ recorded_at TEXT,
10
+ recorded_round INTEGER,
11
+ mission_revision INTEGER,
12
+ PRIMARY KEY (mission_id, version)
13
+ );
14
+ INSERT INTO mission_checkpoint_versions
15
+ SELECT c.mission_id, ROW_NUMBER() OVER (PARTITION BY c.mission_id ORDER BY c.position), c.name,
16
+ json_patch(json_object('missionId', c.checkpoint_mission_id, 'name', c.name,
17
+ 'rawFilename', c.raw_filename, 'firstLine', c.first_line,
18
+ 'nextActionText', c.next_action_text, 'repair', json(c.repair_json)),
19
+ json_object('goalCheck', json(COALESCE((
20
+ SELECT json_group_array(json(row_json)) FROM (
21
+ SELECT json_patch(json_object('criterion', g.criterion, 'evidence', g.evidence,
22
+ 'recordedRound', g.recorded_round, 'repairedGate', g.repaired_gate,
23
+ 'repairedGates', json(g.repaired_gates)), '{}') AS row_json
24
+ FROM mission_checkpoint_goal_checks g
25
+ WHERE g.mission_id = c.mission_id AND g.checkpoint_position = c.position
26
+ ORDER BY g.position
27
+ )
28
+ ), '[]')))), NULL, NULL, NULL
29
+ FROM mission_checkpoints c;
30
+
31
+ -- Null means the boundary predates capture; never reconstruct it from today's evidence.
32
+ CREATE TABLE mission_review_checkpoint_states (
33
+ mission_id TEXT NOT NULL REFERENCES missions(id) ON DELETE CASCADE,
34
+ round_number INTEGER NOT NULL CHECK (round_number >= 1),
35
+ state_json TEXT,
36
+ PRIMARY KEY (mission_id, round_number)
37
+ );
38
+ INSERT INTO mission_review_checkpoint_states (mission_id, round_number, state_json)
39
+ SELECT mission_id, round_number, NULL FROM mission_review_rounds;
@@ -0,0 +1,30 @@
1
+ -- Existing criteria acquire mission-scoped IDs. Only exact current text matches
2
+ -- can identify legacy evidence; never infer an identity from position or wording.
3
+ ALTER TABLE missions ADD COLUMN next_success_criterion_id INTEGER NOT NULL DEFAULT 1;
4
+ ALTER TABLE mission_success_criteria ADD COLUMN criterion_id TEXT;
5
+ UPDATE mission_success_criteria SET criterion_id = 'sc-' || (position + 1)
6
+ WHERE criterion_id IS NULL;
7
+ UPDATE missions SET next_success_criterion_id = COALESCE((
8
+ SELECT MAX(position) + 2 FROM mission_success_criteria WHERE mission_id = missions.id
9
+ ), 1)
10
+ WHERE EXISTS (SELECT 1 FROM mission_success_criteria WHERE mission_id = missions.id);
11
+ ALTER TABLE mission_checkpoint_goal_checks ADD COLUMN criterion_id TEXT;
12
+ UPDATE mission_checkpoint_goal_checks AS g SET criterion_id = (
13
+ SELECT c.criterion_id FROM mission_success_criteria c
14
+ WHERE c.mission_id = g.mission_id AND c.criterion = g.criterion
15
+ );
16
+
17
+ -- Retained versions may predate this forward migration. Preserve all evidence
18
+ -- and metadata while annotating only exact matches, including explicit nulls.
19
+ UPDATE mission_checkpoint_versions AS v SET checkpoint_json = json_set(checkpoint_json, '$.goalCheck', json(COALESCE((
20
+ SELECT json_group_array(json(identified)) FROM (
21
+ SELECT json_set(g.value, '$.criterionId', (
22
+ SELECT c.criterion_id FROM mission_success_criteria c
23
+ WHERE c.mission_id = v.mission_id AND c.criterion = json_extract(g.value, '$.criterion')
24
+ )) AS identified FROM json_each(v.checkpoint_json, '$.goalCheck') g ORDER BY CAST(g.key AS INTEGER)
25
+ )
26
+ ), '[]')));
27
+ -- Earlier boundaries have no reliable round-time criteria contract. Do not
28
+ -- substitute today's criteria into a historical snapshot.
29
+ UPDATE mission_review_checkpoint_states SET state_json = json_set(state_json, '$.successCriteria', NULL, '$.uncoveredCriterionIds', NULL)
30
+ WHERE state_json IS NOT NULL;
@@ -0,0 +1,2 @@
1
+ -- Legacy decisions deliberately retain NULL: their reviewed head is unknown.
2
+ ALTER TABLE mission_review_rounds ADD COLUMN decided_revision TEXT;
@@ -0,0 +1,12 @@
1
+ CREATE TABLE workflow_operations (
2
+ id TEXT PRIMARY KEY,
3
+ repository_id TEXT NOT NULL,
4
+ mission_id TEXT NOT NULL,
5
+ request_key TEXT NOT NULL,
6
+ generation INTEGER NOT NULL,
7
+ phase TEXT NOT NULL,
8
+ record_json TEXT NOT NULL,
9
+ UNIQUE(repository_id, mission_id, request_key)
10
+ );
11
+ CREATE UNIQUE INDEX workflow_exclusive_mission ON workflow_operations(repository_id, mission_id)
12
+ WHERE phase IN ('accepted', 'preparing', 'waiting', 'running', 'checking', 'stopping');
@@ -0,0 +1,2 @@
1
+ -- Provenance of Goal Check rows carried into a repair checkpoint; NULL for recorded rows.
2
+ ALTER TABLE mission_checkpoint_goal_checks ADD COLUMN carried_from TEXT;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@magnusekdahl/parallix",
3
- "version": "1.5.289",
3
+ "version": "1.5.396",
4
4
  "type": "module"
5
5
  }
@@ -9,15 +9,15 @@ Latest reviewer outcome was: {{review_outcome}}
9
9
  Entrypoint: {{act_on_review_entrypoint}}
10
10
 
11
11
  Minimum loop contract:
12
- - Before acting on findings, compact the implementation context and reload the locked mission goal and scope; committed checkpoint or gate evidence when present; current review round and disposition; unresolved findings and implementer resolutions; and the exact revision under review. This applies even when the mission declares no gates.
12
+ - Before acting on findings, {{actOnReviewContextAction}} the locked mission goal and scope; committed checkpoint or gate evidence when present; current review round and disposition; unresolved findings and implementer resolutions; and the exact revision under review. This applies even when the mission declares no gates.
13
13
  - Load the Mission context with `px status {{slug}}` and read `AGENTS.md` before acting. That command reports the recorded brief, declared gates, the latest recorded checkpoint evidence, the reviewed revision, the outstanding findings, and your prior resolutions.
14
14
  - Get the current round, phase, and disposition from `px status {{slug}}`, which reports them on its `Review:` line. `px status` is the authority for review-loop state; take it from there and nowhere else.
15
15
  - Read the review outcome and findings from `px status {{slug}}`; its review history is projected from the operator database.
16
16
  - For each finding: fix it, or push back with a clear reason why it does not hold. There is no third option. "Tracked as a follow-up" is not a resolution — if the finding is right, deliver it.
17
17
  - If a finding is a rebasing artifact caused by branch stale-ness rather than this mission's diff, push back with the rationale: `Not a mission change - will be resolved by parallix rebase.`
18
- - Record corrected checkpoint evidence with `px checkpoint record` if needed, run the relevant gate, and commit before handoff.
19
- - After committing fixes, submit every finding with `px resolve --slug {{slug}} --actor {{implementer}} --expected-version <n> --finding <finding-id> --fixed "<evidence>" [--finding <finding-id> --disputed "<rationale>"] ...`. This persists the resolution and publishes through the established workflow; do not post to Forgejo directly.
18
+ - Record corrected checkpoint evidence with `px checkpoint record` if needed, run the relevant gate, and commit before handoff. A repair records only the bounced checkpoint's affected criteria: prior checkpoints' valid rows are retained, and handoff measures coverage across every recorded checkpoint by criterion identity, so a repair row for one criterion never counts as evidence for another. Rows are stamped with the review round they were recorded in, and a repair must record at least one fresh row in the current round (each criterion a finding names needs its own), because rows kept from earlier rounds are stale as fix evidence.
19
+ - After committing fixes, submit every finding with `px resolve --slug {{slug}} --actor {{implementer}} --finding <finding-id> --fixed "<evidence>" [--finding <finding-id> --disputed "<rationale>"] ...`. This persists the resolution and publishes through the established workflow; do not post to Forgejo directly.
20
20
  - `--disputed` records a pushback. Resolve every outstanding finding; the command rejects partial resolutions rather than inventing answers. Review feedback, missing context, and conflicting stale records are repair work, not a block: re-query `px status {{slug}}` and the current PR decisions, then act on the latest decision.
21
- - Use `px resolve --slug {{slug}} --actor {{implementer}} --expected-version <n> --blocked "<reason>"` only for a genuine external dependency that prevents any resolution and names the required human action. Never use it to avoid investigating or delivering requested changes.
21
+ - Use `px resolve --slug {{slug}} --actor {{implementer}} --blocked "<reason>"` only for a genuine external dependency that prevents any resolution and names the required human action. Never use it to avoid investigating or delivering requested changes.
22
22
 
23
- Safety: if the review outcome is not approved and you cannot read it, do not guess and do not push back on findings you have not seen. Record `px resolve --slug {{slug}} --actor {{implementer}} --expected-version <n> --blocked "<reason>"` instead, naming what you could not read. Silence is not a resolution.
23
+ Safety: if the review outcome is not approved and you cannot read it, do not guess and do not push back on findings you have not seen. Record `px resolve --slug {{slug}} --actor {{implementer}} --blocked "<reason>"` instead, naming what you could not read. Silence is not a resolution.
@@ -1 +1 @@
1
- Graphify-first: before acting on findings, check if `graphify-out/graph.json` exists. If it does, use `graphify query` and `graphify path` to understand affected code areas before making changes. Do not refresh Graphify after ordinary edits: the next autonomous-review boundary refreshes the final verified tree immediately before reviewer launch.
1
+ Graphify-first: before acting on findings, check if `graphify-out/graph.json` exists. If it does, use `graphify query` and `graphify path` to understand affected code areas before making changes. Parallix updates existing Graphify graphs after successful squash integration on the receiving base worktree; review, edits and checkpoints do not trigger updates.