@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.
- package/NOTICES +137 -4
- package/README.md +9 -6
- package/build/asset-manifest.json +59 -7
- package/build/config/agents.json +3 -3
- package/build/decision/tokenizer-data.gz +0 -0
- package/build/manifest.sha256 +29 -16
- package/build/migrations/0018-adhoc-mission-counter.sql +1 -1
- package/build/migrations/0031-goal-check-recorded-round.sql +4 -0
- package/build/migrations/0032-goal-check-repaired-gate.sql +4 -0
- package/build/migrations/0033-goal-check-repaired-gates.sql +2 -0
- package/build/migrations/0034-checkpoint-repair.sql +2 -0
- package/build/migrations/0034-mission-description.sql +4 -0
- package/build/migrations/0035-review-round-baseline.sql +3 -0
- package/build/migrations/0036-integration-repair-assessment.sql +2 -0
- package/build/migrations/0037-checkpoint-evidence-history.sql +39 -0
- package/build/migrations/0038-success-criterion-identity.sql +30 -0
- package/build/migrations/0039-review-decided-revision.sql +2 -0
- package/build/migrations/0039-workflow-operations.sql +12 -0
- package/build/migrations/0040-goal-check-carried-from.sql +2 -0
- package/build/package.json +1 -1
- package/build/prompts/act-on-review-core.md +5 -5
- package/build/prompts/act-on-review.md +1 -1
- package/build/prompts/draft-core.md +19 -7
- package/build/prompts/execute-core.md +15 -16
- package/build/prompts/review-core.md +4 -3
- package/build/px.mjs +1012 -1090
- package/build/px.mjs.map +4 -4
- package/build/sbom.json +32 -6
- package/build/web/assets/index-BQ-hgXcF.js +9 -0
- package/build/web/assets/index-Be2y914M.css +1 -0
- package/build/web/index.html +2 -2
- package/build/web/manifest.json +9 -9
- package/package.json +11 -5
- package/build/web/assets/index-HfrsWWLp.css +0 -1
- 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.
|
|
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:
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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,
|
|
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": "
|
|
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": "
|
|
14
|
+
"sha256": "e0f14f5d559391eccebd1a85da0c709c90ff74f04a5cb8809303f0d372a3bc86"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"key": "prompts/act-on-review.md",
|
|
18
|
-
"sha256": "
|
|
18
|
+
"sha256": "c3e7caaaaa110fd7da1b055a593d8f56a66cb8bb7bb70ccdb3f43250fba7e9d2"
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"key": "prompts/draft-core.md",
|
|
22
|
-
"sha256": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
}
|
package/build/config/agents.json
CHANGED
|
@@ -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"
|
|
6
|
+
"eligible": ["codex", "custom"],
|
|
7
7
|
"selection": "random"
|
|
8
8
|
},
|
|
9
9
|
"active": {
|
|
10
|
-
"eligible": ["codex", "claude", "custom"
|
|
10
|
+
"eligible": ["codex", "claude", "custom"],
|
|
11
11
|
"selection": "random"
|
|
12
12
|
},
|
|
13
13
|
"review": {
|
|
14
|
-
"eligible": ["codex", "claude", "custom"
|
|
14
|
+
"eligible": ["codex", "claude", "custom"],
|
|
15
15
|
"selection": "random"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
Binary file
|
package/build/manifest.sha256
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
53
|
+
de5ad6f1eef4b856e912865667cb738fc0716b707dd62068ef176f89f0bf3032 prompts/execute-core.md
|
|
41
54
|
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/execute.md
|
|
42
|
-
|
|
55
|
+
f0c58cd3d9853de4e2715f85d6e43a99c2820e84b86bc0f8f1c54d82618c457b prompts/review-core.md
|
|
43
56
|
06431c3f965935db27b254164d3bfa66aa7cc2a5602031f181dcc5e32f3e5739 prompts/review.md
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
57
|
+
1988a864fd84fd3f5e237936b0c09c4a63a4d98b21abba669435bed58af78a63 px.mjs
|
|
58
|
+
6dd177eaed4915152edca6c2fce37b9adb4024e3e394e008620ac21b85860158 px.mjs.map
|
|
59
|
+
ff1b3bac82f67dd6f05110e8b0a40413b0c9d066c29420b6beeaea4d13aa5eaa sbom.json
|
|
47
60
|
64ceff9f8a45d1769c8e70b0545a554065ffd285aa33b862447cb2ac70d28093 templates/mission-scaffold.md
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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 `
|
|
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,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,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,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');
|
package/build/package.json
CHANGED
|
@@ -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,
|
|
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}} --
|
|
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}} --
|
|
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}} --
|
|
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.
|
|
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.
|