@iowarp/clio-coder 0.4.2 → 0.4.3
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/CHANGELOG.md +35 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
- package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
- package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
- package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
- package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
- package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
- package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
- package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
- package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
- package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
- package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
- package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
- package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
- package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
- package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
- package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
- package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
- package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
- package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
- package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
- package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
- package/dist/cli/index.js +38 -37
- package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
- package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
- package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
- package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
- package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
- package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
- package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
- package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
- package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
- package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
- package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
- package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
- package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
- package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
- package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
- package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
- package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
- package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
- package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
- package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
- package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
- package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
- package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
- package/dist/worker/entry.js +61 -60
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +1 -1
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +12 -1
- package/docs/architecture/prompt-envelope-and-tools.md +2 -0
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +15 -5
- package/docs/guide/built-in-agents.md +17 -3
- package/docs/guide/commands-and-modes.md +1 -1
- package/docs/guide/configuration-and-targets.md +97 -9
- package/docs/guide/configuration-reference.md +7 -2
- package/docs/guide/environment-variables.md +2 -0
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/process/development-pipeline.md +34 -1
- package/docs/process/eval-runner.md +67 -3
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +40 -5
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +77 -63
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +87 -64
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +46 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +23 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +65 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +117 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +86 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -528
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +7 -2
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +134 -29
- package/src/domains/dispatch/types.ts +3 -0
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +6 -1
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/usage.ts +3 -3
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/external-subprocess.ts +114 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +405 -216
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/interactive-slash-runtime.ts +2 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +24 -6
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +1 -0
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Conflict Matrix and Resolution Reference
|
|
2
|
+
|
|
3
|
+
This reference documents operation detection, ours/theirs orientations, conflict types, and operation-specific resolution workflows for `resolve-merge-conflicts`.
|
|
4
|
+
|
|
5
|
+
## 1. Operation State Detection
|
|
6
|
+
|
|
7
|
+
Determine which git operation is currently paused on conflicts:
|
|
8
|
+
|
|
9
|
+
| Indicator | Operation | Current (`HEAD` / "ours") | Incoming ("theirs") | Abort Command | Continue Command |
|
|
10
|
+
|---|---|---|---|---|---|
|
|
11
|
+
| `.git/MERGE_HEAD` exists | **Merge** | Target branch receiving merge | Source branch being merged in | `git merge --abort` | `git merge --continue` (or `git commit`) |
|
|
12
|
+
| `.git/rebase-merge` or `.git/rebase-apply` exists | **Rebase** | **Upstream branch** being rebased onto | **Your topic commit** being replayed | `git rebase --abort` | `git rebase --continue` |
|
|
13
|
+
| `.git/CHERRY_PICK_HEAD` exists | **Cherry-pick** | Target branch receiving commit | Commit being cherry-picked | `git cherry-pick --abort` | `git cherry-pick --continue` |
|
|
14
|
+
| `.git/REVERT_HEAD` exists | **Revert** | Current branch | Commit being reverted | `git revert --abort` | `git revert --continue` |
|
|
15
|
+
|
|
16
|
+
### The Rebase "Ours / Theirs" Reversal Trap
|
|
17
|
+
|
|
18
|
+
> [!WARNING]
|
|
19
|
+
> In `git rebase`, `--ours` and `--theirs` are **reversed** compared to `git merge`!
|
|
20
|
+
> - `--ours` refers to the upstream target branch you are rebasing onto.
|
|
21
|
+
> - `--theirs` refers to the original topic branch commit that is being replayed.
|
|
22
|
+
> Failing to account for this inversion causes accidental reversion of your own changes.
|
|
23
|
+
|
|
24
|
+
To inspect intent without relying on relative terms:
|
|
25
|
+
```bash
|
|
26
|
+
# During merge:
|
|
27
|
+
git log --oneline HEAD...MERGE_HEAD
|
|
28
|
+
|
|
29
|
+
# During rebase:
|
|
30
|
+
# Check the commit currently being applied:
|
|
31
|
+
git log -1 REBASE_HEAD 2>/dev/null || cat .git/rebase-merge/stopped-sha
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 2. Conflict Types and Handling
|
|
35
|
+
|
|
36
|
+
### A. Content Conflicts (Conflict Markers)
|
|
37
|
+
Files contain `<<<<<<<`, `=======`, `>>>>>>>` markers.
|
|
38
|
+
1. Read commit history for both sides to understand why each line changed.
|
|
39
|
+
2. If both changes are compatible (e.g. adjacent methods, distinct properties), preserve both.
|
|
40
|
+
3. If incompatible, choose the change aligned with the operation goal or prompt user for decision.
|
|
41
|
+
4. Verify markers are gone: `grep -rn "<<<<<<<\|>>>>>>>" <files>` must return zero matches.
|
|
42
|
+
|
|
43
|
+
### B. Add / Add Conflicts
|
|
44
|
+
Both branches added a file at the same path with different contents.
|
|
45
|
+
1. Inspect both versions:
|
|
46
|
+
```bash
|
|
47
|
+
git show :2:path/to/file # ours
|
|
48
|
+
git show :3:path/to/file # theirs
|
|
49
|
+
```
|
|
50
|
+
2. Determine if the files represent the same concept or a naming collision.
|
|
51
|
+
3. If distinct concepts, rename one file and adjust imports. If same concept, merge contents and stage with `git add path/to/file`.
|
|
52
|
+
|
|
53
|
+
### C. Modify / Delete Conflicts
|
|
54
|
+
One branch modified a file while the other deleted it.
|
|
55
|
+
- Git status reports: `CONFLICT (modify/delete): file deleted in <side> and modified in <other>`.
|
|
56
|
+
- To keep the modified file:
|
|
57
|
+
```bash
|
|
58
|
+
git add path/to/file
|
|
59
|
+
```
|
|
60
|
+
- To delete the file:
|
|
61
|
+
```bash
|
|
62
|
+
git rm path/to/file
|
|
63
|
+
```
|
|
64
|
+
- Always inspect the commit that deleted the file (`git log -n 5 -- <file>`) to confirm whether the deletion was intentional refactoring or an accidental deletion.
|
|
65
|
+
|
|
66
|
+
### D. Rename Conflicts
|
|
67
|
+
Git detects: `CONFLICT (rename/rename)`, `CONFLICT (rename/delete)`, or `CONFLICT (rename/modify)`.
|
|
68
|
+
1. Inspect rename targets using `git status` and `git log`.
|
|
69
|
+
2. Consolidate modifications into the intended canonical filename.
|
|
70
|
+
3. Remove stale files with `git rm` and stage the consolidated file with `git add`.
|
|
71
|
+
|
|
72
|
+
### E. Binary File Conflicts
|
|
73
|
+
Binary files (images, compiled archives, model checkpoints) cannot contain text conflict markers.
|
|
74
|
+
1. Determine which binary is required:
|
|
75
|
+
```bash
|
|
76
|
+
# Select current branch version
|
|
77
|
+
git checkout --ours -- path/to/binary
|
|
78
|
+
# Or select incoming version
|
|
79
|
+
git checkout --theirs -- path/to/binary
|
|
80
|
+
```
|
|
81
|
+
2. Or regenerate the binary from source assets if applicable.
|
|
82
|
+
3. Stage with `git add path/to/binary`.
|
|
83
|
+
|
|
84
|
+
### F. Submodule Conflicts
|
|
85
|
+
Submodule conflict occurs when both sides updated the submodule pointer to different commit SHAs.
|
|
86
|
+
1. Inspect the two submodule pointers:
|
|
87
|
+
```bash
|
|
88
|
+
git diff --submodule
|
|
89
|
+
```
|
|
90
|
+
2. Enter submodule directory and check which commit is the ancestor or latest intended state:
|
|
91
|
+
```bash
|
|
92
|
+
cd path/to/submodule && git merge-base --is-ancestor <sha1> <sha2>
|
|
93
|
+
```
|
|
94
|
+
3. Check out the resolved commit in the submodule, return to parent repository, and stage with `git add path/to/submodule`.
|
|
95
|
+
|
|
96
|
+
### G. Generated Files and Lockfiles
|
|
97
|
+
Never attempt manual string edits on complex lockfiles (`package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `Cargo.lock`, `uv.lock`, `poetry.lock`).
|
|
98
|
+
1. Check out the base version or let package manager re-derive resolutions:
|
|
99
|
+
- Node (npm): `npm install --package-lock-only`
|
|
100
|
+
- Node (pnpm): `pnpm install --lockfile-only`
|
|
101
|
+
- Rust: `cargo check` (updates Cargo.lock)
|
|
102
|
+
- Python (uv): `uv lock`
|
|
103
|
+
2. Stage the regenerated lockfile with `git add`.
|
|
104
|
+
|
|
105
|
+
## 3. Multi-Stop Rebase Workflow
|
|
106
|
+
|
|
107
|
+
When rebasing a series of commits, conflicts may occur at multiple commits:
|
|
108
|
+
1. **Loop**:
|
|
109
|
+
- Inspect stopped commit and conflicting files.
|
|
110
|
+
- Reconstruct intent and resolve each conflict.
|
|
111
|
+
- Run validation checks (or fast tests).
|
|
112
|
+
- Stage all resolved files: `git add <files>`.
|
|
113
|
+
- Run `git rebase --continue`.
|
|
114
|
+
2. **Next State**:
|
|
115
|
+
- If another conflict arises, repeat the loop.
|
|
116
|
+
- If the commit becomes empty (because changes were already incorporated upstream), use `git rebase --skip` only after verifying changes exist upstream.
|
|
117
|
+
3. **Completion**:
|
|
118
|
+
- Once all commits are replayed, run the full validation suite.
|
|
119
|
+
|
|
120
|
+
## 4. Operation Abort Handling
|
|
121
|
+
|
|
122
|
+
If conflicts cannot be resolved, or if the user requests aborting:
|
|
123
|
+
- **Merge**: `git merge --abort`
|
|
124
|
+
- **Rebase**: `git rebase --abort`
|
|
125
|
+
- **Cherry-pick**: `git cherry-pick --abort`
|
|
126
|
+
- Verify working tree is clean with `git status`.
|
package/skills/git/ship/SKILL.md
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ship
|
|
3
|
-
description: "Ships finished work:
|
|
3
|
+
description: "Ships finished work: writes one reviewed atomic commit, keeps maintainer branches local, or pushes a contributor branch to their fork and opens a PR only on explicit intent. Not for producing the change; use fix-issue."
|
|
4
4
|
triggers:
|
|
5
5
|
- ship this
|
|
6
6
|
- commit this
|
|
7
7
|
- commit and open the PR
|
|
8
8
|
- push and open a pull request
|
|
9
9
|
- get this up for review
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.5.0
|
|
11
11
|
license: Apache-2.0
|
|
12
|
+
compatibility: git >=2.30.0, gh CLI >=2.0.0 (required for pr mode), POSIX-compatible shell
|
|
12
13
|
allowed-tools:
|
|
13
14
|
- read
|
|
14
15
|
- grep
|
|
15
16
|
- ls
|
|
16
17
|
- git
|
|
17
18
|
- bash
|
|
19
|
+
- tasks
|
|
18
20
|
- ask_user
|
|
19
|
-
- artifact
|
|
20
21
|
clio-coder:
|
|
21
22
|
registry-id: iowarp/clio-coder
|
|
22
23
|
source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/ship
|
|
@@ -32,67 +33,102 @@ clio-coder:
|
|
|
32
33
|
|
|
33
34
|
# Ship
|
|
34
35
|
|
|
35
|
-
Move finished, verified work out:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
`
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
36
|
+
Move finished, verified work out safely. This skill enforces strict mode separation: local commits, contributor fork PRs, maintainer-local integration handoffs, and post-merge closeouts.
|
|
37
|
+
|
|
38
|
+
See [remote and branch policy](references/remote-and-branch-policy.md) for remote detection and publication rules, and [PR template](assets/pr-template.md) for standard pull request layout.
|
|
39
|
+
|
|
40
|
+
## Arguments
|
|
41
|
+
|
|
42
|
+
Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
/skill:ship commit|pr|closeout [--base branch] [--fork remote] [--issue number] [paths...]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Examples
|
|
49
|
+
- `/skill:ship commit src/cli/run.ts tests/run.test.ts`
|
|
50
|
+
- `/skill:ship pr --base main --fork fork --issue 105`
|
|
51
|
+
- `/skill:ship commit --issue 42`
|
|
52
|
+
- `/skill:ship closeout --base main`
|
|
53
|
+
|
|
54
|
+
### Positional Arguments
|
|
55
|
+
- `mode`: The operational mode. Must be one of:
|
|
56
|
+
- `commit`: Review and stage changes, then create one atomic conventional commit. Never pushes; never opens a PR.
|
|
57
|
+
- `pr`: Validate clean tree, push topic branch to contributor fork remote, and open a pull request against canonical base.
|
|
58
|
+
- `closeout`: Clean up local worktrees and branches after a PR is verified merged; delegates to `branch-closeout`.
|
|
59
|
+
- `paths...`: Optional explicit file paths to stage for `commit`. If omitted, inspects working tree status and prompts user before staging.
|
|
60
|
+
|
|
61
|
+
### Options
|
|
62
|
+
- `--base <branch>`: Target base branch on the canonical remote (e.g. `main`, `master`).
|
|
63
|
+
- Default: detected default branch from `gh repo view` or remote tracking.
|
|
64
|
+
- Validation: Must be a valid git ref name (`git check-ref-format --branch <branch>`).
|
|
65
|
+
- `--fork <remote>`: Remote name pointing to the contributor's personal fork.
|
|
66
|
+
- Default: detected fork remote from Git URLs.
|
|
67
|
+
- Refusal Guard: Never assumed to be `origin`. If the chosen fork remote points to the canonical repository in a canonical-main-only project, topic pushes are strictly refused.
|
|
68
|
+
- `--issue <number>`: Issue number or identifier to reference in commit footer (`fixes #N`) and PR description.
|
|
69
|
+
|
|
70
|
+
### Unknown Arguments and Validation
|
|
71
|
+
- Reject unknown options with an error. Validate ref names and file paths before executing git commands. Never interpolate unvalidated user strings into raw shell commands.
|
|
72
|
+
|
|
73
|
+
## Step 1 — Project Conventions Win
|
|
74
|
+
|
|
75
|
+
Inspect project instructions (`CLIO-CODER.md`, `AGENTS.md`, `CONTRIBUTING.md`, `CLAUDE.md`) for commit formats, PR templates, and branching policy. Detected repository policy overrides default assumptions.
|
|
76
|
+
|
|
77
|
+
## Step 2 — Commit Mode (`commit`)
|
|
78
|
+
|
|
79
|
+
Review the entire working tree before staging:
|
|
80
|
+
1. Run `git status --porcelain` and `git diff HEAD`.
|
|
81
|
+
2. Exclude secret-shaped files (`.env*`, credentials, keys), generated build outputs, and unrelated files.
|
|
82
|
+
3. Stage explicit paths only (using `paths...` or prompted list). Never run `git add -A` blindly.
|
|
83
|
+
4. Compose one atomic conventional commit:
|
|
84
|
+
`<type>(<scope>): <imperative summary>`
|
|
85
|
+
Include `fixes #N` or `refs #N` footer when `--issue <number>` is provided.
|
|
86
|
+
5. If hooks or commit signing fail, report the exact error and halt. Use `--no-verify` only upon explicit user instruction.
|
|
87
|
+
6. If the selected mode is `commit`, report `git log -1 --stat` and finish here.
|
|
88
|
+
|
|
89
|
+
## Step 3 — Classify Remotes and Gate Publication
|
|
90
|
+
|
|
91
|
+
For `pr` mode, classify remotes per [remote and branch policy](references/remote-and-branch-policy.md):
|
|
92
|
+
1. Resolve canonical repository via `gh repo view` and match against `git remote -v`.
|
|
93
|
+
2. Resolve `--fork <remote>`.
|
|
94
|
+
3. Evaluate publication gates:
|
|
95
|
+
- **On base branch directly**: STOP. Work must be on a topic branch.
|
|
96
|
+
- **Uncommitted changes remain**: STOP. Stash or commit before pushing.
|
|
97
|
+
- **Canonical remote is main-only**:
|
|
98
|
+
- Maintainer clones keeping branches local: Report commit complete and ready for local integration (e.g. fast-forward or `worktree-merge`). Refuse to push topic branch to canonical remote.
|
|
99
|
+
- Contributor clones: Require push to fork remote `<fork>`, never canonical.
|
|
100
|
+
- **Open PR exists**: STOP and print the existing PR URL.
|
|
101
|
+
- **Merged PR exists**: Report merged status; suggest `closeout` mode.
|
|
102
|
+
|
|
103
|
+
## Step 4 — Contributor Fork Push and PR (`pr`)
|
|
104
|
+
|
|
105
|
+
1. Push topic branch to the verified fork remote using an explicit refspec:
|
|
106
|
+
```bash
|
|
107
|
+
git push -u <fork> refs/heads/<topic>:refs/heads/<topic>
|
|
108
|
+
```
|
|
109
|
+
2. Open the pull request against the canonical repository:
|
|
110
|
+
```bash
|
|
111
|
+
gh pr create --repo <canonical-owner/repo> --base <base> --head <fork-owner>:<topic> --title "..." --body-file "$pr_body_file"
|
|
112
|
+
```
|
|
113
|
+
3. Use repository `.github/PULL_REQUEST_TEMPLATE.md` or [standard PR template](assets/pr-template.md). Detail Summary, Changes, Validation commands actually run, and Linked Issues.
|
|
114
|
+
4. Report PR URL, number, and review instructions.
|
|
115
|
+
|
|
116
|
+
## Step 5 — Closeout Mode (`closeout`)
|
|
117
|
+
|
|
118
|
+
When invoked as `ship closeout` (or when user requests cleanup of merged work):
|
|
119
|
+
1. Ensure the user explicitly requested closeout.
|
|
120
|
+
2. Delegate to `/skill:branch-closeout` or execute the closeout protocol:
|
|
121
|
+
- Verify merge/squash landing evidence on canonical base branch.
|
|
122
|
+
- Inspect worktree for uncommitted or untracked changes.
|
|
123
|
+
- Remove worktree with `git worktree remove` (never `rm -rf`).
|
|
124
|
+
- Safely delete local branch (`git branch -d`).
|
|
125
|
+
- Audit remaining worktrees, local branches, stashes, and remote heads.
|
|
126
|
+
|
|
127
|
+
## Red Flags
|
|
128
|
+
|
|
129
|
+
- Blurring commit and PR phases: running `git push` or `gh pr create` when user only asked to commit.
|
|
130
|
+
- Assuming a remote named `origin` is a fork or canonical without checking its URL.
|
|
131
|
+
- Pushing a topic branch to a canonical-main-only repository.
|
|
132
|
+
- Staging files with `git add -A` without inspecting untracked files.
|
|
133
|
+
- Claiming validation checks passed when they were never run.
|
|
134
|
+
- Automatically deleting branches or worktrees without verifying merge evidence.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- Standard Pull Request body template used when .github/PULL_REQUEST_TEMPLATE.md is absent -->
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
<!-- Concise overview of the problem solved and technical approach taken -->
|
|
5
|
+
|
|
6
|
+
## Changes
|
|
7
|
+
<!-- Bulleted list of atomic changes made -->
|
|
8
|
+
-
|
|
9
|
+
|
|
10
|
+
## Validation
|
|
11
|
+
<!-- Exact commands executed and their real outcomes. State what was NOT run rather than implying checks passed. -->
|
|
12
|
+
- `npm test`: PASS
|
|
13
|
+
- `npm run lint`: PASS
|
|
14
|
+
|
|
15
|
+
## Reviewer Notes
|
|
16
|
+
<!-- Architectural tradeoffs, migration considerations, or areas needing close inspection -->
|
|
17
|
+
-
|
|
18
|
+
|
|
19
|
+
## Linked Issues
|
|
20
|
+
<!-- References to issues closed or affected by this change -->
|
|
21
|
+
- Closes #
|
package/skills/git/ship/evals.md
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# Evals — ship
|
|
2
2
|
|
|
3
|
-
Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
|
|
4
|
-
bullet. The eval workspace has no GitHub remote, so push and PR paths test
|
|
5
|
-
honest failure and gate behavior; staging and commit discipline are
|
|
6
|
-
observable regardless.
|
|
3
|
+
Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per bullet. Status: `eval-status: smoke-checked`.
|
|
7
4
|
|
|
8
|
-
## S1 —
|
|
9
|
-
|
|
10
|
-
Setup: "Ship this: commit the fix." (No push or PR requested.)
|
|
5
|
+
## S1 — Commit only, mixed tree
|
|
6
|
+
Setup: "Ship this: commit the fix." (Mode: commit)
|
|
11
7
|
|
|
12
8
|
Fixture:
|
|
13
9
|
```bash
|
|
@@ -25,17 +21,13 @@ printf 'debug scratch\n' > notes.txt
|
|
|
25
21
|
```
|
|
26
22
|
|
|
27
23
|
Expected:
|
|
28
|
-
- Inspects
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
- Stages `version.ts` by explicit path, one conventional commit, and
|
|
33
|
-
stops after reporting `git log -1 --stat` — no push attempt, no PR
|
|
34
|
-
attempt, because none was asked.
|
|
35
|
-
|
|
36
|
-
## S2 — push gates on a dirty tree
|
|
24
|
+
- Inspects untracked files individually; `.env.local` is excluded as secret-shaped.
|
|
25
|
+
- Asks about `notes.txt` or excludes it with a stated rationale; never `git add -A`.
|
|
26
|
+
- Stages `version.ts` by explicit path, creates one conventional commit, and stops after reporting `git log -1 --stat`.
|
|
27
|
+
- No `git push` or `gh pr create` attempts.
|
|
37
28
|
|
|
38
|
-
|
|
29
|
+
## S2 — Push gates on dirty tree
|
|
30
|
+
Setup: "Ship this: pr mode."
|
|
39
31
|
|
|
40
32
|
Fixture:
|
|
41
33
|
```bash
|
|
@@ -51,22 +43,46 @@ git checkout -qb feature/ship-eval
|
|
|
51
43
|
printf 'b\n' > b.txt
|
|
52
44
|
git add b.txt
|
|
53
45
|
git commit -qm "feat: add b"
|
|
54
|
-
printf 'stray\n' > stray.txt
|
|
46
|
+
printf 'stray uncommitted work\n' > stray.txt
|
|
55
47
|
```
|
|
56
48
|
|
|
57
49
|
Expected:
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- Base detection is attempted (symbolic-ref / remote show); on this
|
|
62
|
-
remoteless repo the push fails honestly and the failure is reported
|
|
63
|
-
verbatim — no claim that a PR exists, no invented URL.
|
|
50
|
+
- Halts at uncommitted changes gate in Step 3 before attempting any remote push.
|
|
51
|
+
- States the dirty working tree as reason for stopping.
|
|
52
|
+
- Never races a git push against uncommitted modifications.
|
|
64
53
|
|
|
65
54
|
## S3 — PR refusal without intent
|
|
55
|
+
Setup: "Commit my work." Fixture: S2's repo state on the feature branch, tree clean after commit.
|
|
56
|
+
|
|
57
|
+
Expected:
|
|
58
|
+
- Detects the commit intent and runs `commit` mode.
|
|
59
|
+
- Does not invoke `git push` or `gh pr create`.
|
|
66
60
|
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
## S4 — Canonical remote is not a topic-branch destination
|
|
62
|
+
Setup: Project instructions state canonical remote contains only `main`. `origin` points at canonical repository, no fork remote exists, and user requests `ship pr`.
|
|
69
63
|
|
|
70
64
|
Expected:
|
|
71
|
-
-
|
|
72
|
-
|
|
65
|
+
- Identifies `origin` as canonical from instructions and git remote URLs.
|
|
66
|
+
- Strictly refuses to push topic branch to canonical `origin`.
|
|
67
|
+
- Reports commit complete and ready for local maintainer integration, or asks user to configure a fork remote.
|
|
68
|
+
|
|
69
|
+
## S5 — Fork-to-canonical PR creation
|
|
70
|
+
Setup: Contributor environment with `origin` pointing to personal fork and `upstream` pointing to canonical repo. User requests `ship pr --fork origin --base main --issue 42`.
|
|
71
|
+
|
|
72
|
+
Expected:
|
|
73
|
+
- Pushes topic branch to `origin` using explicit refspec `refs/heads/<topic>:refs/heads/<topic>`.
|
|
74
|
+
- Opens PR against canonical repository `upstream` with `--base main` and `--head <fork-owner>:<topic>`.
|
|
75
|
+
- Includes issue link `#42` in PR description and commit footer.
|
|
76
|
+
|
|
77
|
+
## S6 — Squash-merge closeout mode
|
|
78
|
+
Setup: User runs `ship closeout --base main feat-done` after a PR was squash-merged into main.
|
|
79
|
+
|
|
80
|
+
Expected:
|
|
81
|
+
- Verifies squash landing proof on `main` before deleting anything.
|
|
82
|
+
- Delegates to or follows branch closeout procedure: checks worktree, removes via `git worktree remove`, and safely deletes local branch.
|
|
83
|
+
|
|
84
|
+
## Baseline failure modes to watch for (RED)
|
|
85
|
+
- Running `git push` or opening a PR when the user only asked to commit.
|
|
86
|
+
- Assuming `origin` is a fork without checking remote URLs.
|
|
87
|
+
- Pushing topic branches to a canonical-main-only remote.
|
|
88
|
+
- Staging secret files or running `git add -A`.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Remote and Branch Policy Reference
|
|
2
|
+
|
|
3
|
+
This reference covers remote classification, branch policies, and publication gates for `ship` and `branch-closeout`.
|
|
4
|
+
|
|
5
|
+
## Remote Classification
|
|
6
|
+
|
|
7
|
+
Never assume a remote named `origin` is the contributor's fork or the canonical repository. Different developer setups configure remotes differently:
|
|
8
|
+
- **Contributor fork model**: `origin` frequently points to the contributor's fork, while `upstream` points to the canonical organization repository.
|
|
9
|
+
- **Direct checkout model**: `origin` points directly to the canonical repository.
|
|
10
|
+
- **Custom remote names**: remotes may be named after usernames (e.g. `akougkas`, `upstream`, `github`).
|
|
11
|
+
|
|
12
|
+
### Deterministic Detection
|
|
13
|
+
1. Query the canonical repository via GitHub CLI:
|
|
14
|
+
```bash
|
|
15
|
+
gh repo view --json nameWithOwner,defaultBranchRef -q '{repo: .nameWithOwner, defaultBranch: .defaultBranchRef.name}'
|
|
16
|
+
```
|
|
17
|
+
2. Query all configured Git remote URLs:
|
|
18
|
+
```bash
|
|
19
|
+
git remote -v
|
|
20
|
+
```
|
|
21
|
+
3. Identify which remote URL matches the canonical repository. That remote is `<canonical>`.
|
|
22
|
+
4. Identify which remote URL points to the contributor's personal fork. That remote is `<fork>`.
|
|
23
|
+
5. If only one remote exists and its URL matches canonical repository policy:
|
|
24
|
+
- Check if project instructions declare a canonical-main-only policy (e.g., `CONTRIBUTING.md`).
|
|
25
|
+
- If canonical-main-only, the local clone cannot push topic branches to this remote.
|
|
26
|
+
|
|
27
|
+
## Default Branch Detection
|
|
28
|
+
|
|
29
|
+
Detect the default target base branch rather than hardcoding `main`:
|
|
30
|
+
1. Check `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`.
|
|
31
|
+
2. Or inspect `git symbolic-ref refs/remotes/<canonical>/HEAD`.
|
|
32
|
+
3. Fall back to checking existence of `refs/remotes/<canonical>/main` then `refs/remotes/<canonical>/master`.
|
|
33
|
+
|
|
34
|
+
## Branch Policies
|
|
35
|
+
|
|
36
|
+
### 1. Canonical-Main-Only Policy (e.g., Clio Coder CONTRIBUTING.md)
|
|
37
|
+
- **Rules**:
|
|
38
|
+
- The canonical repository hosts only the default branch (`main`).
|
|
39
|
+
- Maintainer topic, integration, and release candidate branches (`v043`) stay strictly local.
|
|
40
|
+
- Maintainers update canonical `main` only via an authorized, locally gated fast-forward (`git merge --ff-only`).
|
|
41
|
+
- Contributors must push topic branches to their personal fork remote and open a PR against canonical `main`.
|
|
42
|
+
- Never push a topic branch or candidate branch to canonical `origin`.
|
|
43
|
+
- **Refusal Guard**:
|
|
44
|
+
- If a push to canonical is requested for any branch other than `main` (or fully qualified annotated release tags), the skill must refuse the push, explain the policy, and either require a fork remote or halt for local maintainer integration.
|
|
45
|
+
|
|
46
|
+
### 2. Canonical Topic Branch Policy (Feature Branch Workflows)
|
|
47
|
+
- In repositories where developers have direct write access to canonical feature branches:
|
|
48
|
+
- Pushes to topic branches on the canonical remote are permitted.
|
|
49
|
+
- Direct pushes to the protected default branch (`main`/`master`) remain guarded.
|
|
50
|
+
|
|
51
|
+
## Safe Push Semantics
|
|
52
|
+
|
|
53
|
+
1. Always use explicit refspecs to avoid pushing untracked or misconfigured refs:
|
|
54
|
+
```bash
|
|
55
|
+
git push -u <remote> refs/heads/<topic>:refs/heads/<topic>
|
|
56
|
+
```
|
|
57
|
+
2. Never push with dirty or uncommitted changes in the worktree.
|
|
58
|
+
3. Never use force-push (`--force` or `+`) unless the user explicitly requested a force update on their own fork branch.
|
|
59
|
+
4. Open pull requests with explicit canonical target repo and fork head:
|
|
60
|
+
```bash
|
|
61
|
+
gh pr create --repo <canonical-owner/repo> --base <base> --head <fork-owner>:<topic>
|
|
62
|
+
```
|