@smartergpt/lexrunner 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changes/ci-debug-added.txt +1 -0
- package/.changeset/tsconfig-solution-build.md +5 -0
- package/.editorconfig +9 -0
- package/.env.example +8 -0
- package/.github/COST_EFFICIENCY.md +60 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
- package/.github/ISSUE_TEMPLATE/epic.yml +123 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +26 -0
- package/.github/ISSUE_TEMPLATE/issue-A1-gate-input-validation.md +380 -0
- package/.github/ISSUE_TEMPLATE/issue-B1-scope-validation.md +509 -0
- package/.github/ISSUE_TEMPLATE/issue-C1-command-whitelist.md +463 -0
- package/.github/ISSUE_TEMPLATE/subtask.yml +153 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +9 -0
- package/.github/copilot-instructions-old.md +429 -0
- package/.github/copilot-instructions.md +33 -0
- package/.github/instructions/tests.instructions.md +10 -0
- package/.github/workflows/auto-delete-merged-branches.yml +103 -0
- package/.github/workflows/benchmarks.yml +72 -0
- package/.github/workflows/ci-debug.yml +33 -0
- package/.github/workflows/ci.yml +167 -0
- package/.github/workflows/cli-smoke-test.yml +345 -0
- package/.github/workflows/copilot-setup-steps.yml +20 -0
- package/.github/workflows/frame-emission-gate.yml +242 -0
- package/.github/workflows/project-auto.yml +24 -0
- package/.github/workflows/release.yml +260 -0
- package/.github/workflows/slow-cli-tests.yml +37 -0
- package/.github/workflows/tag-guard.yml +44 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +2 -0
- package/.prettierignore +28 -0
- package/.prettierrc.json +10 -0
- package/.smartergpt/CONTROL_DECK_VISION.md +226 -0
- package/.smartergpt/allowed-commands.json +41 -0
- package/.smartergpt/allowed-commands.strict.json +56 -0
- package/.smartergpt/deliverables/.live.md +426 -0
- package/.smartergpt/deliverables/ISSUE_STATUS_2025-12-28.md +193 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/ADR_DISCUSSION.md +379 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_claude-haiku.md +109 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_gemini-flash.md +42 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_gpt-codex-mini.md +19 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Answer_raptor-mini.md +37 -0
- package/.smartergpt/deliverables/_research/snapshot-contract-feedback/Question.md +37 -0
- package/.smartergpt/deliverables/merge-weave-04469e41-24ba-4ed5-b0ff-13c7ea12858d.ndjson +2 -0
- package/.smartergpt/deps.yml +3 -0
- package/.smartergpt/docs/fanout-templates.md +213 -0
- package/.smartergpt/docs/merge-weave-interventions.md +261 -0
- package/.smartergpt/docs/test-fix-patterns.md +240 -0
- package/.smartergpt/fanout-templates.yml +263 -0
- package/.smartergpt/gates.yml +9 -0
- package/.smartergpt/intent.md +1 -0
- package/.smartergpt/issues/QOL-001-analysis-script-filtering.md +36 -0
- package/.smartergpt/issues/QOL-002-log-retention-policy.md +92 -0
- package/.smartergpt/issues/QOL-003-realtime-console-feedback.md +44 -0
- package/.smartergpt/issues/QOL-004-governance-report-cli.md +44 -0
- package/.smartergpt/issues/QOL-005-schema-versioning.md +46 -0
- package/.smartergpt/issues/QOL-006-debug-verbose-mode.md +45 -0
- package/.smartergpt/issues/QOL-COMPLETION-REPORT.md +359 -0
- package/.smartergpt/issues/QOL-REVIEW-SUMMARY.md +111 -0
- package/.smartergpt/issues/QOL-ROADMAP.md +71 -0
- package/.smartergpt/merge-policy.yml +41 -0
- package/.smartergpt/merge-weave-policy.yml +255 -0
- package/.smartergpt/o1.json +0 -0
- package/.smartergpt/o2.json +0 -0
- package/.smartergpt/personas/eager-pm.md +123 -0
- package/.smartergpt/personas/example.md +81 -0
- package/.smartergpt/personas/senior-dev.md +107 -0
- package/.smartergpt/profile.yml +2 -0
- package/.smartergpt/prompts/create-project.md +112 -0
- package/.smartergpt/prompts/idea.md +64 -0
- package/.smartergpt/pull-request-template.md +25 -0
- package/.smartergpt/schemas/behavior-rule.schema.d.ts +54 -0
- package/.smartergpt/schemas/behavior-rule.schema.js +56 -0
- package/.smartergpt/schemas/behavior-rule.schema.json +105 -0
- package/.smartergpt/schemas/behavior-rule.schema.ts +60 -0
- package/.smartergpt/schemas/execution-plan-v1.d.ts +47 -0
- package/.smartergpt/schemas/execution-plan-v1.js +22 -0
- package/.smartergpt/schemas/execution-plan-v1.json +113 -0
- package/.smartergpt/schemas/execution-plan-v1.ts +32 -0
- package/.smartergpt/schemas/execution-plan.schema.json +116 -0
- package/.smartergpt/schemas/feature-spec-v0.d.ts +13 -0
- package/.smartergpt/schemas/feature-spec-v0.js +12 -0
- package/.smartergpt/schemas/feature-spec-v0.json +58 -0
- package/.smartergpt/schemas/feature-spec-v0.ts +16 -0
- package/.smartergpt/schemas/feature-spec.schema.json +111 -0
- package/.smartergpt/schemas/gates.schema.d.ts +48 -0
- package/.smartergpt/schemas/gates.schema.js +20 -0
- package/.smartergpt/schemas/gates.schema.json +47 -0
- package/.smartergpt/schemas/gates.schema.ts +26 -0
- package/.smartergpt/schemas/idea.schema.json +81 -0
- package/.smartergpt/schemas/runner.scope.schema.d.ts +54 -0
- package/.smartergpt/schemas/runner.scope.schema.js +28 -0
- package/.smartergpt/schemas/runner.scope.schema.json +75 -0
- package/.smartergpt/schemas/runner.scope.schema.ts +36 -0
- package/.smartergpt/schemas/runner.stack.schema.d.ts +40 -0
- package/.smartergpt/schemas/runner.stack.schema.js +21 -0
- package/.smartergpt/schemas/runner.stack.schema.json +51 -0
- package/.smartergpt/schemas/runner.stack.schema.ts +27 -0
- package/.smartergpt/scope.yml +11 -0
- package/.smartergpt/stack.yml +16 -0
- package/.smartergpt/test-fix-patterns.yml +106 -0
- package/.tool-versions +13 -0
- package/AGENTS.md +402 -0
- package/CHANGELOG.md +256 -0
- package/CLAUDE.md +484 -0
- package/CONTRIBUTING.md +345 -0
- package/EAGER_PM_FANOUT_ANALYSIS.md +283 -0
- package/FAQ.md +292 -0
- package/FIXTURE_LIBRARY_SUMMARY.md +327 -0
- package/IMPLEMENTATION_SUMMARY.md +222 -0
- package/LICENSE +21 -0
- package/MANUAL_TEST_GUIDE.md +229 -0
- package/MCP-ALIGNMENT-SUMMARY.md +261 -0
- package/MCP-CONFIG.md +125 -0
- package/MERGE_WEAVE_QUICKSTART.md +450 -0
- package/MERGE_WEAVE_SUMMARY.md +259 -0
- package/MERGE_WEAVE_USAGE_GUIDE.md +368 -0
- package/NOTICE.md +43 -0
- package/README.mcp.md +770 -0
- package/README.md +1069 -0
- package/TEST_INFRASTRUCTURE_ASSESSMENT.md +225 -0
- package/bootstrap-lexrunner.sh +396 -0
- package/dist/api-7H7SJZIX.js +15 -0
- package/dist/api-U3X2WA6D.js +15 -0
- package/dist/audit-2TZ2LU72.js +60 -0
- package/dist/audit-5HH5BMKI.js +60 -0
- package/dist/audit-6K5K333I.js +60 -0
- package/dist/audit-DYQWS57J.js +60 -0
- package/dist/audit-JBWZ2GZ2.js +60 -0
- package/dist/audit-SJF3434D.js +60 -0
- package/dist/audit-TICGGVX5.js +60 -0
- package/dist/audit-YOBB27PY.js +60 -0
- package/dist/autopilot-3GAVXWWC.js +45 -0
- package/dist/autopilot-43NOYVQA.js +45 -0
- package/dist/autopilot-4UA3OWLU.js +45 -0
- package/dist/autopilot-54TK5CCG.js +45 -0
- package/dist/autopilot-5BHC2UQT.js +45 -0
- package/dist/autopilot-ABZUCVGY.js +45 -0
- package/dist/autopilot-ACJZP47Y.js +45 -0
- package/dist/autopilot-AL5F5AUS.js +46 -0
- package/dist/autopilot-BO67FWUC.js +45 -0
- package/dist/autopilot-BR6W4GEX.js +45 -0
- package/dist/autopilot-FOR2UKRY.js +45 -0
- package/dist/autopilot-GDTTXHEQ.js +45 -0
- package/dist/autopilot-GEAMFZBM.js +45 -0
- package/dist/autopilot-HDMBRZE6.js +45 -0
- package/dist/autopilot-IKI2Y6S4.js +44 -0
- package/dist/autopilot-ILTBWWOL.js +46 -0
- package/dist/autopilot-KI3MXIFI.js +44 -0
- package/dist/autopilot-LWNPZC3J.js +45 -0
- package/dist/autopilot-LXPJ4ZXF.js +45 -0
- package/dist/autopilot-MDIFIONK.js +46 -0
- package/dist/autopilot-NW3LDP6M.js +45 -0
- package/dist/autopilot-OKTSCG35.js +45 -0
- package/dist/autopilot-OR5PF5PD.js +45 -0
- package/dist/autopilot-PE65SBGN.js +45 -0
- package/dist/autopilot-PW7I4B6W.js +45 -0
- package/dist/autopilot-QMLBL5P6.js +45 -0
- package/dist/autopilot-QSN6ZU5O.js +45 -0
- package/dist/autopilot-R7EZJOGI.js +46 -0
- package/dist/autopilot-T544CPPD.js +44 -0
- package/dist/autopilot-TNQB6VGJ.js +44 -0
- package/dist/autopilot-UVIYCR6K.js +45 -0
- package/dist/autopilot-W3ZTTSH3.js +45 -0
- package/dist/autopilot-XPKWOFXO.js +44 -0
- package/dist/autopilot-XRX4QWRM.js +44 -0
- package/dist/autopilot-Y3BAGNI5.js +44 -0
- package/dist/autopilot-ZE64XW2K.js +44 -0
- package/dist/chunk-2ESYSVXG.js +48 -0
- package/dist/chunk-2VR554P7.js +668 -0
- package/dist/chunk-37DOWIVT.js +1084 -0
- package/dist/chunk-3DU2DWUP.js +400 -0
- package/dist/chunk-3DVXIZFM.js +11166 -0
- package/dist/chunk-3FABZF4V.js +811 -0
- package/dist/chunk-4FFGNTAV.js +515 -0
- package/dist/chunk-4GEC4HC3.js +11221 -0
- package/dist/chunk-4RVZNLD4.js +628 -0
- package/dist/chunk-55VWJYZY.js +39 -0
- package/dist/chunk-5CGWZH5X.js +340 -0
- package/dist/chunk-5QKWKK4M.js +11794 -0
- package/dist/chunk-5Z3XHND7.js +11755 -0
- package/dist/chunk-6A4IE3TI.js +302 -0
- package/dist/chunk-6KK5JFFE.js +106 -0
- package/dist/chunk-6YC2VSLE.js +11252 -0
- package/dist/chunk-7C4K2SHD.js +668 -0
- package/dist/chunk-ANXY4RGA.js +11091 -0
- package/dist/chunk-ASHKNUBR.js +11312 -0
- package/dist/chunk-B3OYDPOP.js +11793 -0
- package/dist/chunk-DBH7SQ2S.js +1084 -0
- package/dist/chunk-DEI7A5B4.js +11449 -0
- package/dist/chunk-DM4GHY3J.js +92 -0
- package/dist/chunk-EQKFCZLH.js +9823 -0
- package/dist/chunk-FAIJPBT5.js +40 -0
- package/dist/chunk-FDDKUDXR.js +11166 -0
- package/dist/chunk-FEAR6ETG.js +438 -0
- package/dist/chunk-FNBAHK5V.js +72 -0
- package/dist/chunk-FXL74C73.js +523 -0
- package/dist/chunk-GLJEDX4L.js +10247 -0
- package/dist/chunk-GTP4OHD7.js +1107 -0
- package/dist/chunk-HIHH7IVO.js +10557 -0
- package/dist/chunk-I3VXUVCB.js +10474 -0
- package/dist/chunk-I6BIFVWI.js +10519 -0
- package/dist/chunk-I72TRUTJ.js +1084 -0
- package/dist/chunk-J5B5KT2F.js +368 -0
- package/dist/chunk-JMTULZ66.js +11743 -0
- package/dist/chunk-JXIQ7HCK.js +11166 -0
- package/dist/chunk-K6HVPBDP.js +10692 -0
- package/dist/chunk-KBT5Y666.js +521 -0
- package/dist/chunk-LETPROKG.js +11092 -0
- package/dist/chunk-LLMY2BZF.js +1084 -0
- package/dist/chunk-NMNL4US2.js +1084 -0
- package/dist/chunk-O2XRP7JK.js +10247 -0
- package/dist/chunk-OGPWLFFO.js +11201 -0
- package/dist/chunk-OQJUWTZV.js +51 -0
- package/dist/chunk-PJRWPLQ6.js +669 -0
- package/dist/chunk-PYRVUCJR.js +370 -0
- package/dist/chunk-Q6Y524KH.js +669 -0
- package/dist/chunk-QF7DM5VW.js +106 -0
- package/dist/chunk-QGM4M3NI.js +37 -0
- package/dist/chunk-QIIELFTL.js +1107 -0
- package/dist/chunk-QUW6N7GR.js +10264 -0
- package/dist/chunk-QZASNLQX.js +11223 -0
- package/dist/chunk-RMN4IAWO.js +11808 -0
- package/dist/chunk-RN5NHU37.js +11465 -0
- package/dist/chunk-RNG3RILO.js +11755 -0
- package/dist/chunk-RSA6DEB4.js +9748 -0
- package/dist/chunk-RURYWSMX.js +10524 -0
- package/dist/chunk-SUEXK5U7.js +11201 -0
- package/dist/chunk-TVUF55OH.js +11807 -0
- package/dist/chunk-U5MMENCP.js +456 -0
- package/dist/chunk-U62I2R2D.js +434 -0
- package/dist/chunk-UHFMFO54.js +21 -0
- package/dist/chunk-UNZBDSEU.js +11166 -0
- package/dist/chunk-UOATTNQP.js +334 -0
- package/dist/chunk-UZFYNSMJ.js +334 -0
- package/dist/chunk-VP37GLU6.js +1084 -0
- package/dist/chunk-W6WDKBWO.js +11453 -0
- package/dist/chunk-XBKUFNVF.js +10745 -0
- package/dist/chunk-XOLVQTIE.js +670 -0
- package/dist/chunk-XVFTBVDS.js +257 -0
- package/dist/chunk-YABA7DB6.js +11091 -0
- package/dist/chunk-YWCJX5KL.js +10557 -0
- package/dist/chunk-Z5GP7FSR.js +309 -0
- package/dist/chunk-ZBT3DATZ.js +296 -0
- package/dist/chunk-ZDBAZXUQ.js +11201 -0
- package/dist/chunk-ZEMABYS4.js +92 -0
- package/dist/chunk-ZOA4HT7P.js +662 -0
- package/dist/cli.cjs +40431 -0
- package/dist/cli.d.cts +2709 -0
- package/dist/cli.d.ts +2709 -0
- package/dist/cli.js +21149 -0
- package/dist/commandValidator-42OUDFZ4.js +140 -0
- package/dist/commandValidator-7LQHTYL5.js +140 -0
- package/dist/commandValidator-AT5OYZFC.js +142 -0
- package/dist/commandValidator-DH3CX2OW.js +140 -0
- package/dist/commandValidator-GCQC7H4A.js +140 -0
- package/dist/commandValidator-K6VWB6O3.js +140 -0
- package/dist/commandValidator-L6WNDBYB.js +129 -0
- package/dist/commandValidator-O3KSNXD2.js +140 -0
- package/dist/commandValidator-ZHMUA5RQ.js +140 -0
- package/dist/constraints-M52FVL2X.js +11 -0
- package/dist/dist-CSOR2BL2.js +1144 -0
- package/dist/dist-PKOIS5NZ.js +1144 -0
- package/dist/fileAnalysis-3VMDDJ6I.js +9 -0
- package/dist/fileAnalysis-4QLHUT44.js +9 -0
- package/dist/fileAnalysis-H6M2Z7ZC.js +9 -0
- package/dist/fileAnalysis-HMI7IL6S.js +9 -0
- package/dist/fileAnalysis-JHABOPUQ.js +9 -0
- package/dist/gateMapping-E5MGNJH5.js +17 -0
- package/dist/jsonEnvelope-R4SWKX2N.js +62 -0
- package/dist/mergeTreeSimulator-ATOPJ3DU.js +11 -0
- package/dist/mergeTreeSimulator-AYUK4TZT.js +11 -0
- package/dist/mergeTreeSimulator-BBWJUQBK.js +11 -0
- package/dist/mergeTreeSimulator-DJJDRB5N.js +11 -0
- package/dist/mergeTreeSimulator-X4BA647P.js +11 -0
- package/dist/planDiff-37QHCPKO.js +109 -0
- package/dist/planDiff-BQHIUARB.js +109 -0
- package/dist/planDiff-QOK6KNB7.js +111 -0
- package/dist/planDiff-RXR4CWFS.js +109 -0
- package/dist/planDiff-W2BTH2MU.js +109 -0
- package/dist/planHistory-4J3Q6AJ3.js +126 -0
- package/dist/planHistory-DQRSB2Y7.js +118 -0
- package/dist/planHistory-GLCXP6AB.js +126 -0
- package/dist/planHistory-SMNRLEKG.js +126 -0
- package/dist/planHistory-UO4WZ6GO.js +126 -0
- package/dist/planReview-7BWVLABC.js +377 -0
- package/dist/planReview-7VB3OYKZ.js +385 -0
- package/dist/planReview-FAIBIAE6.js +377 -0
- package/dist/planReview-FXQBDNKJ.js +376 -0
- package/dist/planReview-HO4YYETA.js +377 -0
- package/dist/planReview-I26EKCUK.js +376 -0
- package/dist/planReview-JBOAJHSU.js +377 -0
- package/dist/planReview-SCNZWC6B.js +376 -0
- package/dist/planReview-TU7LMZIY.js +376 -0
- package/dist/planViewer-2YZCPVDM.js +155 -0
- package/dist/planViewer-72WZFUTU.js +154 -0
- package/dist/planViewer-G546TVHV.js +154 -0
- package/dist/planViewer-I7ZHNJQF.js +150 -0
- package/dist/planViewer-IRXHOY5U.js +155 -0
- package/dist/planViewer-IX2ICW45.js +154 -0
- package/dist/planViewer-PDWPUOP6.js +155 -0
- package/dist/planViewer-PEOADAGZ.js +155 -0
- package/dist/planViewer-PFYDEG6V.js +150 -0
- package/dist/planViewer-UIPOSRVW.js +151 -0
- package/dist/planViewer-V2JUKV7Q.js +154 -0
- package/dist/sarif-46TKOOJZ.js +9 -0
- package/dist/sarif-63JKTFFI.js +9 -0
- package/dist/sarif-CIYIWUNC.js +9 -0
- package/dist/sarif-OGAGDL6B.js +9 -0
- package/dist/sarif-XIREI5B5.js +9 -0
- package/dist/security-3V6FKJDA.js +423 -0
- package/dist/security-4JMEUM56.js +423 -0
- package/dist/security-QHPEWY5G.js +423 -0
- package/dist/security-V2LAL5TP.js +415 -0
- package/dist/security-WTASK6T6.js +423 -0
- package/dist/security-XE4GHVJD.js +423 -0
- package/dist/security-XLXM3UHT.js +423 -0
- package/dist/security-YDLHSMVY.js +441 -0
- package/dist/security-ZDAEZF7D.js +423 -0
- package/dist/signing-3EI734L4.js +14 -0
- package/dist/signing-5G7K6JXJ.js +14 -0
- package/dist/signing-7DK7SABM.js +14 -0
- package/dist/signing-JJJOUGCW.js +14 -0
- package/dist/signing-OAJ3MXGA.js +14 -0
- package/dist/verify-5F6PUXUQ.js +62 -0
- package/dist/verify-5ILURHV2.js +62 -0
- package/dist/verify-MRDZJUGO.js +62 -0
- package/dist/verify-SCUHB3SA.js +62 -0
- package/dist/verify-YZRHN2D3.js +62 -0
- package/docs/1.0.0-vertical-slice.md +214 -0
- package/docs/ADR-007-INTEGRATION-SUMMARY.md +232 -0
- package/docs/ALIASING_FOR_LEXRUNNER.md +709 -0
- package/docs/ALIASING_FOR_RUNNER.md +552 -0
- package/docs/AX.md +317 -0
- package/docs/CHECKPOINT_RESUME.md +208 -0
- package/docs/CLI_VERBS.md +219 -0
- package/docs/CONFLICT_DETECTION.md +198 -0
- package/docs/DISCIPLINED_FAILURE.md +224 -0
- package/docs/ENVIRONMENT_QUALITY.md +155 -0
- package/docs/ERROR_CODES.md +528 -0
- package/docs/EVENT_SCHEMA.md +659 -0
- package/docs/EXE-012-investigation-summary.md +300 -0
- package/docs/GATE_ATTESTATION_GUIDE.md +237 -0
- package/docs/JSON_OUTPUT_SCHEMAS.md +347 -0
- package/docs/LEXRUNNER_ALIASING.md +444 -0
- package/docs/LEX_INTEGRATION.md +83 -0
- package/docs/LEX_PUBLIC_API.md +306 -0
- package/docs/LICENSING.md +119 -0
- package/docs/MCP-CLI-PARITY.md +410 -0
- package/docs/MCP-MIGRATION.md +258 -0
- package/docs/MCP-PARITY.md +234 -0
- package/docs/MEMORY_TOOLS.md +278 -0
- package/docs/MERGE_WEAVE_SETUP.md +643 -0
- package/docs/MIGRATION_v0.1.md +760 -0
- package/docs/NAMING_CONVENTIONS.md +82 -0
- package/docs/PERSONA_FOUNDATION.md +124 -0
- package/docs/PHASE3_MEMORY_GUIDE.md +122 -0
- package/docs/PLAN_LOCK.md +114 -0
- package/docs/README.md +289 -0
- package/docs/RUNNER_LIFECYCLE.md +257 -0
- package/docs/SAFETY_MECHANISMS.md +325 -0
- package/docs/SECURITY_IMPLEMENTATION.md +535 -0
- package/docs/TERMS.md +34 -0
- package/docs/TOKEN_TRACKING.md +162 -0
- package/docs/WORKFLOW_GUIDANCE.md +277 -0
- package/docs/adr/ADR-000-product-naming-and-branding.md +115 -0
- package/docs/adr/ADR-001-plan-json-frozen-input.md +68 -0
- package/docs/adr/ADR-002-two-track-separation.md +84 -0
- package/docs/adr/ADR-003-gate-uniform-execution.md +69 -0
- package/docs/adr/ADR-004-runner-state-model.md +75 -0
- package/docs/adr/ADR-005-merge-pyramid-ordering.md +87 -0
- package/docs/adr/ADR-006-schema-versioning-semver.md +81 -0
- package/docs/adr/ADR-007-task-snapshot-contract.md +503 -0
- package/docs/adr/ADR-008-lex-packaging.md +243 -0
- package/docs/adr/ADR-009-ax-test-output-adapters.md +440 -0
- package/docs/adr/README.md +32 -0
- package/docs/advanced-cli.md +436 -0
- package/docs/agent-stall-detection.md +278 -0
- package/docs/architecture/executors.md +190 -0
- package/docs/architecture.md +316 -0
- package/docs/attestation/AX-SHARED-PLEDGE.md +83 -0
- package/docs/attestation/AX-SHARED-PLEDGE_v1.0.0.md +99 -0
- package/docs/attestation/AX-SHARED-PLEDGE_v1.0.0_VERIFICATION.md +115 -0
- package/docs/attestation/Lex_Guff_Version_Contract_Pact_v1.0.0.md +181 -0
- package/docs/attestation/README.md +87 -0
- package/docs/attestation/ax_pledge_2025-12-02.ots +0 -0
- package/docs/attestation/ax_pledge_timestamp_response.tsr +0 -0
- package/docs/attestation/copilot_summarization_2025-12-01.ots +0 -0
- package/docs/attestation/copilot_summarization_2025-12-01_VERIFICATION.md +100 -0
- package/docs/attestation/copilot_summarization_behavior_observation_2025-12-01.md +85 -0
- package/docs/attestation/copilot_summarization_screenshot_2025-12-01.png +0 -0
- package/docs/attestation/employment_separation_2025-11-26.ots +0 -0
- package/docs/attestation/employment_timestamp_response.tsr +0 -0
- package/docs/attestation/freetsa_cacert.pem +45 -0
- package/docs/attestation/freetsa_tsa.crt +45 -0
- package/docs/attestation/lex_employment_separation_2025-11-26.md +85 -0
- package/docs/attestation/lex_employment_separation_2025-11-26_VERIFICATION.md +126 -0
- package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft.md +350 -0
- package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft.md.ots +0 -0
- package/docs/attestation/patent/2025-12-07-shadow-governance-pct-draft_VERIFICATION.md +130 -0
- package/docs/attestation/patent/README.md +75 -0
- package/docs/attestation/patent/fig1_write_path.svg +58 -0
- package/docs/attestation/patent/fig2_read_normalize_rollup.svg +92 -0
- package/docs/attestation/timestamp_response.tsr +0 -0
- package/docs/attribution-README.md +264 -0
- package/docs/audit-compliance.md +283 -0
- package/docs/audit-outputs.md +1213 -0
- package/docs/audit-sdk.md +1134 -0
- package/docs/autopilot-levels.md +368 -0
- package/docs/autopilot.md +288 -0
- package/docs/ci-cd-integration.md +580 -0
- package/docs/ci-integration-guide.md +369 -0
- package/docs/ci-version-validation.md +198 -0
- package/docs/cli-mcp-weave-reporting.md +462 -0
- package/docs/cli.md +2262 -0
- package/docs/cluster-gates-rollback.md +222 -0
- package/docs/command-creation-guide.md +485 -0
- package/docs/command-whitelist.md +490 -0
- package/docs/commands/idea.md +253 -0
- package/docs/config.md +245 -0
- package/docs/conflict-clustering.md +225 -0
- package/docs/conflict-predictor.md +359 -0
- package/docs/context-diet.md +249 -0
- package/docs/counter-examples.md +199 -0
- package/docs/create-project.md +211 -0
- package/docs/deliverables-generator.md +299 -0
- package/docs/deliverables-management.md +474 -0
- package/docs/dependency-parser.md +354 -0
- package/docs/determinism.md +299 -0
- package/docs/diffgraph-planner.md +1211 -0
- package/docs/dogfood/README.md +33 -0
- package/docs/dogfood/wave-3-results.md +303 -0
- package/docs/dogfood-merge-weave-script.md +224 -0
- package/docs/enterprise-onboarding.md +291 -0
- package/docs/environment-variables.md +625 -0
- package/docs/error-recovery.md +466 -0
- package/docs/errors.md +288 -0
- package/docs/executor-authoring.md +854 -0
- package/docs/executor-decoupling.md +410 -0
- package/docs/front-end-capture-pipeline.md +312 -0
- package/docs/gate-report-examples.md +380 -0
- package/docs/gates.md +319 -0
- package/docs/github-automation.md +128 -0
- package/docs/governance-metrics.md +368 -0
- package/docs/integrations/README.md +588 -0
- package/docs/interactive-plan-review.md +493 -0
- package/docs/issue-orchestration.md +256 -0
- package/docs/lex_ax_session_key_rememberings_v0.1.md +195 -0
- package/docs/lexrunner-v1-summary.md +246 -0
- package/docs/lexrunner-v2-contract.md +404 -0
- package/docs/lexrunner-v2-migration-plan.md +388 -0
- package/docs/lexrunner-v2-salvage-map.md +355 -0
- package/docs/lexsona-rules.md +154 -0
- package/docs/merge-weave-analysis.md +403 -0
- package/docs/merge-weave-quickstart.md +770 -0
- package/docs/merge-weave-state-machine.md +390 -0
- package/docs/migration-guide.md +529 -0
- package/docs/monitoring-examples.md +470 -0
- package/docs/monitoring-implementation.md +252 -0
- package/docs/orchestration.md +234 -0
- package/docs/performance-scale.md +359 -0
- package/docs/plan-generation.md +407 -0
- package/docs/profile-resolution.md +455 -0
- package/docs/prompts.md +427 -0
- package/docs/quickstart.md +546 -0
- package/docs/release-process.md +310 -0
- package/docs/sample-prompts/merge-weave/cli-merge-weave-kickoff.md +274 -0
- package/docs/sample-prompts/merge-weave/mcp-merge-weave-kickoff.md +480 -0
- package/docs/sample-prompts/merge-weave/standalone-merge-weave-kickoff.md +237 -0
- package/docs/schemas.md +359 -0
- package/docs/scope-validation.md +444 -0
- package/docs/security/rotation-guide.md +325 -0
- package/docs/specs/Meeting_Control_Stack_Concept_v0.1.0.md +417 -0
- package/docs/specs/git-feature-flag-redesign.md +321 -0
- package/docs/specs/lex-pr-brief-behavior.md +269 -0
- package/docs/specs/smartergpt-structure-v1.md +705 -0
- package/docs/specs/task-brief-v0.1.md +224 -0
- package/docs/store-architecture.md +61 -0
- package/docs/templates/CONTRIBUTING-merge-weave-section.md +33 -0
- package/docs/templates/gates.example.yml +109 -0
- package/docs/templates/plan.example.json +77 -0
- package/docs/thesis/00-EVOLUTION-NOTES.md +383 -0
- package/docs/thesis/01-CORE-THESIS.md +285 -0
- package/docs/thesis/02-TURN-COST.md +498 -0
- package/docs/thesis/03-PERMISSION-TO-FAIL.md +581 -0
- package/docs/thesis/04-CROSS-MODEL-CONTINUITY.md +517 -0
- package/docs/thesis/05-RULE-FILE-SPEC.md +732 -0
- package/docs/thesis/06-CAPABILITY-TIERS.md +723 -0
- package/docs/thesis/07-ROBERT-FIELD-REPORT.md +433 -0
- package/docs/thesis/08-IMPLEMENTATION-GUIDE.md +1093 -0
- package/docs/thesis/09-METRICS-AND-TELEMETRY.md +793 -0
- package/docs/thesis/10-FAILURE-MODES.md +716 -0
- package/docs/thesis/README.md +151 -0
- package/docs/thesis/lex_governance-collab_systems_paper_draft.md +952 -0
- package/docs/thesis/lex_governance-collab_systems_paper_draft.pdf +0 -0
- package/docs/tool-grounded/READINESS_ANALYSIS.md +527 -0
- package/docs/tool-grounded/enforcement.md +361 -0
- package/docs/tool-grounded/tool-grounded-a-view-from-the-inside.md +437 -0
- package/docs/tool-grounded/tool-grounded-prompt.md +122 -0
- package/docs/tool-grounded/tool-grounded-run-centric.md +474 -0
- package/docs/troubleshooting-planner.md +910 -0
- package/docs/troubleshooting.md +745 -0
- package/docs/tutorials/README.md +201 -0
- package/docs/tutorials/diffgraph-planner/01-simple-stack.md +460 -0
- package/docs/tutorials/diffgraph-planner/02-diamond-pattern.md +431 -0
- package/docs/tutorials/diffgraph-planner/03-large-batch.md +525 -0
- package/docs/tutorials/diffgraph-planner/04-fixing-cycles.md +526 -0
- package/docs/tutorials/diffgraph-planner/05-hybrid-workflow.md +555 -0
- package/docs/tutorials/quick-merge-pyramid.md +364 -0
- package/docs/tutorials/video-scripts/01-getting-started.md +286 -0
- package/docs/tutorials/video-scripts/02-understanding-dependencies.md +376 -0
- package/docs/weave-contract.md +116 -0
- package/docs/weave-execution-log.md +153 -0
- package/docs/workflows/README.md +139 -0
- package/docs/workflows/enterprise.md +545 -0
- package/docs/workflows/small-team.md +398 -0
- package/docs/workflows/solo-developer.md +419 -0
- package/dogfood-merge-weave.sh +122 -0
- package/examples/README.md +22 -0
- package/examples/WORKING_EXAMPLE.md +309 -0
- package/examples/analyze-pr-files.js +100 -0
- package/examples/autopilot-level4-example.md +234 -0
- package/examples/cluster-gates-demo.sh +178 -0
- package/examples/complete-security-workflow.ts +248 -0
- package/examples/error-recovery/README.md +202 -0
- package/examples/executor-manifest.example.yaml +81 -0
- package/examples/front-end-capture-pipeline/README.md +99 -0
- package/examples/front-end-capture-pipeline/create-project-example.sh +83 -0
- package/examples/front-end-capture-pipeline/idea-dark-mode.json +14 -0
- package/examples/front-end-capture-pipeline/idea-example.sh +57 -0
- package/examples/front-end-capture-pipeline/manual-test-checklist.md +426 -0
- package/examples/gates/README.md +165 -0
- package/examples/gates/lint-gate.sh +40 -0
- package/examples/gates/lint-gate.ts +99 -0
- package/examples/gates/test-runner.ts +113 -0
- package/examples/gates/vuln-scanner.ts +95 -0
- package/examples/github-integration/README.md +111 -0
- package/examples/github-integration/example-plan.json +95 -0
- package/examples/performance-config.md +388 -0
- package/examples/profile-setup/.gitignore.template +66 -0
- package/examples/profile-setup/.smartergpt-example/README.md +190 -0
- package/examples/profile-setup/.smartergpt.local-example/README.md +365 -0
- package/examples/profile-setup/README.md +492 -0
- package/examples/profile-setup/cross-repo-prompts/README.md +606 -0
- package/examples/safety-framework-demo.ts +130 -0
- package/examples/safety-mechanisms-example.ts +191 -0
- package/examples/sample-plan.json +87 -0
- package/examples/sample-stack.yml +66 -0
- package/examples/sarif/README.md +224 -0
- package/examples/scope-validation-demo.ts +199 -0
- package/examples/security-integration.ts +293 -0
- package/examples/token-tracking-example.ts +71 -0
- package/executors/senior-dev/ARCHITECTURE.md +182 -0
- package/executors/senior-dev/MEMORY_INTEGRATION.md +236 -0
- package/executors/senior-dev/QUICK_START.md +145 -0
- package/executors/senior-dev/README.md +76 -0
- package/executors/senior-dev/examples/sample-review-session.md +228 -0
- package/executors/senior-dev/executor-manifest.yaml +79 -0
- package/executors/senior-dev/prompts/code-review.prompt.md +78 -0
- package/executors/senior-dev/prompts/mentorship-feedback.prompt.md +97 -0
- package/executors/senior-dev/prompts/pattern-recognition.prompt.md +80 -0
- package/executors/senior-dev/prompts/pr-analysis.prompt.md +75 -0
- package/executors/senior-dev/scripts/capture-review-frame.sh +129 -0
- package/executors/senior-dev/scripts/prepare-review-context.sh +61 -0
- package/executors/senior-dev/scripts/recall-context.sh +87 -0
- package/lexrunner-launcher.sh +12 -0
- package/mcp-config-example.json +14 -0
- package/mcp-server.mjs +1221 -0
- package/merge-weave-current-prs.md +170 -0
- package/merge-weave-dogfood.json +46 -0
- package/merge-weave-plan.json +56 -0
- package/package.json +140 -0
- package/procedures/merge-weave-main.yaml +90 -0
- package/procedures/pr-review.yaml +68 -0
- package/project/README.md +50 -0
- package/prompts/tool-grounded-mode.md +185 -0
- package/schemas/allowed-commands.schema.json +108 -0
- package/schemas/audit-events.schema.json +138 -0
- package/schemas/audit-events.v1.0.0.schema.json +138 -0
- package/schemas/edit-plan.schema.json +80 -0
- package/schemas/executor-manifest.schema.json +236 -0
- package/schemas/flake-report.schema.json +95 -0
- package/schemas/gate-report.schema.json +85 -0
- package/schemas/gates/build.schema.json +32 -0
- package/schemas/gates/coverage.schema.json +42 -0
- package/schemas/gates/lint.schema.json +34 -0
- package/schemas/gates/security-scan.schema.json +33 -0
- package/schemas/gates/test.schema.json +35 -0
- package/schemas/next-option.schema.json +60 -0
- package/schemas/persona-snapshot.schema.json +66 -0
- package/schemas/plan.schema.json +300 -0
- package/schemas/status-response.schema.json +193 -0
- package/scripts/README.md +354 -0
- package/scripts/analyze-governance-logs.mjs +51 -0
- package/scripts/benchmark-ci.ts +339 -0
- package/scripts/check-determinism.sh +23 -0
- package/scripts/check-license-compliance.mjs +319 -0
- package/scripts/check-release-drift.mjs +81 -0
- package/scripts/ci-debug.sh +24 -0
- package/scripts/ci-smoke.mjs +304 -0
- package/scripts/create-sample-repo.sh +245 -0
- package/scripts/dogfood-merge-weave.sh +552 -0
- package/scripts/gen_mcp_servers.py +252 -0
- package/scripts/generate-executor-manifest-schema.ts +30 -0
- package/scripts/generate-flake-schema.ts +32 -0
- package/scripts/generate-gate-schema.ts +32 -0
- package/scripts/generate-plan-schema.ts +30 -0
- package/scripts/generate-run-schemas.ts +69 -0
- package/scripts/load-prompt.mjs +147 -0
- package/scripts/merge-weave-wrapper.sh +445 -0
- package/scripts/merge-weave.sh +489 -0
- package/scripts/metrics-template.ts +134 -0
- package/scripts/package-lex.sh +267 -0
- package/scripts/quick-start-merge-weave.sh +218 -0
- package/scripts/release-prepare.ts +350 -0
- package/scripts/rotate-secrets-example.ts +134 -0
- package/scripts/test-lexsona-shadow.mjs +100 -0
- package/scripts/validate-manifests.ts +188 -0
- package/scripts/verify-audit-phase2.js +175 -0
- package/src/ai/README.md +456 -0
- package/src/ai/conflictStrategy.ts +223 -0
- package/src/ai/conflictStrategyCache.ts +164 -0
- package/src/ai/conflictStrategyPrompt.ts +128 -0
- package/src/ai/conflictStrategySchema.ts +165 -0
- package/src/ai/heuristicFallback.ts +162 -0
- package/src/ai/index.ts +64 -0
- package/src/ai/riskScoring.ts +174 -0
- package/src/aliases/index.ts +16 -0
- package/src/aliases/resolver.ts +212 -0
- package/src/audit/context.ts +284 -0
- package/src/audit/emitter.ts +685 -0
- package/src/audit/events.ts +210 -0
- package/src/audit/gateMatrix.ts +158 -0
- package/src/audit/index.ts +44 -0
- package/src/audit/manifest.ts +78 -0
- package/src/audit/profiles.ts +93 -0
- package/src/audit/redaction.ts +216 -0
- package/src/audit/sarif.ts +213 -0
- package/src/audit/schema/events.ts +366 -0
- package/src/audit/schema/manifest.ts +47 -0
- package/src/audit/schema.ts +159 -0
- package/src/audit/sdk/index.ts +145 -0
- package/src/audit/sdk/types.ts +88 -0
- package/src/audit/sidecar.ts +111 -0
- package/src/audit/signing.ts +521 -0
- package/src/autopilot/README.md +113 -0
- package/src/autopilot/artifacts.ts +287 -0
- package/src/autopilot/base.ts +132 -0
- package/src/autopilot/deliverables.ts +392 -0
- package/src/autopilot/index.ts +29 -0
- package/src/autopilot/level1.ts +187 -0
- package/src/autopilot/level2.ts +262 -0
- package/src/autopilot/level3.ts +263 -0
- package/src/autopilot/level4.ts +393 -0
- package/src/autopilot/safety/README.md +512 -0
- package/src/autopilot/safety/SafetyFramework.ts +634 -0
- package/src/autopilot/safety/index.ts +16 -0
- package/src/autopilot/types.ts +250 -0
- package/src/budget/index.ts +56 -0
- package/src/budget/manager.ts +547 -0
- package/src/budget/schema.ts +305 -0
- package/src/budget/tracker.ts +155 -0
- package/src/cache/issue-cache.ts +150 -0
- package/src/cli/command-map.ts +221 -0
- package/src/cli/commands/gate/test.ts +214 -0
- package/src/cli/exitHandler.ts +98 -0
- package/src/cli/flags.ts +123 -0
- package/src/cli/formatSuggestions.ts +202 -0
- package/src/cli/formatters.ts +294 -0
- package/src/cli/jsonEnvelope.ts +152 -0
- package/src/cli/output.ts +61 -0
- package/src/cli/runnerLifecycle.ts +118 -0
- package/src/cli-audit.ts +76 -0
- package/src/cli-security.ts +114 -0
- package/src/cli.ts +1231 -0
- package/src/commands/audit/index.ts +5 -0
- package/src/commands/audit/verify.ts +87 -0
- package/src/commands/autopilot.ts +131 -0
- package/src/commands/budget.ts +327 -0
- package/src/commands/bulkOps.ts +204 -0
- package/src/commands/completion.ts +287 -0
- package/src/commands/config/validate.ts +428 -0
- package/src/commands/config.ts +368 -0
- package/src/commands/counterExamples.ts +104 -0
- package/src/commands/create-project.ts +338 -0
- package/src/commands/discover.ts +192 -0
- package/src/commands/doctor.ts +436 -0
- package/src/commands/execute.ts +558 -0
- package/src/commands/explain.ts +157 -0
- package/src/commands/fanout-analyze.ts +684 -0
- package/src/commands/fanout-harvest.ts +328 -0
- package/src/commands/fanout-monitor.ts +224 -0
- package/src/commands/gateAttest.ts +95 -0
- package/src/commands/gateImport.ts +142 -0
- package/src/commands/gateImportChecks.ts +208 -0
- package/src/commands/gateReport.ts +184 -0
- package/src/commands/governanceCleanup.ts +171 -0
- package/src/commands/governanceReport.ts +497 -0
- package/src/commands/guards.ts +50 -0
- package/src/commands/idea.ts +281 -0
- package/src/commands/init.ts +414 -0
- package/src/commands/issues.ts +165 -0
- package/src/commands/merge.ts +677 -0
- package/src/commands/mergeOrder.ts +68 -0
- package/src/commands/metrics.ts +232 -0
- package/src/commands/migrateProfile.ts +187 -0
- package/src/commands/orchestrate/analyze-issues.ts +203 -0
- package/src/commands/orchestrate/assign-batch.ts +204 -0
- package/src/commands/orchestrate/generate-deliverables.ts +66 -0
- package/src/commands/orchestrate/pinToolchain.ts +102 -0
- package/src/commands/orchestrate/plan-batch.ts +119 -0
- package/src/commands/orchestrate/predict-conflicts.ts +210 -0
- package/src/commands/orchestrate.ts +186 -0
- package/src/commands/plan.ts +403 -0
- package/src/commands/planDiff.ts +56 -0
- package/src/commands/planReview.ts +112 -0
- package/src/commands/planViewer.ts +180 -0
- package/src/commands/preview-constraints.ts +97 -0
- package/src/commands/query.ts +313 -0
- package/src/commands/report.ts +56 -0
- package/src/commands/retry.ts +60 -0
- package/src/commands/schema.ts +128 -0
- package/src/commands/security.ts +140 -0
- package/src/commands/seniorDev.ts +326 -0
- package/src/commands/status.ts +97 -0
- package/src/commands/tokenReport.ts +167 -0
- package/src/commands/validation.ts +66 -0
- package/src/commands/weave-checkpoints.ts +145 -0
- package/src/commands/weave-fanout.ts +273 -0
- package/src/commands/weave-policy.ts +277 -0
- package/src/commands/weave.ts +518 -0
- package/src/config/localOverlay.ts +167 -0
- package/src/config/pathResolver.ts +106 -0
- package/src/config/profileResolver.ts +194 -0
- package/src/config/promptsResolver.ts +312 -0
- package/src/config/rulesResolver.ts +257 -0
- package/src/config/schemas.ts +142 -0
- package/src/core/bootstrap.ts +287 -0
- package/src/core/enterprise.ts +453 -0
- package/src/core/errorRecovery.ts +509 -0
- package/src/core/githubPlan.ts +282 -0
- package/src/core/inputs.ts +314 -0
- package/src/core/multiRepoPlan.ts +353 -0
- package/src/core/plan.ts +106 -0
- package/src/core/snapshot.ts +189 -0
- package/src/errors/adapters.ts +897 -0
- package/src/errors/index.ts +231 -0
- package/src/executionState.ts +356 -0
- package/src/executors/README_FRAME_CONTRACT.md +446 -0
- package/src/executors/frameContract.ts +270 -0
- package/src/executors/guardrailEnforcement.ts +294 -0
- package/src/executors/seniorDev/core.ts +548 -0
- package/src/executors/seniorDev/index.ts +30 -0
- package/src/executors/seniorDev/types.ts +176 -0
- package/src/executors/toolBudget.ts +194 -0
- package/src/fanout/analyzer.ts +735 -0
- package/src/fanout/github-adapter.ts +262 -0
- package/src/fanout/harvest.ts +517 -0
- package/src/fanout/monitor.ts +350 -0
- package/src/fanout/types.ts +428 -0
- package/src/frames/controller.ts +160 -0
- package/src/frames/emitter.ts +455 -0
- package/src/frames/index.ts +58 -0
- package/src/frames/storage.ts +203 -0
- package/src/frames/types.ts +258 -0
- package/src/gates/checkRunConverter.ts +91 -0
- package/src/gates/test/adapters/errors.ts +32 -0
- package/src/gates/test/adapters/index.ts +36 -0
- package/src/gates/test/adapters/interface.ts +63 -0
- package/src/gates/test/adapters/jest-json.ts +370 -0
- package/src/gates/test/adapters/junit-xml.ts +400 -0
- package/src/gates/test/adapters/registry.ts +149 -0
- package/src/gates/test/adapters/vitest-json.ts +339 -0
- package/src/gates/test/enrichment/failureId.ts +74 -0
- package/src/gates/test/enrichment/index.ts +25 -0
- package/src/gates/test/enrichment/nextActions.ts +322 -0
- package/src/gates/test/enrichment/rerunTemplates.ts +105 -0
- package/src/gates/test/enrichment/signature.ts +58 -0
- package/src/gates/test/enrichment/stackParser.ts +149 -0
- package/src/gates/test/enrichment/types.ts +67 -0
- package/src/gates/test/formatters/markdown.spec.ts +942 -0
- package/src/gates/test/formatters/markdown.ts +296 -0
- package/src/gates/test/index.ts +54 -0
- package/src/gates/test/schema.spec.ts +372 -0
- package/src/gates/test/schema.ts +327 -0
- package/src/gates/validator.ts +92 -0
- package/src/gates.ts +1022 -0
- package/src/git/operations.ts +592 -0
- package/src/git/parseRemote.ts +22 -0
- package/src/github/api.ts +584 -0
- package/src/github/batch-ops.ts +215 -0
- package/src/github/client.ts +647 -0
- package/src/github/contextDiet.ts +205 -0
- package/src/github/diffHunks.ts +285 -0
- package/src/github/index.ts +11 -0
- package/src/github/minimalContext.ts +212 -0
- package/src/github/minimalContextClient.ts +105 -0
- package/src/github/symbolMap.ts +370 -0
- package/src/github/types.ts +166 -0
- package/src/governance/index.ts +42 -0
- package/src/governance/mcpStatus.ts +258 -0
- package/src/governance/timeoutAdjustment.ts +149 -0
- package/src/governance/turnCostSummary.ts +182 -0
- package/src/hooks/events.ts +374 -0
- package/src/hooks/index.ts +8 -0
- package/src/hostility/checks.ts +408 -0
- package/src/hostility/index.ts +108 -0
- package/src/hostility/score.ts +143 -0
- package/src/interactive/planDiff.ts +168 -0
- package/src/interactive/planHistory.ts +205 -0
- package/src/interactive/planReview.ts +531 -0
- package/src/learning/counter-example.ts +174 -0
- package/src/learning/prompts.ts +107 -0
- package/src/learning/storage.ts +230 -0
- package/src/lexsona/client.ts +367 -0
- package/src/lexsona/index.ts +44 -0
- package/src/lexsona/logger.ts +408 -0
- package/src/lexsona/types.ts +177 -0
- package/src/mcp/DEPRECATED.md +33 -0
- package/src/mcp/server.ts +3587 -0
- package/src/mcp/types/guided-response.ts +95 -0
- package/src/mcp/types.ts +468 -0
- package/src/mcp/workflow/state-machine.ts +277 -0
- package/src/mergeEligibility.ts +355 -0
- package/src/mergeOrder.ts +170 -0
- package/src/metrics/export.ts +472 -0
- package/src/metrics/index.ts +35 -0
- package/src/metrics/turncost.ts +284 -0
- package/src/monitoring/README.md +222 -0
- package/src/monitoring/audit.ts +98 -0
- package/src/monitoring/cache.ts +121 -0
- package/src/monitoring/dashboards/grafana-dashboard.json +172 -0
- package/src/monitoring/errorRecovery.ts +334 -0
- package/src/monitoring/errors.ts +105 -0
- package/src/monitoring/fileLogger.ts +194 -0
- package/src/monitoring/hallucinations.ts +45 -0
- package/src/monitoring/health.ts +171 -0
- package/src/monitoring/index.ts +16 -0
- package/src/monitoring/lock.ts +158 -0
- package/src/monitoring/logger.ts +178 -0
- package/src/monitoring/metrics.ts +245 -0
- package/src/monitoring/profiler.ts +156 -0
- package/src/monitoring/tokenLogger.ts +141 -0
- package/src/orchestrate/analyzer.ts +461 -0
- package/src/orchestrate/index.ts +6 -0
- package/src/orchestrate/types.ts +65 -0
- package/src/orchestration/README.md +480 -0
- package/src/orchestration/agentAssigner.ts +206 -0
- package/src/orchestration/batchPlanner.ts +201 -0
- package/src/orchestration/conflictClustering.ts +344 -0
- package/src/orchestration/conflictGraph.ts +63 -0
- package/src/orchestration/conflictPredictor.ts +170 -0
- package/src/orchestration/deliverablesGenerator.ts +345 -0
- package/src/orchestration/determinism.ts +232 -0
- package/src/orchestration/index.ts +45 -0
- package/src/orchestration/mergeTreeSimulator.ts +137 -0
- package/src/orchestration/mis.ts +123 -0
- package/src/orchestration/toolchainManifest.ts +169 -0
- package/src/orchestration/types.ts +103 -0
- package/src/performance.README.md +99 -0
- package/src/performance.ts +279 -0
- package/src/planner/README.md +215 -0
- package/src/planner/dependencyParser.ts +404 -0
- package/src/planner/dependencyScoring.ts +346 -0
- package/src/planner/fileAnalysis.ts +693 -0
- package/src/planner/index.ts +41 -0
- package/src/planner/scopeValidator.ts +308 -0
- package/src/planner/types.ts +80 -0
- package/src/planner/validation.ts +493 -0
- package/src/preview/constraints.ts +333 -0
- package/src/procedures/index.ts +47 -0
- package/src/procedures/loader.ts +252 -0
- package/src/procedures/schema.ts +191 -0
- package/src/procedures/stateMachine.ts +160 -0
- package/src/procedures/types.ts +178 -0
- package/src/receipts/emit.ts +354 -0
- package/src/receipts/index.ts +48 -0
- package/src/receipts/schema.ts +227 -0
- package/src/report/aggregate.ts +160 -0
- package/src/runs/artifacts.ts +315 -0
- package/src/runs/attribution.ts +132 -0
- package/src/runs/context.ts +54 -0
- package/src/runs/decisions.ts +407 -0
- package/src/runs/enforcement.ts +395 -0
- package/src/runs/failures.ts +517 -0
- package/src/runs/index.ts +141 -0
- package/src/runs/manager.ts +910 -0
- package/src/runs/statusBuilder.ts +233 -0
- package/src/runs/storage.ts +290 -0
- package/src/runs/types.ts +216 -0
- package/src/schema/flakeReport.ts +74 -0
- package/src/schema/gateMapping.ts +107 -0
- package/src/schema/gateReport.ts +236 -0
- package/src/schema/weaveLock.ts +51 -0
- package/src/schema.ts +313 -0
- package/src/schemas/executorManifest.ts +204 -0
- package/src/schemas/feature-spec-v0.ts +40 -0
- package/src/schemas/persona.ts +162 -0
- package/src/schemas/project.ts +91 -0
- package/src/schemas/runCentric.ts +402 -0
- package/src/schemas/task-contract.ts +626 -0
- package/src/schemas/vacuumReadyPrompt.ts +128 -0
- package/src/sdk/index.ts +113 -0
- package/src/sdk/parser.ts +101 -0
- package/src/sdk/query.ts +315 -0
- package/src/sdk/validator.ts +114 -0
- package/src/security/README.md +496 -0
- package/src/security/authentication.ts +173 -0
- package/src/security/authorization.ts +348 -0
- package/src/security/commandValidator.ts +195 -0
- package/src/security/compliance.ts +688 -0
- package/src/security/index.ts +85 -0
- package/src/security/policy.ts +399 -0
- package/src/security/sarif.ts +179 -0
- package/src/security/scanning.ts +362 -0
- package/src/security/secrets.ts +520 -0
- package/src/shared/git/index.ts +30 -0
- package/src/shared/git/runGit.ts +281 -0
- package/src/shared/git/runtime.ts +66 -0
- package/src/snapshot/builder.ts +229 -0
- package/src/snapshot/index.ts +8 -0
- package/src/store/CONTRACT.md +189 -0
- package/src/store/README.md +22 -0
- package/src/store/index.ts +99 -0
- package/src/store/inmemory/index.ts +10 -0
- package/src/store/inmemory/run-store.ts +268 -0
- package/src/store/postgres/.gitkeep +0 -0
- package/src/store/run-store.ts +405 -0
- package/src/store/sqlite/index.ts +7 -0
- package/src/store/sqlite/run-store.ts +525 -0
- package/src/store/sqlite/schema.sql +67 -0
- package/src/telemetry/frames.ts +179 -0
- package/src/telemetry/index.ts +5 -0
- package/src/tiers/index.ts +34 -0
- package/src/tiers/metrics.ts +156 -0
- package/src/tiers/schema.ts +95 -0
- package/src/tiers/suggest.ts +183 -0
- package/src/types/guardrails.ts +452 -0
- package/src/types/index.ts +42 -0
- package/src/util/canonicalJson.ts +29 -0
- package/src/util/colorControl.ts +46 -0
- package/src/util/envUtils.ts +139 -0
- package/src/util/hash.ts +69 -0
- package/src/util/lockHash.ts +90 -0
- package/src/util/minHeap.ts +108 -0
- package/src/util/progress.ts +89 -0
- package/src/util/tokenEstimator.ts +55 -0
- package/src/utils/fingerprint.ts +105 -0
- package/src/utils/paths.ts +209 -0
- package/src/utils/tokens.ts +151 -0
- package/src/utils/validation.ts +53 -0
- package/src/verification/diff-applier.ts +60 -0
- package/src/verification/engine-verifier.ts +171 -0
- package/src/verification/errors.ts +30 -0
- package/src/verification/index.ts +13 -0
- package/src/weave/audit/index.ts +17 -0
- package/src/weave/audit/logger.ts +206 -0
- package/src/weave/authority/evaluator.ts +660 -0
- package/src/weave/authority/index.ts +30 -0
- package/src/weave/authority/schema.ts +292 -0
- package/src/weave/checkpoint/index.ts +7 -0
- package/src/weave/checkpoint/storage.ts +223 -0
- package/src/weave/checkpoint/types.ts +121 -0
- package/src/weave/checkpoint/utils.ts +207 -0
- package/src/weave/clusterGates.ts +366 -0
- package/src/weave/draftPR.ts +214 -0
- package/src/weave/executor/d1-executor.ts +822 -0
- package/src/weave/executor/d2-executor.ts +381 -0
- package/src/weave/executor/index.ts +24 -0
- package/src/weave/executor/types.ts +135 -0
- package/src/weave/fanout/generator.ts +186 -0
- package/src/weave/fanout/index.ts +51 -0
- package/src/weave/fanout/loader.ts +134 -0
- package/src/weave/fanout/matcher.ts +239 -0
- package/src/weave/fanout/schema.ts +178 -0
- package/src/weave/frameHelper.ts +126 -0
- package/src/weave/gateFailureHandler.ts +405 -0
- package/src/weave/index.ts +89 -0
- package/src/weave/lockFile.ts +193 -0
- package/src/weave/mergeHelpers.ts +377 -0
- package/src/weave/mergeWeaveSequential.ts +282 -0
- package/src/weave/metrics/calculator.ts +362 -0
- package/src/weave/metrics/index.ts +44 -0
- package/src/weave/metrics/logger.ts +291 -0
- package/src/weave/metrics/schema.ts +505 -0
- package/src/weave/planner/index.ts +23 -0
- package/src/weave/planner/planner.ts +411 -0
- package/src/weave/planner/types.ts +181 -0
- package/src/weave/policy/index.ts +63 -0
- package/src/weave/policy/loader.ts +148 -0
- package/src/weave/policy/schema.ts +290 -0
- package/src/weave/post-merge-checks.ts +220 -0
- package/src/weave/preflightConflicts.ts +375 -0
- package/src/weave/receiptHelper.ts +287 -0
- package/src/weave/recovery.ts +232 -0
- package/src/weave/resolutionGuidance.ts +173 -0
- package/src/weave/stateMachine.ts +426 -0
- package/src/weave/testfix/applier.ts +195 -0
- package/src/weave/testfix/index.ts +18 -0
- package/src/weave/testfix/loader.ts +116 -0
- package/src/weave/testfix/matcher.ts +158 -0
- package/src/weave/testfix/schema.ts +218 -0
- package/src/weave/types.ts +305 -0
- package/src/weave/utils/copilot-completion.ts +76 -0
- package/test-mcp-dogfood.mjs +128 -0
- package/test-mcp.mjs +116 -0
- package/tests/README.md +155 -0
- package/tests/advanced-cli-e2e.spec.ts +218 -0
- package/tests/agentAssigner.spec.ts +261 -0
- package/tests/ai-conflict-strategy-cache.spec.ts +254 -0
- package/tests/ai-conflict-strategy-risk.spec.ts +287 -0
- package/tests/ai-conflict-strategy-schema.spec.ts +252 -0
- package/tests/ai-conflict-strategy.spec.ts +442 -0
- package/tests/aliases/resolver.spec.ts +238 -0
- package/tests/audit/context.spec.ts +283 -0
- package/tests/audit/emitter.spec.ts +347 -0
- package/tests/audit/gateMatrix.spec.ts +335 -0
- package/tests/audit/integration.spec.ts +236 -0
- package/tests/audit/redaction.spec.ts +290 -0
- package/tests/audit/sarif-integration.spec.ts +303 -0
- package/tests/audit/sarif.spec.ts +458 -0
- package/tests/audit/schema-events.spec.ts +421 -0
- package/tests/audit/schema.spec.ts +434 -0
- package/tests/audit/sdk-integration.spec.ts +598 -0
- package/tests/audit/sdk.spec.ts +318 -0
- package/tests/audit/signing-integration.spec.ts +276 -0
- package/tests/audit/signing.spec.ts +350 -0
- package/tests/audit-signing.spec.ts +406 -0
- package/tests/audit-verify-cli.spec.ts +176 -0
- package/tests/autopilot-e2e-level3-4.spec.ts +741 -0
- package/tests/autopilot-integration.spec.ts +274 -0
- package/tests/autopilot-level1.spec.ts +449 -0
- package/tests/autopilot-level2.spec.ts +188 -0
- package/tests/autopilot-level3.spec.ts +266 -0
- package/tests/autopilot-level4.spec.ts +454 -0
- package/tests/autopilot.spec.ts +379 -0
- package/tests/ax-error-adapters.spec.ts +580 -0
- package/tests/batch-planner.spec.ts +500 -0
- package/tests/benchmark-infrastructure.spec.ts +445 -0
- package/tests/benchmarks/README.md +103 -0
- package/tests/benchmarks/baselines/baseline.json +127 -0
- package/tests/benchmarks/core/dependencyResolver.bench.ts +128 -0
- package/tests/benchmarks/core/planParser.bench.ts +114 -0
- package/tests/benchmarks/core/topologicalSort.bench.ts +102 -0
- package/tests/benchmarks/index.ts +36 -0
- package/tests/benchmarks/io/fileOperations.bench.ts +132 -0
- package/tests/benchmarks/io/gitOperations.bench.ts +99 -0
- package/tests/benchmarks/utils/graphGenerator.ts +201 -0
- package/tests/benchmarks/utils/reporter.ts +231 -0
- package/tests/benchmarks/workflows/endToEnd.bench.ts +132 -0
- package/tests/bootstrap.test.ts +319 -0
- package/tests/budget-tracker.spec.ts +279 -0
- package/tests/bulkOps.spec.ts +166 -0
- package/tests/bulletproof-determinism.test.ts +223 -0
- package/tests/canonicalJson.test.ts +130 -0
- package/tests/checkRunConverter.spec.ts +357 -0
- package/tests/cli/commands/gate/test.spec.ts +564 -0
- package/tests/cli/emit-frames-flag.spec.ts +117 -0
- package/tests/cli/exitHandler.spec.ts +314 -0
- package/tests/cli/flags.spec.ts +223 -0
- package/tests/cli/formatters.spec.ts +513 -0
- package/tests/cli/output.spec.ts +221 -0
- package/tests/cli-autopilot.spec.ts +170 -0
- package/tests/cli-budget-guards.spec.ts +210 -0
- package/tests/cli-color-control.spec.ts +334 -0
- package/tests/cli-deliverables-generator.spec.ts +185 -0
- package/tests/cli-determinism.spec.ts +496 -0
- package/tests/cli-init-enterprise.spec.ts +294 -0
- package/tests/cli-init-json.spec.ts +154 -0
- package/tests/cli-init-local.spec.ts +159 -0
- package/tests/cli-json-envelope.spec.ts +140 -0
- package/tests/cli-json.spec.ts +408 -0
- package/tests/cli-orchestrate-plan-batch.spec.ts +329 -0
- package/tests/cli-orchestrate.spec.ts +231 -0
- package/tests/cli-plan-generation.spec.ts +367 -0
- package/tests/cli-plan-review.spec.ts +300 -0
- package/tests/cli-progress.spec.ts +193 -0
- package/tests/cli-ux-enhancements.spec.ts +213 -0
- package/tests/cliJsonPurity.spec.ts +437 -0
- package/tests/cliSuggestDeps.spec.ts +360 -0
- package/tests/cluster-gates-rollback.spec.ts +353 -0
- package/tests/command-validator-integration.spec.ts +305 -0
- package/tests/command-validator.spec.ts +380 -0
- package/tests/commands/autopilot.spec.ts +124 -0
- package/tests/commands/config-validate.spec.ts +301 -0
- package/tests/commands/config.spec.ts +311 -0
- package/tests/commands/create-project.spec.ts +90 -0
- package/tests/commands/doctor.spec.ts +57 -0
- package/tests/commands/execute.spec.ts +293 -0
- package/tests/commands/gateAttest.spec.ts +172 -0
- package/tests/commands/gateImport.spec.ts +176 -0
- package/tests/commands/gateReport.spec.ts +130 -0
- package/tests/commands/guards.spec.ts +114 -0
- package/tests/commands/idea.spec.ts +177 -0
- package/tests/commands/merge.spec.ts +166 -0
- package/tests/commands/plan.spec.ts +123 -0
- package/tests/commands/query.spec.ts +294 -0
- package/tests/commands/report.spec.ts +54 -0
- package/tests/commands/retry.spec.ts +300 -0
- package/tests/commands/schema.spec.ts +136 -0
- package/tests/commands/validation.spec.ts +229 -0
- package/tests/completion.spec.ts +133 -0
- package/tests/config-inspect.spec.ts +202 -0
- package/tests/conflictClustering-e2e.spec.ts +278 -0
- package/tests/conflictClustering.spec.ts +550 -0
- package/tests/conflictGraph.spec.ts +126 -0
- package/tests/conflictPredictor.spec.ts +238 -0
- package/tests/deliverables-generator.spec.ts +329 -0
- package/tests/deliverables.spec.ts +381 -0
- package/tests/dependencyParser-github.spec.ts +244 -0
- package/tests/dependencyParser.spec.ts +386 -0
- package/tests/dependencyScoring.spec.ts +668 -0
- package/tests/deterministic-applicable.test.ts +156 -0
- package/tests/deterministic-build.test.ts +172 -0
- package/tests/deterministic-simple.test.ts +32 -0
- package/tests/discover-suggest-integration.spec.ts +340 -0
- package/tests/dogfood-merge-weave-script.spec.ts +150 -0
- package/tests/e2e/planner.spec.ts +596 -0
- package/tests/e2e-comprehensive.test.ts +500 -0
- package/tests/e2e-determinism.test.ts +293 -0
- package/tests/e2e-synthetic-6pr-weave.spec.ts +329 -0
- package/tests/enterprise-init.spec.ts +350 -0
- package/tests/envUtils.spec.ts +267 -0
- package/tests/error-handling.test.ts +104 -0
- package/tests/error-recovery.spec.ts +451 -0
- package/tests/execution-plan-v1.test.ts +257 -0
- package/tests/executionState-loadGateResults.spec.ts +267 -0
- package/tests/executionState.test.ts +169 -0
- package/tests/executors/README.md +100 -0
- package/tests/executors/frameContract-integration.spec.ts +324 -0
- package/tests/executors/frameContract.spec.ts +531 -0
- package/tests/executors/guardrailEnforcement.spec.ts +424 -0
- package/tests/executors/lifecycle.spec.ts +313 -0
- package/tests/executors/toolBudget.spec.ts +473 -0
- package/tests/feature-spec-v0.test.ts +145 -0
- package/tests/fileAnalysis.spec.ts +946 -0
- package/tests/fingerprint.spec.ts +100 -0
- package/tests/fixtures/README.md +380 -0
- package/tests/fixtures/deliverables/batch-example-plan.json +62 -0
- package/tests/fixtures/executors/README.md +57 -0
- package/tests/fixtures/executors/index.ts +9 -0
- package/tests/fixtures/executors/mock-executor.ts +204 -0
- package/tests/fixtures/executors/registry.ts +51 -0
- package/tests/fixtures/executors/types.ts +95 -0
- package/tests/fixtures/fixtures.spec.ts +307 -0
- package/tests/fixtures/gates/configs.ts +234 -0
- package/tests/fixtures/gates/results.ts +234 -0
- package/tests/fixtures/harvest-bundle-fixture.json +87 -0
- package/tests/fixtures/index.ts +219 -0
- package/tests/fixtures/invalid/plans.ts +178 -0
- package/tests/fixtures/jest/all-passing.json +71 -0
- package/tests/fixtures/jest/snapshot-failures.json +66 -0
- package/tests/fixtures/jest/some-failing.json +100 -0
- package/tests/fixtures/jest/with-location.json +84 -0
- package/tests/fixtures/junit/cdata-messages.xml +29 -0
- package/tests/fixtures/junit/multiple-suites.xml +30 -0
- package/tests/fixtures/junit/single-suite.xml +17 -0
- package/tests/fixtures/junit/with-errors.xml +19 -0
- package/tests/fixtures/junit/with-skipped.xml +18 -0
- package/tests/fixtures/npm-audit.json +32 -0
- package/tests/fixtures/plan.bad-schema.json +5 -0
- package/tests/fixtures/plan.bad-unknown-dep.json +10 -0
- package/tests/fixtures/plan.ci-gates.json +36 -0
- package/tests/fixtures/plan.complex-cycle.json +22 -0
- package/tests/fixtures/plan.cycle.json +14 -0
- package/tests/fixtures/plan.deep-chain.json +95 -0
- package/tests/fixtures/plan.dogfood-execute.json +36 -0
- package/tests/fixtures/plan.gates.json +30 -0
- package/tests/fixtures/plan.integration-pyramid.json +56 -0
- package/tests/fixtures/plan.orphans.json +22 -0
- package/tests/fixtures/plan.parallel.json +30 -0
- package/tests/fixtures/plan.tiny.json +18 -0
- package/tests/fixtures/plan.wide-parallel.json +75 -0
- package/tests/fixtures/plan.with-failures.json +26 -0
- package/tests/fixtures/plan.with-vuln.json +25 -0
- package/tests/fixtures/planner/cross-module.json +101 -0
- package/tests/fixtures/planner/cycle-error.json +56 -0
- package/tests/fixtures/planner/diamond-pattern.json +74 -0
- package/tests/fixtures/planner/empty-repo.json +9 -0
- package/tests/fixtures/planner/file-overlap-heavy.json +110 -0
- package/tests/fixtures/planner/invalid-pr.json +25 -0
- package/tests/fixtures/planner/merge-conflicts.json +42 -0
- package/tests/fixtures/planner/mixed-deps.json +101 -0
- package/tests/fixtures/planner/self-dependency.json +24 -0
- package/tests/fixtures/planner/simple-stack.json +79 -0
- package/tests/fixtures/planner/single-pr.json +25 -0
- package/tests/fixtures/planner/stale-pr.json +40 -0
- package/tests/fixtures/plans/complex.ts +201 -0
- package/tests/fixtures/plans/diamond.ts +115 -0
- package/tests/fixtures/plans/linear.ts +74 -0
- package/tests/fixtures/plans/simple.ts +61 -0
- package/tests/fixtures/prs/basic.ts +175 -0
- package/tests/fixtures/prs/withDeps.ts +197 -0
- package/tests/fixtures/scan-results-clean.sarif +15 -0
- package/tests/fixtures/scan-results.sarif +74 -0
- package/tests/fixtures/scenarios/mergeWorkflows.ts +300 -0
- package/tests/fixtures/scenarios/syntheticWeave.ts +351 -0
- package/tests/fixtures/snapshot/package.json +5 -0
- package/tests/fixtures/snapshot/sample.ts +21 -0
- package/tests/fixtures/utils/cleanup.ts +81 -0
- package/tests/fixtures/utils/mockGitHub.ts +219 -0
- package/tests/fixtures/utils/tempDir.ts +109 -0
- package/tests/fixtures/verification/expected-verification.json +16 -0
- package/tests/fixtures/verification/receipt.json +31 -0
- package/tests/fixtures/verification/snapshot.json +44 -0
- package/tests/fixtures/vitest/all-passing.json +67 -0
- package/tests/fixtures/vitest/complex-nested-suites.json +98 -0
- package/tests/fixtures/vitest/some-failing.json +98 -0
- package/tests/fixtures/vitest/with-coverage.json +97 -0
- package/tests/fixtures-usage-examples.spec.ts +304 -0
- package/tests/flakeReport.spec.ts +267 -0
- package/tests/frames/ci-gate-integration.spec.ts +331 -0
- package/tests/frames/controller.spec.ts +165 -0
- package/tests/frames/emitter.spec.ts +371 -0
- package/tests/frames/idempotency.spec.ts +177 -0
- package/tests/frames/storage.spec.ts +346 -0
- package/tests/frames/types.spec.ts +249 -0
- package/tests/frames/v2-schema-integration.spec.ts +435 -0
- package/tests/gate-working-directory.spec.ts +204 -0
- package/tests/gateMapping.spec.ts +161 -0
- package/tests/gateReportIntegration.spec.ts +175 -0
- package/tests/gateReportValidation.spec.ts +452 -0
- package/tests/gates/test/adapters/jest-json.spec.ts +372 -0
- package/tests/gates/test/adapters/junit-xml.spec.ts +421 -0
- package/tests/gates/test/adapters/registry.spec.ts +376 -0
- package/tests/gates/test/adapters/vitest-json.spec.ts +455 -0
- package/tests/gates/test/enrichment/failureId.spec.ts +131 -0
- package/tests/gates/test/enrichment/nextActions.spec.ts +365 -0
- package/tests/gates/test/enrichment/rerunTemplates.spec.ts +187 -0
- package/tests/gates/test/enrichment/signature.spec.ts +163 -0
- package/tests/gates/test/enrichment/stackParser.spec.ts +203 -0
- package/tests/gates/turncost-integration.spec.ts +221 -0
- package/tests/gates/validation-integration.spec.ts +147 -0
- package/tests/gates/validator.spec.ts +200 -0
- package/tests/gates.test.ts +255 -0
- package/tests/gatesWithPolicy.hostilityTimeoutAdjustment.spec.ts +156 -0
- package/tests/git-operations-receipts.spec.ts +121 -0
- package/tests/git-operations.test.ts +152 -0
- package/tests/git-runtime.spec.ts +175 -0
- package/tests/github-api.labels.spec.ts +21 -0
- package/tests/github-api.test.ts +85 -0
- package/tests/github-context-diet.spec.ts +441 -0
- package/tests/github-diff-hunks.spec.ts +387 -0
- package/tests/github-integration.spec.ts +774 -0
- package/tests/github-minimal-context.spec.ts +338 -0
- package/tests/github-symbol-map.spec.ts +414 -0
- package/tests/githubClient.spec.ts +123 -0
- package/tests/governance/mcpStatus.spec.ts +276 -0
- package/tests/governance/timeoutAdjustment.spec.ts +149 -0
- package/tests/governance/turnCostSummary.spec.ts +188 -0
- package/tests/governance-retention.spec.ts +151 -0
- package/tests/governance-wrapper-delegation.spec.ts +148 -0
- package/tests/guardrails.spec.ts +860 -0
- package/tests/hash.test.ts +83 -0
- package/tests/helpers/cli.ts +23 -0
- package/tests/helpers/getStd.ts +1 -0
- package/tests/helpers/makeGate.ts +19 -0
- package/tests/helpers/plannerTestHelpers.ts +314 -0
- package/tests/hooks/events.spec.ts +518 -0
- package/tests/hostility/checks.spec.ts +295 -0
- package/tests/hostility/integration.spec.ts +123 -0
- package/tests/hostility/score.spec.ts +175 -0
- package/tests/init.spec.ts +270 -0
- package/tests/integration/hipaa-encryption.spec.ts +148 -0
- package/tests/integration/lex-smoke-test.spec.ts +328 -0
- package/tests/integration-e2e.test.ts +244 -0
- package/tests/integration-matrix.test.ts +409 -0
- package/tests/interPRConflicts.spec.ts +254 -0
- package/tests/interactive-plan-history.spec.ts +255 -0
- package/tests/interactive-plan-review.spec.ts +287 -0
- package/tests/issue-analyzer.spec.ts +593 -0
- package/tests/lexsona-integration.spec.ts +311 -0
- package/tests/localOverlay.spec.ts +203 -0
- package/tests/lockHash.spec.ts +167 -0
- package/tests/mcp-auth-errors.spec.ts +190 -0
- package/tests/mcp-contracts.spec.ts +290 -0
- package/tests/mcp-gates-external-plan.spec.ts +146 -0
- package/tests/mcp-granular-tools.spec.ts +208 -0
- package/tests/mcp-runstore-integration.spec.ts +334 -0
- package/tests/mcp-scope-integration.spec.ts +318 -0
- package/tests/mcp-task-handoff.spec.ts +320 -0
- package/tests/mcp-workflow-guide.spec.ts +53 -0
- package/tests/mcp.test.ts +151 -0
- package/tests/merge-conflict-detection.spec.ts +260 -0
- package/tests/mergeEligibility.test.ts +201 -0
- package/tests/mergeLockHash.spec.ts +158 -0
- package/tests/mergeOrder-with-fixtures.spec.ts +215 -0
- package/tests/mergeOrder.test.ts +108 -0
- package/tests/mergeTreeSimulator.spec.ts +145 -0
- package/tests/metrics/export.spec.ts +446 -0
- package/tests/metrics/turncost.spec.ts +309 -0
- package/tests/metrics-template.spec.ts +137 -0
- package/tests/migrateProfile.spec.ts +254 -0
- package/tests/mis.spec.ts +202 -0
- package/tests/monitoring-audit.spec.ts +181 -0
- package/tests/monitoring-cache.spec.ts +331 -0
- package/tests/monitoring-error-recovery.spec.ts +236 -0
- package/tests/monitoring-errors.spec.ts +193 -0
- package/tests/monitoring-fileLogger.spec.ts +319 -0
- package/tests/monitoring-health.spec.ts +152 -0
- package/tests/monitoring-lock.spec.ts +308 -0
- package/tests/monitoring-logger.spec.ts +157 -0
- package/tests/monitoring-metrics.spec.ts +158 -0
- package/tests/monitoring-profiler.spec.ts +197 -0
- package/tests/orchestration-determinism.spec.ts +204 -0
- package/tests/parseRemote.spec.ts +25 -0
- package/tests/pathResolver.spec.ts +122 -0
- package/tests/paths.spec.ts +68 -0
- package/tests/performance.spec.ts +322 -0
- package/tests/pipeline-determinism.spec.ts +597 -0
- package/tests/plan-tier-integration.spec.ts +184 -0
- package/tests/precedence-resolution.spec.ts +682 -0
- package/tests/preflightConflicts.spec.ts +205 -0
- package/tests/procedures/keystone-policy.spec.ts +296 -0
- package/tests/procedures/loader.spec.ts +585 -0
- package/tests/procedures/pr-review.spec.ts +321 -0
- package/tests/profileResolver.spec.ts +375 -0
- package/tests/progress-indicators.spec.ts +139 -0
- package/tests/promptsResolver.spec.ts +443 -0
- package/tests/public-api.spec.ts +272 -0
- package/tests/query.spec.ts +170 -0
- package/tests/receipts.spec.ts +463 -0
- package/tests/release-prepare.spec.ts +268 -0
- package/tests/report.test.ts +335 -0
- package/tests/resolutionGuidance.spec.ts +160 -0
- package/tests/rotate-secrets-example.spec.ts +198 -0
- package/tests/rulesResolver.spec.ts +232 -0
- package/tests/runGit.spec.ts +229 -0
- package/tests/runner-lifecycle-integration.spec.ts +283 -0
- package/tests/runs/artifacts.spec.ts +367 -0
- package/tests/runs/decisions.spec.ts +495 -0
- package/tests/runs/enforcement.spec.ts +555 -0
- package/tests/runs/failures.spec.ts +554 -0
- package/tests/runs/manager-runstore-integration.spec.ts +455 -0
- package/tests/runs/manager.spec.ts +678 -0
- package/tests/runs-manager.spec.ts +485 -0
- package/tests/safety-acceptance.spec.ts +278 -0
- package/tests/safety-enhanced.spec.ts +329 -0
- package/tests/safety-framework.spec.ts +427 -0
- package/tests/safety-guards-integration.spec.ts +213 -0
- package/tests/safety-integration.spec.ts +278 -0
- package/tests/sarif-parser.spec.ts +148 -0
- package/tests/schema.test.ts +88 -0
- package/tests/schemas/behavior-rule.spec.ts +366 -0
- package/tests/schemas/executorManifest.spec.ts +441 -0
- package/tests/schemas/persona-integration.spec.ts +62 -0
- package/tests/schemas/persona.spec.ts +172 -0
- package/tests/schemas/project.spec.ts +247 -0
- package/tests/schemas/run-store.spec.ts +553 -0
- package/tests/schemas/runCentric.spec.ts +463 -0
- package/tests/schemas/vacuumReadyPrompt.spec.ts +515 -0
- package/tests/scope-github-auto-detection.spec.ts +200 -0
- package/tests/scopeValidator.spec.ts +497 -0
- package/tests/security-authentication.spec.ts +42 -0
- package/tests/security-authorization.spec.ts +350 -0
- package/tests/security-cli.spec.ts +264 -0
- package/tests/security-compliance.spec.ts +334 -0
- package/tests/security-policy.spec.ts +295 -0
- package/tests/security-scanning.spec.ts +349 -0
- package/tests/security-secrets.spec.ts +401 -0
- package/tests/store/create-run-store.spec.ts +185 -0
- package/tests/store/inmemory/run-store.spec.ts +533 -0
- package/tests/store/sqlite/run-store.spec.ts +849 -0
- package/tests/telemetry/frames.spec.ts +120 -0
- package/tests/tiers.spec.ts +466 -0
- package/tests/token-usage.spec.ts +309 -0
- package/tests/toolchain-manifest.spec.ts +145 -0
- package/tests/unified-budget.spec.ts +713 -0
- package/tests/unit/cache/issue-cache.spec.ts +131 -0
- package/tests/unit/fanout/analyzer-integration.spec.ts +398 -0
- package/tests/unit/fanout/analyzer.spec.ts +605 -0
- package/tests/unit/fanout/github-adapter.spec.ts +203 -0
- package/tests/unit/fanout/harvest.spec.ts +93 -0
- package/tests/unit/fanout/monitor.spec.ts +297 -0
- package/tests/unit/fanout/types.spec.ts +308 -0
- package/tests/unit/github/batch-ops.spec.ts +179 -0
- package/tests/unit/learning/counter-example.spec.ts +168 -0
- package/tests/unit/learning/storage.spec.ts +154 -0
- package/tests/unit/preview/constraints.spec.ts +429 -0
- package/tests/unit/runs/attribution.spec.ts +204 -0
- package/tests/unit/schemas/task-contract.spec.ts +483 -0
- package/tests/unit/snapshot/builder.spec.ts +389 -0
- package/tests/unit/verification/engine-verifier.spec.ts +279 -0
- package/tests/unit/weave/authority-evaluator.spec.ts +404 -0
- package/tests/unit/weave/authority-schema.spec.ts +199 -0
- package/tests/unit/weave/auto-undraft-integration.spec.ts +349 -0
- package/tests/unit/weave/copilot-completion.spec.ts +182 -0
- package/tests/unit/weave/d1-executor.spec.ts +269 -0
- package/tests/unit/weave/d2-executor.spec.ts +334 -0
- package/tests/unit/weave/fanout-generator.spec.ts +365 -0
- package/tests/unit/weave/fanout-matcher.spec.ts +320 -0
- package/tests/unit/weave/fanout-schema.spec.ts +221 -0
- package/tests/unit/weave/mergeWeaveSequential.spec.ts +268 -0
- package/tests/unit/weave/metrics-calculator.spec.ts +212 -0
- package/tests/unit/weave/metrics-logger.spec.ts +233 -0
- package/tests/unit/weave/metrics-schema.spec.ts +383 -0
- package/tests/unit/weave/multi-repo-plan.spec.ts +221 -0
- package/tests/unit/weave/planner.spec.ts +227 -0
- package/tests/unit/weave/post-merge-checks.spec.ts +342 -0
- package/tests/unit/weave/recovery.spec.ts +306 -0
- package/tests/unit/weave/testfix/applier.spec.ts +364 -0
- package/tests/unit/weave/testfix/e2e.spec.ts +273 -0
- package/tests/unit/weave/testfix/integration.spec.ts +128 -0
- package/tests/unit/weave/testfix/matcher.spec.ts +321 -0
- package/tests/unit/weave/testfix/schema.spec.ts +298 -0
- package/tests/utils/fingerprint.spec.ts +251 -0
- package/tests/utils/paths.spec.ts +284 -0
- package/tests/utils/tokens.spec.ts +210 -0
- package/tests/utils/validation.spec.ts +215 -0
- package/tests/utils-validation.spec.ts +80 -0
- package/tests/validate-manifests.spec.ts +231 -0
- package/tests/validation.spec.ts +501 -0
- package/tests/vuln-gate.spec.ts +341 -0
- package/tests/weave/adr007-integration.spec.ts +309 -0
- package/tests/weave/checkpoint/cli-integration.spec.ts +118 -0
- package/tests/weave/checkpoint/storage.spec.ts +302 -0
- package/tests/weave/checkpoint/utils.spec.ts +223 -0
- package/tests/weave/frameHelper.spec.ts +423 -0
- package/tests/weave/gateFailureHandler.spec.ts +249 -0
- package/tests/weave/lockFile.spec.ts +387 -0
- package/tests/weave/mergeHelpers.spec.ts +173 -0
- package/tests/weave/receiptHelper.spec.ts +261 -0
- package/tests/weave/stateMachine.spec.ts +436 -0
- package/tests/weave-contract.test.ts +517 -0
- package/tests/weave-e2e.spec.ts +279 -0
- package/tests/weaveLock.spec.ts +136 -0
- package/tests/workflow-state-machine.spec.ts +274 -0
- package/tests/write-protection.spec.ts +213 -0
- package/tsconfig.json +18 -0
- package/tsup.config.ts +12 -0
- package/vitest.benchmark.config.ts +17 -0
- package/vitest.config.ts +28 -0
- package/vitest.git.config.ts +12 -0
- package/vitest.slow-cli.config.ts +28 -0
|
@@ -0,0 +1,1211 @@
|
|
|
1
|
+
# Diffgraph Planner Guide
|
|
2
|
+
|
|
3
|
+
The diffgraph planner enables automatic dependency discovery and intelligent merge ordering for multiple PRs. This guide covers everything from basic usage to advanced workflows.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Introduction](#introduction)
|
|
8
|
+
- [Quick Start](#quick-start)
|
|
9
|
+
- [Dependency Syntax Reference](#dependency-syntax-reference)
|
|
10
|
+
- [File-Change Heuristics](#file-change-heuristics)
|
|
11
|
+
- [Validation & Troubleshooting](#validation--troubleshooting)
|
|
12
|
+
- [Workflows & Best Practices](#workflows--best-practices)
|
|
13
|
+
- [Advanced Topics](#advanced-topics)
|
|
14
|
+
- [API Reference](#api-reference)
|
|
15
|
+
- [Examples Gallery](#examples-gallery)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Introduction
|
|
20
|
+
|
|
21
|
+
### What is Diffgraph Planning?
|
|
22
|
+
|
|
23
|
+
Diffgraph planning automatically discovers dependencies between pull requests and computes an optimal merge order. Instead of manually tracking which PRs depend on which, the planner:
|
|
24
|
+
|
|
25
|
+
1. **Parses explicit dependencies** from PR descriptions (e.g., `Depends-on: #123`)
|
|
26
|
+
2. **Analyzes file changes** to suggest implicit dependencies
|
|
27
|
+
3. **Validates the dependency graph** for cycles and orphans
|
|
28
|
+
4. **Computes merge layers** using topological sort
|
|
29
|
+
5. **Generates a deterministic plan** for execution
|
|
30
|
+
|
|
31
|
+
**Result:** A validated, executable plan that merges PRs in the correct order, respecting dependencies.
|
|
32
|
+
|
|
33
|
+
### When to Use Auto-Discovery vs Manual Planning
|
|
34
|
+
|
|
35
|
+
| Scenario | Recommended Approach | Why |
|
|
36
|
+
| -------------------------- | --------------------------- | --------------------------------- |
|
|
37
|
+
| **Small team (2-5 devs)** | Auto-discovery with review | Fast, catches missed dependencies |
|
|
38
|
+
| **Large team (10+ devs)** | Explicit deps + suggestions | Better control, human oversight |
|
|
39
|
+
| **Complex feature stacks** | Hybrid (both) | Combines precision with discovery |
|
|
40
|
+
| **Independent hotfixes** | Manual planning | No dependencies to discover |
|
|
41
|
+
| **Batch refactors** | Auto-discovery | File overlap is reliable signal |
|
|
42
|
+
|
|
43
|
+
### High-Level Workflow
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
┌─────────────────┐
|
|
47
|
+
│ Open PRs (GitHub)│
|
|
48
|
+
│ with descriptions│
|
|
49
|
+
└────────┬─────────┘
|
|
50
|
+
│
|
|
51
|
+
▼
|
|
52
|
+
┌─────────────────────────┐
|
|
53
|
+
│ 1. Parse Dependencies │ ← Explicit footers (Depends-on:)
|
|
54
|
+
│ (dependencyParser) │
|
|
55
|
+
└────────┬────────────────┘
|
|
56
|
+
│
|
|
57
|
+
▼
|
|
58
|
+
┌─────────────────────────┐
|
|
59
|
+
│ 2. Analyze File Changes │ ← Implicit suggestions (shared files)
|
|
60
|
+
│ (fileAnalysis) │
|
|
61
|
+
└────────┬────────────────┘
|
|
62
|
+
│
|
|
63
|
+
▼
|
|
64
|
+
┌─────────────────────────┐
|
|
65
|
+
│ 3. Score Dependencies │ ← Combine explicit + implicit
|
|
66
|
+
│ (dependencyScoring) │
|
|
67
|
+
└────────┬────────────────┘
|
|
68
|
+
│
|
|
69
|
+
▼
|
|
70
|
+
┌─────────────────────────┐
|
|
71
|
+
│ 4. Validate Plan │ ← Check cycles, orphans, refs
|
|
72
|
+
│ (validation) │
|
|
73
|
+
└────────┬────────────────┘
|
|
74
|
+
│
|
|
75
|
+
▼
|
|
76
|
+
┌─────────────────────────┐
|
|
77
|
+
│ 5. Generate plan.json │ ← Deterministic, executable
|
|
78
|
+
└─────────────────────────┘
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Quick Start
|
|
84
|
+
|
|
85
|
+
This minimal example shows how to generate and execute a plan for 3 PRs with dependencies.
|
|
86
|
+
|
|
87
|
+
### Setup: PRs with Dependencies
|
|
88
|
+
|
|
89
|
+
You have 3 open PRs:
|
|
90
|
+
|
|
91
|
+
- **PR-100:** `feature/auth-api` - Add authentication API endpoints
|
|
92
|
+
- **PR-101:** `feature/auth-ui` - Add authentication UI (depends on API)
|
|
93
|
+
- **PR-102:** `feature/auth-tests` - Add E2E tests (depends on UI)
|
|
94
|
+
|
|
95
|
+
### Step 1: Add Dependency Footers
|
|
96
|
+
|
|
97
|
+
Update PR descriptions with explicit dependencies:
|
|
98
|
+
|
|
99
|
+
**PR-101 description:**
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
Add authentication UI components.
|
|
103
|
+
|
|
104
|
+
Depends-on: #100
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**PR-102 description:**
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
Add E2E tests for authentication flow.
|
|
111
|
+
|
|
112
|
+
Depends-on: #101
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Step 2: Generate Plan
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Set GitHub token (if not already in environment)
|
|
119
|
+
export GITHUB_TOKEN=your_token_here
|
|
120
|
+
|
|
121
|
+
# Generate plan from GitHub PRs
|
|
122
|
+
lex-pr plan --from-github --output plan.json
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Expected output:**
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
✓ Fetched 3 open PRs
|
|
129
|
+
✓ Parsed dependencies: 2 explicit, 0 implicit
|
|
130
|
+
✓ Validated: no cycles, no orphans
|
|
131
|
+
✓ Generated plan: 3 nodes, 2 edges, 3 layers
|
|
132
|
+
|
|
133
|
+
Plan written to: plan.json
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Step 3: Review Plan
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Show merge order
|
|
140
|
+
lex-pr merge-order plan.json
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Expected output:**
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
📊 Merge order for 3 items:
|
|
147
|
+
|
|
148
|
+
Layer 0 (ready):
|
|
149
|
+
→ PR-100 (auth-api)
|
|
150
|
+
|
|
151
|
+
Layer 1 (after PR-100):
|
|
152
|
+
→ PR-101 (auth-ui)
|
|
153
|
+
|
|
154
|
+
Layer 2 (after PR-101):
|
|
155
|
+
→ PR-102 (auth-tests)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Step 4: Execute
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Run gates and merge (dry-run first)
|
|
162
|
+
lex-pr merge --plan plan.json
|
|
163
|
+
|
|
164
|
+
# Execute for real
|
|
165
|
+
lex-pr merge --plan plan.json --execute
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**What happens:**
|
|
169
|
+
|
|
170
|
+
1. PR-100 gates run → merge
|
|
171
|
+
2. PR-101 gates run → merge (after PR-100)
|
|
172
|
+
3. PR-102 gates run → merge (after PR-101)
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Dependency Syntax Reference
|
|
177
|
+
|
|
178
|
+
The planner recognizes multiple dependency formats in PR descriptions.
|
|
179
|
+
|
|
180
|
+
### Supported Keywords
|
|
181
|
+
|
|
182
|
+
| Keyword | Example | Notes |
|
|
183
|
+
| ------------- | --------------------- | ------------------------------------- |
|
|
184
|
+
| `Depends-on:` | `Depends-on: #123` | **Recommended** - explicit dependency |
|
|
185
|
+
| `Depends:` | `Depends: #123, #456` | Alias for `Depends-on:` |
|
|
186
|
+
| `Requires:` | `Requires: #123` | Alias for `Depends-on:` |
|
|
187
|
+
| `Closes:` | `Closes: #100` | GitHub keyword (not a dependency) |
|
|
188
|
+
| `Fixes:` | `Fixes: #200` | GitHub keyword (not a dependency) |
|
|
189
|
+
| `Resolves:` | `Resolves: #300` | GitHub keyword (not a dependency) |
|
|
190
|
+
|
|
191
|
+
**Note:** `Closes`, `Fixes`, and `Resolves` are GitHub issue-closing keywords and are **not treated as dependencies** by the planner.
|
|
192
|
+
|
|
193
|
+
### Single Dependency
|
|
194
|
+
|
|
195
|
+
```markdown
|
|
196
|
+
Depends-on: #123
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Multiple Dependencies
|
|
200
|
+
|
|
201
|
+
```markdown
|
|
202
|
+
Depends-on: #123, #456, #789
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
or split across lines:
|
|
206
|
+
|
|
207
|
+
```markdown
|
|
208
|
+
Depends-on: #123
|
|
209
|
+
Depends-on: #456
|
|
210
|
+
Depends-on: #789
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Cross-Repo References
|
|
214
|
+
|
|
215
|
+
```markdown
|
|
216
|
+
Depends-on: owner/repo#123
|
|
217
|
+
Depends-on: other-repo#456
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Normalization:** All references are normalized to `owner/repo#number` format internally.
|
|
221
|
+
|
|
222
|
+
### Invalid Syntax Examples
|
|
223
|
+
|
|
224
|
+
❌ **Don't do this:**
|
|
225
|
+
|
|
226
|
+
```markdown
|
|
227
|
+
# Missing PR number
|
|
228
|
+
|
|
229
|
+
Depends-on: feature-branch
|
|
230
|
+
|
|
231
|
+
# Using PR- prefix (not needed)
|
|
232
|
+
|
|
233
|
+
Depends-on: PR-123
|
|
234
|
+
|
|
235
|
+
# Using URLs (not supported)
|
|
236
|
+
|
|
237
|
+
Depends-on: https://github.com/owner/repo/pull/123
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
✅ **Do this instead:**
|
|
241
|
+
|
|
242
|
+
```markdown
|
|
243
|
+
Depends-on: #123
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Placement in PR Description
|
|
247
|
+
|
|
248
|
+
Dependencies can appear **anywhere** in the PR description:
|
|
249
|
+
|
|
250
|
+
```markdown
|
|
251
|
+
## Summary
|
|
252
|
+
|
|
253
|
+
Add new feature X.
|
|
254
|
+
|
|
255
|
+
## Dependencies
|
|
256
|
+
|
|
257
|
+
Depends-on: #100, #101
|
|
258
|
+
|
|
259
|
+
## Changes
|
|
260
|
+
|
|
261
|
+
- Feature implementation
|
|
262
|
+
- Tests added
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
The parser extracts all `Depends-on:` lines regardless of position.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## File-Change Heuristics
|
|
270
|
+
|
|
271
|
+
When explicit dependencies are missing, the planner uses file-change analysis to suggest implicit dependencies.
|
|
272
|
+
|
|
273
|
+
### How It Works
|
|
274
|
+
|
|
275
|
+
1. **Fetch file changes** for each PR (via GitHub API)
|
|
276
|
+
2. **Build intersection matrix** - which PRs touch the same files
|
|
277
|
+
3. **Calculate confidence scores** based on overlap patterns
|
|
278
|
+
4. **Generate suggestions** sorted by confidence (high to low)
|
|
279
|
+
|
|
280
|
+
### Confidence Scoring Explained
|
|
281
|
+
|
|
282
|
+
#### Shared File Modifications (0.6 - 1.0)
|
|
283
|
+
|
|
284
|
+
**Highest confidence** - both PRs modify the same file.
|
|
285
|
+
|
|
286
|
+
| Pattern | Confidence | Example |
|
|
287
|
+
| ------------------------- | ---------- | ------------------------------------------------------------ |
|
|
288
|
+
| Both modify same file | 1.0 | PR-101 modifies `core.ts`, PR-102 modifies `core.ts` |
|
|
289
|
+
| One modifies, one renames | 0.8 | PR-101 modifies `old.ts`, PR-102 renames `old.ts` → `new.ts` |
|
|
290
|
+
| Mixed (modify + delete) | 0.6 | PR-101 modifies `utils.ts`, PR-102 deletes `utils.ts` |
|
|
291
|
+
|
|
292
|
+
**Heuristic:** If two PRs modify overlapping files, they likely have a dependency relationship.
|
|
293
|
+
|
|
294
|
+
#### Directory Proximity (0.3 - 0.8)
|
|
295
|
+
|
|
296
|
+
**Medium confidence** - PRs work in the same area of the codebase.
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
Formula: min(commonDirs / totalDirs, 0.8)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
| Scenario | Confidence | Example |
|
|
303
|
+
| --------------------------- | ---------- | ---------------------------------------- |
|
|
304
|
+
| All files in same directory | 0.8 | Both modify files only in `src/planner/` |
|
|
305
|
+
| Majority overlap | 0.6 | 3/5 directories in common |
|
|
306
|
+
| Partial overlap | 0.4 | 1/3 directories in common |
|
|
307
|
+
| Minimal overlap | 0.3 | Different directories, same parent |
|
|
308
|
+
|
|
309
|
+
**Heuristic:** PRs working in the same module/directory often have dependencies.
|
|
310
|
+
|
|
311
|
+
#### Test Overlap (0.5 - 0.85)
|
|
312
|
+
|
|
313
|
+
**Medium-high confidence** - PRs test the same modules.
|
|
314
|
+
|
|
315
|
+
| Pattern | Confidence | Example |
|
|
316
|
+
| ------------------ | ---------- | ---------------------------------------------------------- |
|
|
317
|
+
| Shared test file | 0.85 | Both modify `tests/core.spec.ts` |
|
|
318
|
+
| Same module tested | 0.65 | PR-101: `tests/core.spec.ts`, PR-102: `tests/core.test.ts` |
|
|
319
|
+
| Related test files | 0.5 | Both modify tests in `tests/api/` |
|
|
320
|
+
|
|
321
|
+
**Heuristic:** If PRs test the same module, their implementations may be related.
|
|
322
|
+
|
|
323
|
+
### When to Trust Implicit Dependencies
|
|
324
|
+
|
|
325
|
+
✅ **High confidence (≥0.7)** - likely a real dependency:
|
|
326
|
+
|
|
327
|
+
- Both PRs modify the same critical file (`core.ts`, `schema.ts`)
|
|
328
|
+
- Extensive file overlap (5+ files)
|
|
329
|
+
- Test files overlap suggests implementation dependency
|
|
330
|
+
|
|
331
|
+
⚠️ **Medium confidence (0.4-0.7)** - requires human review:
|
|
332
|
+
|
|
333
|
+
- Partial file overlap (1-3 files)
|
|
334
|
+
- Directory proximity but different concerns
|
|
335
|
+
- Test overlap but different features
|
|
336
|
+
|
|
337
|
+
❌ **Low confidence (<0.4)** - probably coincidence:
|
|
338
|
+
|
|
339
|
+
- Minimal file overlap
|
|
340
|
+
- Common utility files (`utils.ts`, `types.ts`)
|
|
341
|
+
- Documentation changes
|
|
342
|
+
|
|
343
|
+
### When to Add Explicit Dependencies
|
|
344
|
+
|
|
345
|
+
Even with high-confidence suggestions, **always prefer explicit dependencies**:
|
|
346
|
+
|
|
347
|
+
1. **Clarity:** Human-readable intent in PR descriptions
|
|
348
|
+
2. **Determinism:** Explicit deps never change (file-based suggestions can)
|
|
349
|
+
3. **Debugging:** Easier to understand why PRs are ordered a certain way
|
|
350
|
+
4. **Trust:** Team members understand the relationship
|
|
351
|
+
|
|
352
|
+
**Best practice:** Use suggestions to **discover** missing dependencies, then **add explicit footers** to PR descriptions.
|
|
353
|
+
|
|
354
|
+
### Suggestion Output Formats
|
|
355
|
+
|
|
356
|
+
#### Table Format (Human-Readable)
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
lex-pr plan --suggest-deps
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
```
|
|
363
|
+
📊 Dependency Suggestions (3 found):
|
|
364
|
+
|
|
365
|
+
| From | To | Confidence | Heuristic | Reason |
|
|
366
|
+
|--------|--------|------------|--------------------|-------------------------------------|
|
|
367
|
+
| PR-101 | PR-102 | 95% | shared-files | shared file modifications |
|
|
368
|
+
| PR-201 | PR-202 | 65% | test-overlap | tests for same module |
|
|
369
|
+
| PR-301 | PR-302 | 50% | directory-proximity| both modify files in 1 common dir |
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
#### JSON Format (Machine-Readable)
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
lex-pr plan --suggest-deps --json
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
```json
|
|
379
|
+
{
|
|
380
|
+
"suggestions": [
|
|
381
|
+
{
|
|
382
|
+
"from": "PR-101",
|
|
383
|
+
"to": "PR-102",
|
|
384
|
+
"reason": "shared file modifications",
|
|
385
|
+
"confidence": 0.95,
|
|
386
|
+
"sharedFiles": ["src/core.ts", "src/utils.ts"],
|
|
387
|
+
"heuristic": "shared-files"
|
|
388
|
+
}
|
|
389
|
+
]
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
#### Markdown Format (Review-Friendly)
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
lex-pr plan --suggest-deps --format=markdown
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
```markdown
|
|
400
|
+
## Dependency Suggestions
|
|
401
|
+
|
|
402
|
+
### High Confidence (≥0.7)
|
|
403
|
+
|
|
404
|
+
- **PR-101 → PR-102** (95% confidence)
|
|
405
|
+
- Heuristic: shared-files
|
|
406
|
+
- Reason: shared file modifications
|
|
407
|
+
- Files: `src/core.ts`, `src/utils.ts`
|
|
408
|
+
|
|
409
|
+
### Medium Confidence (0.4-0.7)
|
|
410
|
+
|
|
411
|
+
- **PR-201 → PR-202** (65% confidence)
|
|
412
|
+
- Heuristic: test-overlap
|
|
413
|
+
- Reason: tests for same module
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Validation & Troubleshooting
|
|
419
|
+
|
|
420
|
+
The planner validates plans before execution to catch errors early.
|
|
421
|
+
|
|
422
|
+
### Validation Checks
|
|
423
|
+
|
|
424
|
+
1. **Cycle detection** - no circular dependencies
|
|
425
|
+
2. **Reference validation** - all deps point to valid PRs
|
|
426
|
+
3. **Self-dependency check** - no PR depends on itself
|
|
427
|
+
4. **Orphan detection** - warn about isolated PRs
|
|
428
|
+
|
|
429
|
+
### Error: Dependency Cycle Detected
|
|
430
|
+
|
|
431
|
+
**Symptom:**
|
|
432
|
+
|
|
433
|
+
```
|
|
434
|
+
❌ Validation failed: Dependency cycle detected
|
|
435
|
+
Cycle path: PR-100 → PR-101 → PR-102 → PR-100
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
**Cause:** Circular dependency in the graph.
|
|
439
|
+
|
|
440
|
+
**Diagnosis:**
|
|
441
|
+
|
|
442
|
+
1. Review the cycle path from the error message
|
|
443
|
+
2. Check PR descriptions for circular `Depends-on:` footers
|
|
444
|
+
3. Check file overlap (might be false positive from heuristics)
|
|
445
|
+
|
|
446
|
+
**Solution:**
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
# Step 1: Identify the weakest link in the cycle
|
|
450
|
+
lex-pr plan --suggest-deps --json | jq '.suggestions[] | select(.from == "PR-100" and .to == "PR-101")'
|
|
451
|
+
|
|
452
|
+
# Step 2: If the dependency is weak (low confidence), remove it
|
|
453
|
+
# Edit PR description, remove "Depends-on: #100"
|
|
454
|
+
|
|
455
|
+
# Step 3: Regenerate plan
|
|
456
|
+
lex-pr plan --from-github --output plan.json
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Example fix:**
|
|
460
|
+
|
|
461
|
+
Before (cycle):
|
|
462
|
+
|
|
463
|
+
```
|
|
464
|
+
PR-100: Depends-on: #102
|
|
465
|
+
PR-101: Depends-on: #100
|
|
466
|
+
PR-102: Depends-on: #101
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
After (broken cycle):
|
|
470
|
+
|
|
471
|
+
```
|
|
472
|
+
PR-100: (no dependencies)
|
|
473
|
+
PR-101: Depends-on: #100
|
|
474
|
+
PR-102: Depends-on: #101
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Warning: Unreachable/Orphan PRs
|
|
478
|
+
|
|
479
|
+
**Symptom:**
|
|
480
|
+
|
|
481
|
+
```
|
|
482
|
+
⚠️ Warning: Orphan PRs detected (no dependencies, no dependents)
|
|
483
|
+
- PR-999 (hotfix/security-patch)
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Cause:** PR has no dependencies and no other PRs depend on it.
|
|
487
|
+
|
|
488
|
+
**Is this a problem?**
|
|
489
|
+
|
|
490
|
+
Sometimes **NO** (valid scenarios):
|
|
491
|
+
|
|
492
|
+
- Independent hotfixes
|
|
493
|
+
- Parallel feature work
|
|
494
|
+
- Refactors with no dependencies
|
|
495
|
+
|
|
496
|
+
Sometimes **YES** (missing dependencies):
|
|
497
|
+
|
|
498
|
+
- PR should depend on foundation work
|
|
499
|
+
- PR is part of a stack but missing `Depends-on:` footer
|
|
500
|
+
|
|
501
|
+
**Diagnosis:**
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
# Check if suggestions exist for the orphan PR
|
|
505
|
+
lex-pr plan --suggest-deps | grep "PR-999"
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
**Solution:**
|
|
509
|
+
|
|
510
|
+
If suggestions exist:
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
# Add explicit dependency to PR description
|
|
514
|
+
# Edit PR-999, add "Depends-on: #100"
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
If truly independent:
|
|
518
|
+
|
|
519
|
+
```bash
|
|
520
|
+
# Ignore the warning - this is expected
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Low-Confidence Implicit Dependencies
|
|
524
|
+
|
|
525
|
+
**Symptom:**
|
|
526
|
+
|
|
527
|
+
```
|
|
528
|
+
📊 Dependency Suggestions (1 found):
|
|
529
|
+
| From | To | Confidence | Heuristic |
|
|
530
|
+
|--------|--------|------------|-------------------|
|
|
531
|
+
| PR-101 | PR-102 | 35% | directory-proximity|
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
**Cause:** File overlap is weak, heuristics are uncertain.
|
|
535
|
+
|
|
536
|
+
**Options:**
|
|
537
|
+
|
|
538
|
+
1. **Add explicit dependency** (if relationship exists):
|
|
539
|
+
|
|
540
|
+
```markdown
|
|
541
|
+
# In PR-102 description
|
|
542
|
+
|
|
543
|
+
Depends-on: #101
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
2. **Ignore suggestion** (if PRs are truly independent):
|
|
547
|
+
|
|
548
|
+
```bash
|
|
549
|
+
# Use higher threshold to filter out low-confidence suggestions
|
|
550
|
+
lex-pr plan --suggest-deps --threshold=0.5
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
3. **Investigate further**:
|
|
554
|
+
```bash
|
|
555
|
+
# Get detailed file overlap info
|
|
556
|
+
lex-pr plan --suggest-deps --json | jq '.suggestions[] | select(.confidence < 0.5)'
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
### Plan Differs Between Runs
|
|
560
|
+
|
|
561
|
+
**Symptom:** Running the same command twice produces different output.
|
|
562
|
+
|
|
563
|
+
**Cause:** This should **never happen** - it's a determinism bug.
|
|
564
|
+
|
|
565
|
+
**Diagnosis:**
|
|
566
|
+
|
|
567
|
+
```bash
|
|
568
|
+
# Generate plan twice, compare
|
|
569
|
+
lex-pr plan --from-github --output plan1.json
|
|
570
|
+
lex-pr plan --from-github --output plan2.json
|
|
571
|
+
diff plan1.json plan2.json
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
**If different:**
|
|
575
|
+
|
|
576
|
+
1. Check for timestamp fields (file them as a bug)
|
|
577
|
+
2. Check for random ordering (file them as a bug)
|
|
578
|
+
3. Check for network timing issues (file them as a bug)
|
|
579
|
+
|
|
580
|
+
**Workaround:**
|
|
581
|
+
|
|
582
|
+
```bash
|
|
583
|
+
# Pin specific commit SHAs in plan (not yet supported - file a feature request)
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
**Report:** This is a critical bug - please [file an issue](https://github.com/Guffawaffle/LexRunner/issues/new/choose) with:
|
|
587
|
+
|
|
588
|
+
- Commands run
|
|
589
|
+
- Diff of the two plans
|
|
590
|
+
- Environment details (OS, Node version, lex-pr version)
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## Workflows & Best Practices
|
|
595
|
+
|
|
596
|
+
Choose the workflow that matches your team's size and trust level.
|
|
597
|
+
|
|
598
|
+
### Workflow 1: Full Auto (Trust the Planner)
|
|
599
|
+
|
|
600
|
+
**Best for:** Small teams (2-5 devs), high trust in tooling
|
|
601
|
+
|
|
602
|
+
```bash
|
|
603
|
+
# One-shot: generate and execute
|
|
604
|
+
lex-pr plan --from-github --output plan.json
|
|
605
|
+
lex-pr execute --plan plan.json
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
**Pros:**
|
|
609
|
+
|
|
610
|
+
- ✅ **Fast** - minimal overhead
|
|
611
|
+
- ✅ **No manual review** - trust heuristics
|
|
612
|
+
- ✅ **Catch implicit deps** - discovers missed relationships
|
|
613
|
+
|
|
614
|
+
**Cons:**
|
|
615
|
+
|
|
616
|
+
- ❌ **Potential errors** - heuristics can be wrong
|
|
617
|
+
- ❌ **Less control** - no human verification
|
|
618
|
+
- ❌ **Trust required** - team must trust the planner
|
|
619
|
+
|
|
620
|
+
**When to use:**
|
|
621
|
+
|
|
622
|
+
- Small codebase with clear module boundaries
|
|
623
|
+
- High test coverage (gates catch integration issues)
|
|
624
|
+
- Team is comfortable with automation
|
|
625
|
+
|
|
626
|
+
### Workflow 2: Review Before Execute
|
|
627
|
+
|
|
628
|
+
**Best for:** Medium teams (5-10 devs), safety-first culture
|
|
629
|
+
|
|
630
|
+
```bash
|
|
631
|
+
# Step 1: Generate suggestions for review
|
|
632
|
+
lex-pr plan --suggest-deps --format=markdown > review.md
|
|
633
|
+
|
|
634
|
+
# Step 2: Human reviews review.md
|
|
635
|
+
# - Approve high-confidence suggestions
|
|
636
|
+
# - Reject false positives
|
|
637
|
+
# - Add missing explicit dependencies
|
|
638
|
+
|
|
639
|
+
# Step 3: Update PR descriptions with approved dependencies
|
|
640
|
+
# (Manual step: edit PR descriptions in GitHub)
|
|
641
|
+
|
|
642
|
+
# Step 4: Generate final plan (with updated explicit deps)
|
|
643
|
+
lex-pr plan --from-github --output plan.json
|
|
644
|
+
|
|
645
|
+
# Step 5: Execute
|
|
646
|
+
lex-pr execute --plan plan.json
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
**Pros:**
|
|
650
|
+
|
|
651
|
+
- ✅ **Human oversight** - catches errors early
|
|
652
|
+
- ✅ **Learning opportunity** - team understands dependencies
|
|
653
|
+
- ✅ **Trust building** - verify heuristics are working
|
|
654
|
+
|
|
655
|
+
**Cons:**
|
|
656
|
+
|
|
657
|
+
- ❌ **Slower** - requires review step
|
|
658
|
+
- ❌ **Manual updates** - editing PR descriptions
|
|
659
|
+
- ❌ **Cognitive load** - reviewing suggestions
|
|
660
|
+
|
|
661
|
+
**When to use:**
|
|
662
|
+
|
|
663
|
+
- Medium-sized team with complex dependencies
|
|
664
|
+
- High-stakes releases (production deployments)
|
|
665
|
+
- Building trust in the planner (early adoption)
|
|
666
|
+
|
|
667
|
+
### Workflow 3: Hybrid (Explicit + Suggestions)
|
|
668
|
+
|
|
669
|
+
**Best for:** Large teams (10+ devs), complex repos
|
|
670
|
+
|
|
671
|
+
```bash
|
|
672
|
+
# Step 1: PRs already have some explicit dependencies
|
|
673
|
+
# (Team discipline: always add Depends-on: for known deps)
|
|
674
|
+
|
|
675
|
+
# Step 2: Generate suggestions for missing dependencies
|
|
676
|
+
lex-pr plan --suggest-deps --threshold=0.7 > suggestions.md
|
|
677
|
+
|
|
678
|
+
# Step 3: Review high-confidence suggestions only (≥0.7)
|
|
679
|
+
# Add them to PR descriptions
|
|
680
|
+
|
|
681
|
+
# Step 4: Generate plan (combines explicit + reviewed implicit)
|
|
682
|
+
lex-pr plan --from-github --output plan.json
|
|
683
|
+
|
|
684
|
+
# Step 5: Execute
|
|
685
|
+
lex-pr execute --plan plan.json
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
**Pros:**
|
|
689
|
+
|
|
690
|
+
- ✅ **Best of both worlds** - explicit control + discovery
|
|
691
|
+
- ✅ **Scales well** - clear rules for large teams
|
|
692
|
+
- ✅ **High confidence** - only trust strong signals
|
|
693
|
+
|
|
694
|
+
**Cons:**
|
|
695
|
+
|
|
696
|
+
- ❌ **Requires discipline** - team must add explicit deps
|
|
697
|
+
- ❌ **Configuration needed** - threshold tuning
|
|
698
|
+
- ❌ **More steps** - review + update cycle
|
|
699
|
+
|
|
700
|
+
**When to use:**
|
|
701
|
+
|
|
702
|
+
- Large codebase with many concurrent PRs
|
|
703
|
+
- Established team with good practices
|
|
704
|
+
- Complex dependency patterns (stacks, diamonds, etc.)
|
|
705
|
+
|
|
706
|
+
### Best Practices Summary
|
|
707
|
+
|
|
708
|
+
| Practice | Why | How |
|
|
709
|
+
| ------------------------ | ----------------------- | -------------------------------------- |
|
|
710
|
+
| **Prefer explicit deps** | Clarity and determinism | Always add `Depends-on:` when known |
|
|
711
|
+
| **Use high thresholds** | Filter noise | `--threshold=0.7` for hybrid workflow |
|
|
712
|
+
| **Review suggestions** | Catch errors | Generate `review.md` before execution |
|
|
713
|
+
| **Test heuristics** | Build trust | Compare suggestions to ground truth |
|
|
714
|
+
| **Document decisions** | Team alignment | Add comments in PR descriptions |
|
|
715
|
+
| **Validate early** | Catch cycles | Run `plan --validate` before execution |
|
|
716
|
+
| **Commit plans** | Reproducibility | Store `plan.json` in version control |
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
## Advanced Topics
|
|
721
|
+
|
|
722
|
+
### Custom Scoring Weights
|
|
723
|
+
|
|
724
|
+
Adjust the weights for different heuristics:
|
|
725
|
+
|
|
726
|
+
```typescript
|
|
727
|
+
import { scoreDependencies } from "./planner/dependencyScoring.js";
|
|
728
|
+
|
|
729
|
+
const scores = await scoreDependencies(prs, fileAnalyzer, {
|
|
730
|
+
weights: {
|
|
731
|
+
explicit: 1.0, // Explicit deps always win
|
|
732
|
+
sharedFiles: 0.8, // Lower weight for file overlap
|
|
733
|
+
directoryProximity: 0.5, // Lower weight for directory proximity
|
|
734
|
+
testOverlap: 0.6, // Medium weight for test overlap
|
|
735
|
+
},
|
|
736
|
+
threshold: 0.5, // Filter out scores below 0.5
|
|
737
|
+
});
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
**Use case:** Tune weights based on your codebase characteristics.
|
|
741
|
+
|
|
742
|
+
### Filtering PRs by Label
|
|
743
|
+
|
|
744
|
+
```bash
|
|
745
|
+
# Only include PRs with specific labels
|
|
746
|
+
lex-pr plan --from-github --labels "ready-to-merge,stack:*"
|
|
747
|
+
|
|
748
|
+
# Exclude PRs with specific labels
|
|
749
|
+
lex-pr plan --from-github --exclude-labels "do-not-merge,wip"
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
**Use case:** Focus on a subset of PRs (e.g., only "ready" PRs).
|
|
753
|
+
|
|
754
|
+
### Excluding Stale PRs
|
|
755
|
+
|
|
756
|
+
```bash
|
|
757
|
+
# Only include PRs updated in the last 7 days
|
|
758
|
+
lex-pr plan --from-github --since 7d
|
|
759
|
+
|
|
760
|
+
# Only include PRs created after a specific date
|
|
761
|
+
lex-pr plan --from-github --created-after 2024-01-01
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
**Use case:** Ignore old PRs that are no longer relevant.
|
|
765
|
+
|
|
766
|
+
### Plan Diffing
|
|
767
|
+
|
|
768
|
+
Compare two plans to see what changed:
|
|
769
|
+
|
|
770
|
+
```bash
|
|
771
|
+
# Generate plan at two different times
|
|
772
|
+
lex-pr plan --from-github --output plan-old.json
|
|
773
|
+
# (PRs are updated)
|
|
774
|
+
lex-pr plan --from-github --output plan-new.json
|
|
775
|
+
|
|
776
|
+
# Diff the plans
|
|
777
|
+
lex-pr plan-diff plan-old.json plan-new.json
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
**Output:**
|
|
781
|
+
|
|
782
|
+
```
|
|
783
|
+
📊 Plan Diff:
|
|
784
|
+
|
|
785
|
+
Added PRs:
|
|
786
|
+
+ PR-105 (new-feature)
|
|
787
|
+
|
|
788
|
+
Removed PRs:
|
|
789
|
+
- PR-99 (merged)
|
|
790
|
+
|
|
791
|
+
Changed dependencies:
|
|
792
|
+
~ PR-101: added dep on PR-104
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
**Use case:** Understand how plan evolved as PRs are added/merged.
|
|
796
|
+
|
|
797
|
+
### Incremental Planning
|
|
798
|
+
|
|
799
|
+
Add new PRs to an existing plan without regenerating:
|
|
800
|
+
|
|
801
|
+
```bash
|
|
802
|
+
# Start with existing plan
|
|
803
|
+
lex-pr plan --from-github --output plan.json
|
|
804
|
+
|
|
805
|
+
# Add a new PR manually
|
|
806
|
+
# (Edit plan.json, add new item)
|
|
807
|
+
|
|
808
|
+
# Validate the updated plan
|
|
809
|
+
lex-pr plan --validate plan.json
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
**Use case:** Quick updates without full regeneration.
|
|
813
|
+
|
|
814
|
+
---
|
|
815
|
+
|
|
816
|
+
## API Reference
|
|
817
|
+
|
|
818
|
+
This section documents the public APIs in the planner modules. Each function includes TypeScript signatures, examples, and links to source code.
|
|
819
|
+
|
|
820
|
+
### `parsePRDescription()`
|
|
821
|
+
|
|
822
|
+
Parse dependencies and metadata from a PR description.
|
|
823
|
+
|
|
824
|
+
**Module:** `src/planner/dependencyParser.ts`
|
|
825
|
+
|
|
826
|
+
**Signature:**
|
|
827
|
+
|
|
828
|
+
```typescript
|
|
829
|
+
function parsePRDescription(
|
|
830
|
+
prNumber: number,
|
|
831
|
+
description: string | null,
|
|
832
|
+
options?: ParserOptions
|
|
833
|
+
): ParsedDependency;
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
**Parameters:**
|
|
837
|
+
|
|
838
|
+
- `prNumber` - PR number (e.g., `123`)
|
|
839
|
+
- `description` - PR body text (can be `null`)
|
|
840
|
+
- `options` - Parsing options
|
|
841
|
+
- `repository?: string` - Owner/repo for normalization (e.g., `"owner/repo"`)
|
|
842
|
+
- `partialExtraction?: boolean` - Continue on errors (default: `false`)
|
|
843
|
+
|
|
844
|
+
**Returns:** `ParsedDependency` object with:
|
|
845
|
+
|
|
846
|
+
- `prId: string` - Normalized PR ID (e.g., `"PR-123"`)
|
|
847
|
+
- `dependencies: string[]` - Array of dependency references
|
|
848
|
+
- `gates?: { skip?: string[], required?: string[] }` - Gate overrides
|
|
849
|
+
- `metadata?: { priority?: string, labels?: string[], ... }` - Extracted metadata
|
|
850
|
+
|
|
851
|
+
**Example:**
|
|
852
|
+
|
|
853
|
+
```typescript
|
|
854
|
+
import { parsePRDescription } from "./planner/dependencyParser.js";
|
|
855
|
+
|
|
856
|
+
const description = `
|
|
857
|
+
Add authentication API.
|
|
858
|
+
|
|
859
|
+
Depends-on: #100, #101
|
|
860
|
+
Required: security-scan
|
|
861
|
+
`;
|
|
862
|
+
|
|
863
|
+
const result = parsePRDescription(123, description, {
|
|
864
|
+
repository: "owner/repo",
|
|
865
|
+
});
|
|
866
|
+
|
|
867
|
+
console.log(result);
|
|
868
|
+
// {
|
|
869
|
+
// prId: "PR-123",
|
|
870
|
+
// dependencies: ["#100", "#101"],
|
|
871
|
+
// gates: { required: ["security-scan"] }
|
|
872
|
+
// }
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
**See also:** [Dependency Syntax Reference](#dependency-syntax-reference)
|
|
876
|
+
|
|
877
|
+
### `scoreDependencies()`
|
|
878
|
+
|
|
879
|
+
Score and rank dependencies by combining explicit and implicit signals.
|
|
880
|
+
|
|
881
|
+
**Module:** `src/planner/dependencyScoring.ts`
|
|
882
|
+
|
|
883
|
+
**Signature:**
|
|
884
|
+
|
|
885
|
+
```typescript
|
|
886
|
+
async function scoreDependencies(
|
|
887
|
+
prs: Array<{ number: number; name: string; body: string; sha: string }>,
|
|
888
|
+
fileAnalyzer: FileAnalyzer,
|
|
889
|
+
options?: ScoringOptions
|
|
890
|
+
): Promise<DependencyScore[]>;
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
**Parameters:**
|
|
894
|
+
|
|
895
|
+
- `prs` - Array of PRs with number, name, body, sha
|
|
896
|
+
- `fileAnalyzer` - File analyzer instance (from `createFileAnalyzer()`)
|
|
897
|
+
- `options` - Scoring options
|
|
898
|
+
- `weights?: { explicit?, sharedFiles?, directoryProximity?, testOverlap? }` - Custom weights
|
|
899
|
+
- `threshold?: number` - Filter out scores below this value (default: `0.3`)
|
|
900
|
+
|
|
901
|
+
**Returns:** Array of `DependencyScore` objects, sorted by confidence (descending), then from/to (ascending).
|
|
902
|
+
|
|
903
|
+
**Example:**
|
|
904
|
+
|
|
905
|
+
```typescript
|
|
906
|
+
import { scoreDependencies } from "./planner/dependencyScoring.js";
|
|
907
|
+
import { createFileAnalyzer } from "./planner/fileAnalysis.js";
|
|
908
|
+
import { Octokit } from "@octokit/rest";
|
|
909
|
+
|
|
910
|
+
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
|
|
911
|
+
const fileAnalyzer = createFileAnalyzer(octokit, "owner", "repo");
|
|
912
|
+
|
|
913
|
+
const scores = await scoreDependencies(
|
|
914
|
+
[
|
|
915
|
+
{ number: 101, name: "PR-101", body: "Depends-on: #100", sha: "abc123" },
|
|
916
|
+
{ number: 102, name: "PR-102", body: "", sha: "def456" },
|
|
917
|
+
],
|
|
918
|
+
fileAnalyzer,
|
|
919
|
+
{
|
|
920
|
+
weights: { explicit: 1.0, sharedFiles: 0.8 },
|
|
921
|
+
threshold: 0.5,
|
|
922
|
+
}
|
|
923
|
+
);
|
|
924
|
+
|
|
925
|
+
console.log(scores);
|
|
926
|
+
// [
|
|
927
|
+
// {
|
|
928
|
+
// from: "PR-101",
|
|
929
|
+
// to: "PR-100",
|
|
930
|
+
// score: 1.0,
|
|
931
|
+
// reason: "explicit-footer",
|
|
932
|
+
// evidence: { explicit: ["Depends-on: #100"] }
|
|
933
|
+
// }
|
|
934
|
+
// ]
|
|
935
|
+
```
|
|
936
|
+
|
|
937
|
+
**See also:** [File-Change Heuristics](#file-change-heuristics)
|
|
938
|
+
|
|
939
|
+
### `validatePlan()`
|
|
940
|
+
|
|
941
|
+
Validate a plan for cycles, invalid references, and orphans.
|
|
942
|
+
|
|
943
|
+
**Module:** `src/planner/validation.ts`
|
|
944
|
+
|
|
945
|
+
**Signature:**
|
|
946
|
+
|
|
947
|
+
```typescript
|
|
948
|
+
function validatePlan(plan: Plan): {
|
|
949
|
+
valid: boolean;
|
|
950
|
+
errors: ValidationError[];
|
|
951
|
+
warnings: ValidationWarning[];
|
|
952
|
+
diagnostics: ValidationDiagnostics;
|
|
953
|
+
};
|
|
954
|
+
```
|
|
955
|
+
|
|
956
|
+
**Parameters:**
|
|
957
|
+
|
|
958
|
+
- `plan` - Plan object (from `generatePlan()` or loaded from JSON)
|
|
959
|
+
|
|
960
|
+
**Returns:** Validation result with:
|
|
961
|
+
|
|
962
|
+
- `valid: boolean` - `true` if no errors
|
|
963
|
+
- `errors: ValidationError[]` - Array of validation errors (cycles, invalid refs, etc.)
|
|
964
|
+
- `warnings: ValidationWarning[]` - Array of warnings (orphans, low confidence, etc.)
|
|
965
|
+
- `diagnostics: ValidationDiagnostics` - Plan statistics (nodes, edges, layers)
|
|
966
|
+
|
|
967
|
+
**Example:**
|
|
968
|
+
|
|
969
|
+
```typescript
|
|
970
|
+
import { validatePlan } from "./planner/validation.js";
|
|
971
|
+
import { loadPlan } from "./core/plan.js";
|
|
972
|
+
|
|
973
|
+
const plan = await loadPlan("plan.json");
|
|
974
|
+
const result = validatePlan(plan);
|
|
975
|
+
|
|
976
|
+
if (!result.valid) {
|
|
977
|
+
console.error("Validation errors:");
|
|
978
|
+
result.errors.forEach((err) => {
|
|
979
|
+
console.error(` - ${err.message}`);
|
|
980
|
+
console.error(` Suggestion: ${err.suggestion}`);
|
|
981
|
+
});
|
|
982
|
+
process.exit(1);
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
if (result.warnings.length > 0) {
|
|
986
|
+
console.warn("Validation warnings:");
|
|
987
|
+
result.warnings.forEach((warn) => {
|
|
988
|
+
console.warn(` - ${warn.message}`);
|
|
989
|
+
console.warn(` Affected PRs: ${warn.affectedPRs.join(", ")}`);
|
|
990
|
+
});
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
console.log(
|
|
994
|
+
`✓ Plan is valid: ${result.diagnostics.nodes} nodes, ${result.diagnostics.edges} edges`
|
|
995
|
+
);
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
**See also:** [Validation & Troubleshooting](#validation--troubleshooting)
|
|
999
|
+
|
|
1000
|
+
### `createFileAnalyzer()`
|
|
1001
|
+
|
|
1002
|
+
Create a file analyzer for detecting implicit dependencies.
|
|
1003
|
+
|
|
1004
|
+
**Module:** `src/planner/fileAnalysis.ts`
|
|
1005
|
+
|
|
1006
|
+
**Signature:**
|
|
1007
|
+
|
|
1008
|
+
```typescript
|
|
1009
|
+
function createFileAnalyzer(octokit: Octokit, owner: string, repo: string): FileAnalyzer;
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
**Parameters:**
|
|
1013
|
+
|
|
1014
|
+
- `octokit` - Authenticated Octokit instance
|
|
1015
|
+
- `owner` - Repository owner
|
|
1016
|
+
- `repo` - Repository name
|
|
1017
|
+
|
|
1018
|
+
**Returns:** `FileAnalyzer` instance with methods:
|
|
1019
|
+
|
|
1020
|
+
- `getPRFileChanges(prNumber, sha?)` - Fetch file changes for a PR
|
|
1021
|
+
- `analyzeFiles(prs)` - Perform complete file analysis
|
|
1022
|
+
- `clearCache()` - Clear the internal cache
|
|
1023
|
+
- `getCacheStats()` - Get cache statistics
|
|
1024
|
+
|
|
1025
|
+
**Example:**
|
|
1026
|
+
|
|
1027
|
+
```typescript
|
|
1028
|
+
import { createFileAnalyzer } from "./planner/fileAnalysis.js";
|
|
1029
|
+
import { Octokit } from "@octokit/rest";
|
|
1030
|
+
|
|
1031
|
+
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
|
|
1032
|
+
const analyzer = createFileAnalyzer(octokit, "owner", "repo");
|
|
1033
|
+
|
|
1034
|
+
const analysis = await analyzer.analyzeFiles([
|
|
1035
|
+
{ number: 101, name: "PR-101", sha: "abc123" },
|
|
1036
|
+
{ number: 102, name: "PR-102", sha: "def456" },
|
|
1037
|
+
]);
|
|
1038
|
+
|
|
1039
|
+
console.log("File intersections:", analysis.fileIntersections);
|
|
1040
|
+
console.log("Suggestions:", analysis.suggestions);
|
|
1041
|
+
console.log("Conflicts:", analysis.conflicts);
|
|
1042
|
+
```
|
|
1043
|
+
|
|
1044
|
+
**See also:** [File-Change Heuristics](#file-change-heuristics), [`src/planner/README.md`](../src/planner/README.md)
|
|
1045
|
+
|
|
1046
|
+
---
|
|
1047
|
+
|
|
1048
|
+
## Examples Gallery
|
|
1049
|
+
|
|
1050
|
+
Real-world examples demonstrating different dependency patterns.
|
|
1051
|
+
|
|
1052
|
+
### Example 1: Simple Stack (Linear)
|
|
1053
|
+
|
|
1054
|
+
**Scenario:** 3 PRs building on each other sequentially.
|
|
1055
|
+
|
|
1056
|
+
**PRs:**
|
|
1057
|
+
|
|
1058
|
+
- PR-100: Add auth API (foundation)
|
|
1059
|
+
- PR-101: Add auth UI (depends on API)
|
|
1060
|
+
- PR-102: Add auth tests (depends on UI)
|
|
1061
|
+
|
|
1062
|
+
**Dependencies:**
|
|
1063
|
+
|
|
1064
|
+
```
|
|
1065
|
+
PR-100 → PR-101 → PR-102
|
|
1066
|
+
```
|
|
1067
|
+
|
|
1068
|
+
**Plan:**
|
|
1069
|
+
|
|
1070
|
+
```json
|
|
1071
|
+
{
|
|
1072
|
+
"schemaVersion": "1.0.0",
|
|
1073
|
+
"target": "main",
|
|
1074
|
+
"items": [
|
|
1075
|
+
{ "id": "pr-100", "name": "auth-api", "deps": [] },
|
|
1076
|
+
{ "id": "pr-101", "name": "auth-ui", "deps": ["auth-api"] },
|
|
1077
|
+
{ "id": "pr-102", "name": "auth-tests", "deps": ["auth-ui"] }
|
|
1078
|
+
]
|
|
1079
|
+
}
|
|
1080
|
+
```
|
|
1081
|
+
|
|
1082
|
+
**Merge order:**
|
|
1083
|
+
|
|
1084
|
+
```
|
|
1085
|
+
Layer 0: PR-100
|
|
1086
|
+
Layer 1: PR-101
|
|
1087
|
+
Layer 2: PR-102
|
|
1088
|
+
```
|
|
1089
|
+
|
|
1090
|
+
**Tutorial:** [01-simple-stack.md](./tutorials/diffgraph-planner/01-simple-stack.md)
|
|
1091
|
+
|
|
1092
|
+
### Example 2: Diamond Pattern (Fan-out/Fan-in)
|
|
1093
|
+
|
|
1094
|
+
**Scenario:** UI depends on both auth and API (which are independent).
|
|
1095
|
+
|
|
1096
|
+
**PRs:**
|
|
1097
|
+
|
|
1098
|
+
- PR-100: Add auth system
|
|
1099
|
+
- PR-101: Add API endpoints
|
|
1100
|
+
- PR-102: Add UI (depends on both PR-100 and PR-101)
|
|
1101
|
+
|
|
1102
|
+
**Dependencies:**
|
|
1103
|
+
|
|
1104
|
+
```
|
|
1105
|
+
PR-102 (UI)
|
|
1106
|
+
/ \
|
|
1107
|
+
PR-100 PR-101
|
|
1108
|
+
(auth) (API)
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
**Plan:**
|
|
1112
|
+
|
|
1113
|
+
```json
|
|
1114
|
+
{
|
|
1115
|
+
"items": [
|
|
1116
|
+
{ "id": "pr-100", "name": "auth", "deps": [] },
|
|
1117
|
+
{ "id": "pr-101", "name": "api", "deps": [] },
|
|
1118
|
+
{ "id": "pr-102", "name": "ui", "deps": ["auth", "api"] }
|
|
1119
|
+
]
|
|
1120
|
+
}
|
|
1121
|
+
```
|
|
1122
|
+
|
|
1123
|
+
**Merge order:**
|
|
1124
|
+
|
|
1125
|
+
```
|
|
1126
|
+
Layer 0: PR-100, PR-101 (parallel)
|
|
1127
|
+
Layer 1: PR-102
|
|
1128
|
+
```
|
|
1129
|
+
|
|
1130
|
+
**Tutorial:** [02-diamond-pattern.md](./tutorials/diffgraph-planner/02-diamond-pattern.md)
|
|
1131
|
+
|
|
1132
|
+
### Example 3: Large Batch (20+ PRs)
|
|
1133
|
+
|
|
1134
|
+
**Scenario:** Major refactor with 20 PRs, mixed explicit and implicit dependencies.
|
|
1135
|
+
|
|
1136
|
+
**Approach:**
|
|
1137
|
+
|
|
1138
|
+
1. Generate suggestions: `lex-pr plan --suggest-deps --threshold=0.7`
|
|
1139
|
+
2. Review high-confidence suggestions
|
|
1140
|
+
3. Add explicit deps to PR descriptions
|
|
1141
|
+
4. Generate final plan: `lex-pr plan --from-github`
|
|
1142
|
+
|
|
1143
|
+
**Result:** Complex graph with 5-7 layers, parallel execution within each layer.
|
|
1144
|
+
|
|
1145
|
+
**Tutorial:** [03-large-batch.md](./tutorials/diffgraph-planner/03-large-batch.md)
|
|
1146
|
+
|
|
1147
|
+
### Example 4: Cycle Error (Before/After Fix)
|
|
1148
|
+
|
|
1149
|
+
**Before (error):**
|
|
1150
|
+
|
|
1151
|
+
```
|
|
1152
|
+
PR-100: Depends-on: #102
|
|
1153
|
+
PR-101: Depends-on: #100
|
|
1154
|
+
PR-102: Depends-on: #101
|
|
1155
|
+
|
|
1156
|
+
❌ Cycle detected: PR-100 → PR-102 → PR-101 → PR-100
|
|
1157
|
+
```
|
|
1158
|
+
|
|
1159
|
+
**Fix:** Remove weakest dependency (PR-100 → PR-102).
|
|
1160
|
+
|
|
1161
|
+
**After (valid):**
|
|
1162
|
+
|
|
1163
|
+
```
|
|
1164
|
+
PR-100: (no dependencies)
|
|
1165
|
+
PR-101: Depends-on: #100
|
|
1166
|
+
PR-102: Depends-on: #101
|
|
1167
|
+
|
|
1168
|
+
✓ Valid: 3 nodes, 2 edges, 3 layers
|
|
1169
|
+
```
|
|
1170
|
+
|
|
1171
|
+
**Tutorial:** [04-fixing-cycles.md](./tutorials/diffgraph-planner/04-fixing-cycles.md)
|
|
1172
|
+
|
|
1173
|
+
### Example 5: Mixed Explicit + Implicit
|
|
1174
|
+
|
|
1175
|
+
**Scenario:** Some PRs have explicit deps, others rely on file-based suggestions.
|
|
1176
|
+
|
|
1177
|
+
**PRs:**
|
|
1178
|
+
|
|
1179
|
+
- PR-100: Explicit: `Depends-on: #99`
|
|
1180
|
+
- PR-101: No explicit deps, but modifies same files as PR-100
|
|
1181
|
+
- PR-102: Explicit: `Depends-on: #101`
|
|
1182
|
+
|
|
1183
|
+
**Suggestions:**
|
|
1184
|
+
|
|
1185
|
+
```
|
|
1186
|
+
PR-101 → PR-100 (0.95 confidence, shared files)
|
|
1187
|
+
```
|
|
1188
|
+
|
|
1189
|
+
**Workflow:**
|
|
1190
|
+
|
|
1191
|
+
1. Review suggestion
|
|
1192
|
+
2. Add to PR-101: `Depends-on: #100`
|
|
1193
|
+
3. Regenerate plan
|
|
1194
|
+
|
|
1195
|
+
**Tutorial:** [05-hybrid-workflow.md](./tutorials/diffgraph-planner/05-hybrid-workflow.md)
|
|
1196
|
+
|
|
1197
|
+
---
|
|
1198
|
+
|
|
1199
|
+
## Related Documentation
|
|
1200
|
+
|
|
1201
|
+
- **[Dependency Parser](./dependency-parser.md)** - Detailed parser documentation
|
|
1202
|
+
- **[Troubleshooting Planner](./troubleshooting-planner.md)** - Common errors and solutions
|
|
1203
|
+
- **[CLI Reference](./cli.md)** - Complete CLI documentation
|
|
1204
|
+
- **[Quickstart Guide](./quickstart.md)** - Initial setup and configuration
|
|
1205
|
+
- **[Tutorials](./tutorials/diffgraph-planner/)** - Step-by-step tutorials
|
|
1206
|
+
|
|
1207
|
+
## Feedback and Support
|
|
1208
|
+
|
|
1209
|
+
- **Issues:** [GitHub Issues](https://github.com/Guffawaffle/LexRunner/issues)
|
|
1210
|
+
- **Discussions:** [GitHub Discussions](https://github.com/Guffawaffle/LexRunner/discussions)
|
|
1211
|
+
- **Epic:** [#75 - Diffgraph Planner & Dependency Auto-Discovery](https://github.com/Guffawaffle/LexRunner/issues/75)
|