@cleocode/cleo 2026.10.3 → 2026.10.4
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/bin/cleo.js +11 -1
- package/dist/cli/adapter-LVXHFBC4.js +158 -0
- package/dist/cli/add-WUAV7LDT.js +443 -0
- package/dist/cli/add-batch-U2DLKAQC.js +163 -0
- package/dist/cli/admin-I7BQYVZD.js +340 -0
- package/dist/cli/adr-K2THMQBS.js +171 -0
- package/dist/cli/agent-WQ6XY2DW.js +2366 -0
- package/dist/cli/agent-outputs-BJIYLVTU.js +84 -0
- package/dist/cli/analyze-PGQZWGOC.js +48 -0
- package/dist/cli/archive-5LZPF7C3.js +64 -0
- package/dist/cli/archive-stats-U6CYC6JM.js +100 -0
- package/dist/cli/attention-SOURWCNI.js +167 -0
- package/dist/cli/audit-FO2Y4LH2.js +122 -0
- package/dist/cli/auth-ED7TAIXI.js +491 -0
- package/dist/cli/backfill-32TRAYRD.js +156 -0
- package/dist/cli/backup-LEJMZJKL.js +587 -0
- package/dist/cli/backup-inspect-6HPLUEI2.js +26 -0
- package/dist/cli/backup-recover-2BTYBZU2.js +29 -0
- package/dist/cli/blockers-5JULUJTV.js +54 -0
- package/dist/cli/brain-273N3FW4.js +400 -0
- package/dist/cli/briefing-7H6OLECX.js +212 -0
- package/dist/cli/caamp-MFQVN6VU.js +181 -0
- package/dist/cli/cancel-SCMJTXZB.js +84 -0
- package/dist/cli/canon-NPF5RODM.js +142 -0
- package/dist/cli/canon-docs-2GTOLF7Y.js +26 -0
- package/dist/cli/cant-46XCUP4P.js +239 -0
- package/dist/cli/changeset-32NMBGG2.js +248 -0
- package/dist/cli/check-RWJLBCI2.js +907 -0
- package/dist/cli/checkpoint-37HMMKD7.js +128 -0
- package/dist/cli/chunk-2JIJD2I7.js +108 -0
- package/dist/cli/chunk-37NU2XDP.js +171 -0
- package/dist/cli/chunk-3IOQVUO7.js +17308 -0
- package/dist/cli/chunk-3PGH67MT.js +175 -0
- package/dist/cli/chunk-3ZO3M37V.js +1002 -0
- package/dist/cli/chunk-47JYZAMS.js +30 -0
- package/dist/cli/chunk-5J2VH3BC.js +66 -0
- package/dist/cli/chunk-5ZFFUFH7.js +92 -0
- package/dist/cli/chunk-6JSJNYH2.js +114 -0
- package/dist/cli/chunk-7INMKEAD.js +85 -0
- package/dist/cli/chunk-A2IUEIM5.js +278 -0
- package/dist/cli/chunk-AWCQH2W5.js +35 -0
- package/dist/cli/chunk-AYA6F4ZT.js +56 -0
- package/dist/cli/chunk-BCEXRFA2.js +76 -0
- package/dist/cli/chunk-BPEVD37G.js +124 -0
- package/dist/cli/chunk-C3B7C43W.js +16 -0
- package/dist/cli/chunk-DVTPIZJM.js +72 -0
- package/dist/cli/chunk-DYABOIHB.js +96 -0
- package/dist/cli/chunk-EBRZ76HS.js +51 -0
- package/dist/cli/chunk-EGOTK2HA.js +57 -0
- package/dist/cli/chunk-EOPQFCSR.js +148 -0
- package/dist/cli/chunk-FORFDPP5.js +288 -0
- package/dist/cli/chunk-GFGLLDXX.js +110 -0
- package/dist/cli/chunk-GH37QXW5.js +280 -0
- package/dist/cli/chunk-GZFVDR44.js +320 -0
- package/dist/cli/chunk-I3CRQQAD.js +225 -0
- package/dist/cli/chunk-J3ZFM3UQ.js +754 -0
- package/dist/cli/chunk-JNZJPIPJ.js +90 -0
- package/dist/cli/chunk-KHB52JNB.js +209 -0
- package/dist/cli/chunk-KJDWWQFY.js +46 -0
- package/dist/cli/chunk-LKNUA3SB.js +83 -0
- package/dist/cli/chunk-LVGIFMCV.js +163 -0
- package/dist/cli/chunk-LWQBJQSE.js +67 -0
- package/dist/cli/chunk-MNJRLSEQ.js +107 -0
- package/dist/cli/chunk-NRKWJLMS.js +91 -0
- package/dist/cli/chunk-NSHV2JNM.js +48 -0
- package/dist/cli/chunk-NWTATTEQ.js +210 -0
- package/dist/cli/chunk-OAPN46TC.js +89 -0
- package/dist/cli/chunk-OGV57L4J.js +59 -0
- package/dist/cli/chunk-OILHT47L.js +252 -0
- package/dist/cli/chunk-OPTEQKBB.js +258 -0
- package/dist/cli/chunk-PKKZPOOP.js +352 -0
- package/dist/cli/chunk-QA6T2LQ5.js +71 -0
- package/dist/cli/chunk-QFFQSKRC.js +4497 -0
- package/dist/cli/chunk-QPUY2HQZ.js +74 -0
- package/dist/cli/chunk-REUTEW3O.js +258 -0
- package/dist/cli/chunk-S24YI723.js +88 -0
- package/dist/cli/chunk-SXXOC6KZ.js +209 -0
- package/dist/cli/chunk-ULN4OKQQ.js +259 -0
- package/dist/cli/chunk-V5GBGOGM.js +46 -0
- package/dist/cli/chunk-VLEYOOPH.js +31 -0
- package/dist/cli/chunk-W33Q3FBH.js +66 -0
- package/dist/cli/chunk-W3JLYKKY.js +140 -0
- package/dist/cli/chunk-XRAX6XFP.js +48 -0
- package/dist/cli/chunk-YGKEECTI.js +78 -0
- package/dist/cli/chunk-YUZJI67I.js +108 -0
- package/dist/cli/chunk-YY66LFZF.js +29 -0
- package/dist/cli/chunk-ZBISIPCK.js +78 -0
- package/dist/cli/chunk-ZZTHTMQP.js +77 -0
- package/dist/cli/claim-KPENYHIQ.js +96 -0
- package/dist/cli/classify-DRVMCFQU.js +117 -0
- package/dist/cli/cli-T3CR7J57.js +48 -0
- package/dist/cli/cloud-PPQ4O5TX.js +565 -0
- package/dist/cli/cockpit-RZKLGYPN.js +790 -0
- package/dist/cli/code-Z5CTMVTD.js +178 -0
- package/dist/cli/complete-UBOCOBRB.js +34 -0
- package/dist/cli/complexity-BV2AGQRZ.js +56 -0
- package/dist/cli/compliance-32PD5Y47.js +276 -0
- package/dist/cli/conduit-VDKCH33F.js +307 -0
- package/dist/cli/config-I72JAXK4.js +516 -0
- package/dist/cli/consensus-LFILLSTK.js +121 -0
- package/dist/cli/context-XUUVFVTP.js +141 -0
- package/dist/cli/contribution-37NQ4N5R.js +111 -0
- package/dist/cli/curator-TFDXU2EX.js +139 -0
- package/dist/cli/current-C4SN5BWV.js +42 -0
- package/dist/cli/daemon-DV25JQ62.js +451 -0
- package/dist/cli/dash-TFU4RLQW.js +70 -0
- package/dist/cli/decide-5VPMNTSI.js +419 -0
- package/dist/cli/decompose-KOYEZNJL.js +77 -0
- package/dist/cli/decomposition-7OHUFIQN.js +121 -0
- package/dist/cli/delete-Q7YCAFY5.js +68 -0
- package/dist/cli/deps-6UZKLDGJ.js +463 -0
- package/dist/cli/detect-FERY35UL.js +45 -0
- package/dist/cli/detect-drift-UL2JTPUK.js +408 -0
- package/dist/cli/diagnostics-TI5QAZXR.js +132 -0
- package/dist/cli/docs-QI2PRN3T.js +3095 -0
- package/dist/cli/doctor-AX5TICQO.js +1253 -0
- package/dist/cli/doctor-ac-bindings-YPMYHU2G.js +26 -0
- package/dist/cli/doctor-acceptance-drift-PYNFGMKB.js +26 -0
- package/dist/cli/doctor-credentials-UZRIADKM.js +26 -0
- package/dist/cli/doctor-db-substrate-Q2TOYM2S.js +27 -0
- package/dist/cli/doctor-dep-cycles-GCVYZY6F.js +26 -0
- package/dist/cli/doctor-exodus-RO5SUTC2.js +26 -0
- package/dist/cli/doctor-exodus-residue-EM2AWQXP.js +26 -0
- package/dist/cli/doctor-fk-check-Q3FOLECE.js +26 -0
- package/dist/cli/doctor-global-delivery-TNOAQ3NP.js +26 -0
- package/dist/cli/doctor-heavy-command-hook-IO3QAQLG.js +26 -0
- package/dist/cli/doctor-legacy-backups-O2YH5VLS.js +26 -0
- package/dist/cli/doctor-legacy-reaper-VSEJEIFA.js +26 -0
- package/dist/cli/doctor-malformed-ids-LQ766V5K.js +26 -0
- package/dist/cli/doctor-manifest-rows-6FQDNHLH.js +26 -0
- package/dist/cli/doctor-memory-guard-J4PSEKB5.js +26 -0
- package/dist/cli/doctor-migrations-ONOH56YM.js +26 -0
- package/dist/cli/doctor-nexus-residency-FUQAX7PV.js +26 -0
- package/dist/cli/doctor-project-identity-GUDK3HYX.js +26 -0
- package/dist/cli/doctor-projects-7L3BNL4O.js +30 -0
- package/dist/cli/doctor-projects-registry-TEAVHFQU.js +26 -0
- package/dist/cli/doctor-release-readiness-IEGHX6SL.js +26 -0
- package/dist/cli/doctor-repair-NBONOSZU.js +26 -0
- package/dist/cli/doctor-skill-fixtures-7Y6L34A3.js +26 -0
- package/dist/cli/doctor-split-brain-TUKIGVHF.js +26 -0
- package/dist/cli/doctor-superseded-store-BHZY2B2L.js +26 -0
- package/dist/cli/doctor-tool-locks-REQMIVYK.js +26 -0
- package/dist/cli/doctor-twin-collapse-222GOSPE.js +26 -0
- package/dist/cli/doctor-worktree-stores-J7TCRVJ3.js +26 -0
- package/dist/cli/done-V3AOO65B.js +195 -0
- package/dist/cli/dynamic-RR4HB7BB.js +29 -0
- package/dist/cli/event-EGNPGE5A.js +372 -0
- package/dist/cli/exists-H4SDCBPL.js +65 -0
- package/dist/cli/exodus-KALO3B3X.js +401 -0
- package/dist/cli/export-ROFOCG4M.js +92 -0
- package/dist/cli/export-tasks-US3WBIEQ.js +96 -0
- package/dist/cli/federation-SUIB5QWT.js +145 -0
- package/dist/cli/find-YICG4BG6.js +177 -0
- package/dist/cli/focus-TKCZPKOM.js +55 -0
- package/dist/cli/gateway-H4HFDC3E.js +77 -0
- package/dist/cli/gateway-auto-start-EDK7XI6E.js +36 -0
- package/dist/cli/gc-5R2TUY5T.js +291 -0
- package/dist/cli/go-PRQFK5YG.js +206 -0
- package/dist/cli/goal-7CZRMLHC.js +212 -0
- package/dist/cli/grade-PY2YRPUS.js +56 -0
- package/dist/cli/graph-XIXMCFKG.js +878 -0
- package/dist/cli/history-EIXADPAD.js +137 -0
- package/dist/cli/hook-UF7J7R6D.js +57 -0
- package/dist/cli/hook-entry.js +244 -19
- package/dist/cli/hygiene-3QZ2NI7P.js +55 -0
- package/dist/cli/import-R73SO444.js +88 -0
- package/dist/cli/import-tasks-O22FZJ4U.js +108 -0
- package/dist/cli/index.js +419 -94612
- package/dist/cli/init-IHEJDQWU.js +40 -0
- package/dist/cli/inject-LSRVWNCP.js +82 -0
- package/dist/cli/install-global-4AZUCH6U.js +95 -0
- package/dist/cli/intelligence-2OSFOGD2.js +181 -0
- package/dist/cli/issue-IIWEDNFC.js +158 -0
- package/dist/cli/janitor-GPMC7VOR.js +111 -0
- package/dist/cli/labels-5NPOIQXN.js +87 -0
- package/dist/cli/lifecycle-4FFS2K2T.js +272 -0
- package/dist/cli/list-47KEUGPQ.js +108 -0
- package/dist/cli/llm-G5B3I6GD.js +703 -0
- package/dist/cli/llm-cost-S7RS6BVA.js +25 -0
- package/dist/cli/llm-stream-24A45NTS.js +27 -0
- package/dist/cli/log-XF6H2XSD.js +75 -0
- package/dist/cli/login-LBPLGHYG.js +43 -0
- package/dist/cli/logout-SX4JSJIV.js +74 -0
- package/dist/cli/manifest-NMCW4PIW.js +353 -0
- package/dist/cli/map-BU72KMGF.js +52 -0
- package/dist/cli/memory-UHYIVGVM.js +1956 -0
- package/dist/cli/migrate-agents-v2-OO7OILZK.js +33 -0
- package/dist/cli/migrate-claude-mem-EDNYUY3K.js +201 -0
- package/dist/cli/next-RZFRG5X7.js +56 -0
- package/dist/cli/nexus-4S4Z5EVU.js +2923 -0
- package/dist/cli/ops-KR7AWCG3.js +51 -0
- package/dist/cli/orchestrate-HOYZY3VX.js +948 -0
- package/dist/cli/otel-U7IIRBCT.js +188 -0
- package/dist/cli/phase-NYZFHUE5.js +220 -0
- package/dist/cli/pivot-FF2CVUZL.js +87 -0
- package/dist/cli/plan-3SL2NTRV.js +48 -0
- package/dist/cli/playbook-2FCBV7N3.js +229 -0
- package/dist/cli/project-WDX2TGMC.js +330 -0
- package/dist/cli/promote-YINYFBZY.js +52 -0
- package/dist/cli/provenance-C7AYD7WG.js +128 -0
- package/dist/cli/provider-QLJEDQBR.js +212 -0
- package/dist/cli/reason-JF5BHBM5.js +137 -0
- package/dist/cli/reconcile-NMISHDGX.js +127 -0
- package/dist/cli/refresh-memory-EY5YNICV.js +45 -0
- package/dist/cli/relates-R3ZPICAY.js +259 -0
- package/dist/cli/release-4ZJTMUUT.js +524 -0
- package/dist/cli/remote-QSONJDIK.js +279 -0
- package/dist/cli/renderers-64OR3IWX.js +37 -0
- package/dist/cli/reorder-J3DOE7ST.js +86 -0
- package/dist/cli/reparent-2OUMKEZX.js +58 -0
- package/dist/cli/req-TZB7OFKO.js +129 -0
- package/dist/cli/research-MTD7EX45.js +365 -0
- package/dist/cli/restore-VEUOX7NF.js +423 -0
- package/dist/cli/revert-3YF2IL5G.js +240 -0
- package/dist/cli/roadmap-7OOQLXKG.js +61 -0
- package/dist/cli/run-2U5NZV5Z.js +211 -0
- package/dist/cli/safestop-VR4VK56D.js +88 -0
- package/dist/cli/saga-SEWPIOX2.js +285 -0
- package/dist/cli/schema-C52WZ35V.js +195 -0
- package/dist/cli/self-update-GQIGUDPS.js +504 -0
- package/dist/cli/selfimprove-3Y5L4ECT.js +88 -0
- package/dist/cli/sentient-M4YMAVGV.js +1088 -0
- package/dist/cli/sequence-6UBMA4IF.js +93 -0
- package/dist/cli/service-5R7SILZ7.js +155 -0
- package/dist/cli/session-3C6AAC4Y.js +707 -0
- package/dist/cli/setup-BTUBW5PU.js +323 -0
- package/dist/cli/show-MXT2V7TF.js +122 -0
- package/dist/cli/skill-GFUZOU2C.js +84 -0
- package/dist/cli/skills-EDWLKAF3.js +928 -0
- package/dist/cli/smoke-provider-SKUFMZXU.js +218 -0
- package/dist/cli/snapshot-GUWMURCM.js +119 -0
- package/dist/cli/src-66GAKPXR.js +80 -0
- package/dist/cli/start-QFG56RGN.js +67 -0
- package/dist/cli/stats-GW55P7RR.js +95 -0
- package/dist/cli/status-46HTKNRR.js +157 -0
- package/dist/cli/sticky-2DUZOUGI.js +338 -0
- package/dist/cli/stop-J2QEUKHX.js +42 -0
- package/dist/cli/sync-GJP2QYT5.js +154 -0
- package/dist/cli/tasks-BNXTM7PB.js +174 -0
- package/dist/cli/telemetry-55Z2XJWL.js +120 -0
- package/dist/cli/templates-7O77TKPV.js +611 -0
- package/dist/cli/testing-37YTBNKP.js +146 -0
- package/dist/cli/token-UAVJMNUI.js +220 -0
- package/dist/cli/transcript-LORQTV5Z.js +440 -0
- package/dist/cli/tui-BPUFHYKK.js +51 -0
- package/dist/cli/update-NVCYV2FT.js +476 -0
- package/dist/cli/upgrade-OXJXOGEF.js +243 -0
- package/dist/cli/verify-LYLDHPT2.js +190 -0
- package/dist/cli/web-QP2RP266.js +275 -0
- package/dist/cli/workgraph-FXBSZDQE.js +232 -0
- package/dist/cli/worktree-6RXAJIST.js +370 -0
- package/package.json +13 -13
- package/studio-dist/client/_app/immutable/chunks/{DMj27Pxj.js → Btgeq_wq.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{qq3pe1aT.js → CgBjxmu6.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{Dc2owyvE.js → DgEKqO6r.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/t81h7afa.js +1 -0
- package/studio-dist/client/_app/immutable/entry/{app.CHWXLeE9.js → app.a02HWaRB.js} +2 -2
- package/studio-dist/client/_app/immutable/entry/start.BreMSngo.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{0.DmKQGvFh.js → 0.nTXyRfc-.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{1.DqJk_REO.js → 1.4zrWeHtl.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{15.GUy6kdW1.js → 15.D9mk4JyY.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{16.CcnKZ8f9.js → 16._-wt-sQf.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{17.DAlQF3lQ.js → 17.CUu6LQDj.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{18.vQFr-vFj.js → 18.Dz4QRTkX.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{20.GVOj5j_r.js → 20.CJ2_EB0U.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{24.2-wC6DOh.js → 24.Igj2FS7k.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{25.D1vYaH8g.js → 25.BnATjVGN.js} +2 -2
- package/studio-dist/client/_app/immutable/nodes/{26.C3rNqzZF.js → 26.6iPyjT44.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{3.b-7pzc3M.js → 3.AA5GwNgP.js} +1 -1
- package/studio-dist/client/_app/version.json +1 -1
- package/studio-dist/server/chunks/{0-BaCce-O1.js → 0-DGmsoBYm.js} +3 -3
- package/studio-dist/server/chunks/1-8PfxPvlK.js +9 -0
- package/studio-dist/server/chunks/{15-DRMOSIC9.js → 15-Bg6YTndh.js} +3 -3
- package/studio-dist/server/chunks/{16-BulXhoZZ.js → 16-BObLwgyD.js} +3 -3
- package/studio-dist/server/chunks/{17-DUEOCM0H.js → 17-BNXGyAHX.js} +3 -3
- package/studio-dist/server/chunks/{18-DP7Q8zPs.js → 18-UqQFRIID.js} +3 -3
- package/studio-dist/server/chunks/{20-9ta6MI7q.js → 20-CMn8a_yP.js} +3 -3
- package/studio-dist/server/chunks/{24-DysdL1ab.js → 24-BuOTDzib.js} +3 -3
- package/studio-dist/server/chunks/{25-CYsps38R.js → 25-CIMSmjVx.js} +4 -4
- package/studio-dist/server/chunks/{26-Df4YXgg0.js → 26-DWGObn2T.js} +3 -3
- package/studio-dist/server/chunks/{3-BEhOhYpL.js → 3-CyiffdJZ.js} +3 -3
- package/studio-dist/server/chunks/{_layout.svelte-CnLcXYG-.js → _layout.svelte-DYtClaIk.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-HUqTICJR.js → _page.svelte-1h9E6s_f.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-DOl0DGOO.js → _page.svelte-BNNF62Nm.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-DzcZljiy.js → _page.svelte-BT1EUadj.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-Dv8tmDEC.js → _page.svelte-Bip079LT.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-DGhXqeRc.js → _page.svelte-CEATWp_5.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-C0qgUvzA.js → _page.svelte-CV3xiD1y.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-CbyEPj2j.js → _page.svelte-Cv_KVJDV.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-ui7LnWkL.js → _page.svelte-DSSy6LuK.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-Da4q5l93.js → _page.svelte-TF795TAS.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-CnKVmf_s.js → _server.ts-BlhRFLY3.js} +2 -2
- package/studio-dist/server/chunks/{_server.ts-Cr57EKWf.js → _server.ts-C4w6UdU0.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-P4wVVksg.js → _server.ts-CzrwbhkQ.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-2BazvYRP.js → _server.ts-DWt8Dziu.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-C0evMKCk.js → _server.ts-Db6mEile.js} +3 -3
- package/studio-dist/server/chunks/{client-CPM4LrO2.js → client-D8f2k-H_.js} +2 -2
- package/studio-dist/server/chunks/{dist-CdoCt9zT.js → dist-B8xbIrdB.js} +3 -1
- package/studio-dist/server/chunks/{error.svelte-ShcZo43D.js → error.svelte-DbbOwIme.js} +3 -3
- package/studio-dist/server/chunks/{http-BiQjEmVU.js → http-1ftNGTs5.js} +2 -2
- package/studio-dist/server/chunks/{internal-Cgsrya1j.js → internal-CTULuLPB.js} +2 -2
- package/studio-dist/server/chunks/{stores-BGrpEDMK.js → stores-CS5XOReX.js} +2 -2
- package/studio-dist/server/index.js +1 -1
- package/studio-dist/server/manifest.js +17 -17
- package/studio-dist/client/_app/immutable/chunks/Bw6J8NDM.js +0 -1
- package/studio-dist/client/_app/immutable/entry/start.C9bwPpvc.js +0 -1
- package/studio-dist/server/chunks/1-CVo7Nk6d.js +0 -9
|
@@ -0,0 +1,907 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
const _installed = Symbol.for('cleocode.cli.sqliteWarningFilter');
|
|
3
|
+
if (globalThis[_installed]) return;
|
|
4
|
+
globalThis[_installed] = true;
|
|
5
|
+
const _origEmitWarning = process.emitWarning;
|
|
6
|
+
process.emitWarning = function(warning, type, code, ctor) {
|
|
7
|
+
if (typeof warning === 'object' && warning.name === 'ExperimentalWarning' && typeof warning.message === 'string' && /SQLite is an experimental feature/i.test(warning.message)) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (typeof warning === 'string' && /SQLite is an experimental feature/i.test(warning)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
return _origEmitWarning.call(process, warning, type, code, ctor);
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
import {
|
|
17
|
+
getOperationParams,
|
|
18
|
+
paramsToCittyArgs
|
|
19
|
+
} from "./chunk-W33Q3FBH.js";
|
|
20
|
+
import {
|
|
21
|
+
negatedFlag
|
|
22
|
+
} from "./chunk-47JYZAMS.js";
|
|
23
|
+
import {
|
|
24
|
+
defineCommand,
|
|
25
|
+
showUsage
|
|
26
|
+
} from "./chunk-PKKZPOOP.js";
|
|
27
|
+
import {
|
|
28
|
+
dispatchFromCli
|
|
29
|
+
} from "./chunk-3IOQVUO7.js";
|
|
30
|
+
import "./chunk-AWCQH2W5.js";
|
|
31
|
+
import "./chunk-OGV57L4J.js";
|
|
32
|
+
import "./chunk-ZBISIPCK.js";
|
|
33
|
+
import {
|
|
34
|
+
cliError
|
|
35
|
+
} from "./chunk-3ZO3M37V.js";
|
|
36
|
+
import "./chunk-6JSJNYH2.js";
|
|
37
|
+
import "./chunk-QFFQSKRC.js";
|
|
38
|
+
|
|
39
|
+
// packages/cleo/src/cli/commands/check.ts
|
|
40
|
+
import { formatPrGateSummary, runPrGate } from "@cleocode/core/internal";
|
|
41
|
+
function emitPrGateSummary(summary) {
|
|
42
|
+
const envelope = {
|
|
43
|
+
success: summary.passed,
|
|
44
|
+
data: {
|
|
45
|
+
passed: summary.passed,
|
|
46
|
+
summary: summary.summary,
|
|
47
|
+
gates: summary.gates,
|
|
48
|
+
repoRoot: summary.repoRoot
|
|
49
|
+
},
|
|
50
|
+
meta: { operation: "check.pr", timestamp: (/* @__PURE__ */ new Date()).toISOString() }
|
|
51
|
+
};
|
|
52
|
+
process.stdout.write(`${JSON.stringify(envelope)}
|
|
53
|
+
`);
|
|
54
|
+
process.stderr.write(`${formatPrGateSummary(summary)}
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
var SUPPORTED_PROTOCOL_TYPES = [
|
|
58
|
+
"research",
|
|
59
|
+
"consensus",
|
|
60
|
+
"architecture-decision",
|
|
61
|
+
"specification",
|
|
62
|
+
"decomposition",
|
|
63
|
+
"implementation",
|
|
64
|
+
"contribution",
|
|
65
|
+
"validation",
|
|
66
|
+
"testing",
|
|
67
|
+
"release",
|
|
68
|
+
"artifact-publish",
|
|
69
|
+
"provenance"
|
|
70
|
+
];
|
|
71
|
+
var checkSchemaCommand = defineCommand({
|
|
72
|
+
meta: {
|
|
73
|
+
name: "schema",
|
|
74
|
+
description: "Validate schema (type: todo, config, archive, log, sessions)"
|
|
75
|
+
},
|
|
76
|
+
args: paramsToCittyArgs(getOperationParams("query", "check", "schema")),
|
|
77
|
+
async run({ args }) {
|
|
78
|
+
await dispatchFromCli(
|
|
79
|
+
"query",
|
|
80
|
+
"check",
|
|
81
|
+
"schema",
|
|
82
|
+
{ type: args["type"] },
|
|
83
|
+
{ command: "check" }
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
var checkCoherenceCommand = defineCommand({
|
|
88
|
+
meta: { name: "coherence", description: "Run coherence check across task data" },
|
|
89
|
+
async run() {
|
|
90
|
+
await dispatchFromCli("query", "check", "coherence", {}, { command: "check" });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
var checkTaskCommand = defineCommand({
|
|
94
|
+
meta: { name: "task", description: "Validate a specific task" },
|
|
95
|
+
args: { taskId: { type: "positional", description: "Task ID to validate", required: true } },
|
|
96
|
+
async run({ args }) {
|
|
97
|
+
await dispatchFromCli(
|
|
98
|
+
"query",
|
|
99
|
+
"check",
|
|
100
|
+
"task",
|
|
101
|
+
{ taskId: args.taskId },
|
|
102
|
+
{ command: "check" }
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
var checkOutputCommand = defineCommand({
|
|
107
|
+
meta: {
|
|
108
|
+
name: "output",
|
|
109
|
+
description: "Validate an agent output file against the manifest schema"
|
|
110
|
+
},
|
|
111
|
+
args: {
|
|
112
|
+
filePath: { type: "positional", description: "Path to agent output file", required: true },
|
|
113
|
+
"task-id": { type: "string", description: "Task ID the output file belongs to" }
|
|
114
|
+
},
|
|
115
|
+
async run({ args }) {
|
|
116
|
+
await dispatchFromCli(
|
|
117
|
+
"query",
|
|
118
|
+
"check",
|
|
119
|
+
"output",
|
|
120
|
+
{ filePath: args.filePath, taskId: args["task-id"] },
|
|
121
|
+
{ command: "check", operation: "check.output" }
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
var checkCanonDocsCommand = defineCommand({
|
|
126
|
+
meta: {
|
|
127
|
+
name: "docs",
|
|
128
|
+
description: "CI gate: block raw *.md writes that bypass the docs SSoT (T9796)"
|
|
129
|
+
},
|
|
130
|
+
args: {
|
|
131
|
+
base: {
|
|
132
|
+
type: "string",
|
|
133
|
+
description: "Git ref to diff against (default: origin/main)"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
async run({ args }) {
|
|
137
|
+
await dispatchFromCli(
|
|
138
|
+
"query",
|
|
139
|
+
"check",
|
|
140
|
+
"canon.docs",
|
|
141
|
+
{ baseRef: args.base },
|
|
142
|
+
{ command: "check", operation: "check.canon.docs" }
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
var checkCanonCommand = defineCommand({
|
|
147
|
+
meta: { name: "canon", description: "CI gate: detect canon drift between docs and live code" },
|
|
148
|
+
subCommands: {
|
|
149
|
+
docs: checkCanonDocsCommand
|
|
150
|
+
},
|
|
151
|
+
async run({ cmd, rawArgs }) {
|
|
152
|
+
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
153
|
+
if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
|
|
154
|
+
await dispatchFromCli("query", "check", "canon", {}, { command: "check" });
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
var checkProtocolCommand = defineCommand({
|
|
158
|
+
meta: {
|
|
159
|
+
name: "protocol",
|
|
160
|
+
description: `Validate any of the 12 RCASD-IVTR+C protocols: ${SUPPORTED_PROTOCOL_TYPES.join(", ")}`
|
|
161
|
+
},
|
|
162
|
+
args: {
|
|
163
|
+
protocolType: {
|
|
164
|
+
type: "positional",
|
|
165
|
+
description: "Protocol type to validate",
|
|
166
|
+
required: true
|
|
167
|
+
},
|
|
168
|
+
"task-id": { type: "string", description: "Task ID to validate (mode=task, default)" },
|
|
169
|
+
"manifest-file": { type: "string", description: "Manifest file to validate (mode=manifest)" },
|
|
170
|
+
strict: { type: "boolean", description: "Exit with error code on violations" },
|
|
171
|
+
"voting-matrix-file": { type: "string", description: "consensus: voting matrix JSON file" },
|
|
172
|
+
"epic-id": { type: "string", description: "decomposition: parent epic ID" },
|
|
173
|
+
"sibling-count": { type: "string", description: "decomposition: actual sibling count" },
|
|
174
|
+
"max-siblings": { type: "string", description: "decomposition: configured max siblings" },
|
|
175
|
+
"spec-file": { type: "string", description: "specification: path to spec markdown" },
|
|
176
|
+
"has-code-changes": {
|
|
177
|
+
type: "boolean",
|
|
178
|
+
description: "research: code changes detected (forbidden)"
|
|
179
|
+
},
|
|
180
|
+
"has-task-tags": {
|
|
181
|
+
type: "boolean",
|
|
182
|
+
description: "implementation: @task tags present in code"
|
|
183
|
+
},
|
|
184
|
+
"has-contribution-tags": {
|
|
185
|
+
type: "boolean",
|
|
186
|
+
description: "contribution: @contribution tags present"
|
|
187
|
+
},
|
|
188
|
+
version: { type: "string", description: "release: target version (semver/calver)" },
|
|
189
|
+
"has-changelog": { type: "boolean", description: "release: changelog updated" },
|
|
190
|
+
"artifact-type": {
|
|
191
|
+
type: "string",
|
|
192
|
+
description: "artifact-publish: artifact handler (npm-package, docker-image, ...)"
|
|
193
|
+
},
|
|
194
|
+
"build-passed": { type: "boolean", description: "artifact-publish: build step succeeded" },
|
|
195
|
+
"has-attestation": {
|
|
196
|
+
type: "boolean",
|
|
197
|
+
description: "provenance: in-toto attestation generated"
|
|
198
|
+
},
|
|
199
|
+
"has-sbom": {
|
|
200
|
+
type: "boolean",
|
|
201
|
+
description: "provenance: SBOM (CycloneDX/SPDX) generated"
|
|
202
|
+
},
|
|
203
|
+
"adr-content": { type: "string", description: "ADR: ADR markdown body for section check" },
|
|
204
|
+
status: {
|
|
205
|
+
type: "string",
|
|
206
|
+
description: "ADR: lifecycle status (proposed|accepted|superseded|deprecated)"
|
|
207
|
+
},
|
|
208
|
+
"hitl-reviewed": { type: "boolean", description: "ADR: HITL review completed" },
|
|
209
|
+
"downstream-flagged": {
|
|
210
|
+
type: "boolean",
|
|
211
|
+
description: "ADR: downstream artifacts flagged for review"
|
|
212
|
+
},
|
|
213
|
+
"persisted-in-db": {
|
|
214
|
+
type: "boolean",
|
|
215
|
+
description: "ADR: persisted in canonical decisions table"
|
|
216
|
+
},
|
|
217
|
+
"spec-match-confirmed": {
|
|
218
|
+
type: "boolean",
|
|
219
|
+
description: "validation: implementation matches spec"
|
|
220
|
+
},
|
|
221
|
+
"test-suite-passed": {
|
|
222
|
+
type: "boolean",
|
|
223
|
+
description: "validation: existing test suite passed"
|
|
224
|
+
},
|
|
225
|
+
"protocol-compliance-checked": {
|
|
226
|
+
type: "boolean",
|
|
227
|
+
description: "validation: upstream protocols checked"
|
|
228
|
+
},
|
|
229
|
+
framework: { type: "string", description: "testing: detected test framework" },
|
|
230
|
+
"tests-run": { type: "string", description: "testing: total tests executed" },
|
|
231
|
+
"tests-passed": { type: "string", description: "testing: tests that passed" },
|
|
232
|
+
"tests-failed": { type: "string", description: "testing: tests that failed" },
|
|
233
|
+
"coverage-percent": { type: "string", description: "testing: coverage percentage" },
|
|
234
|
+
"coverage-threshold": { type: "string", description: "testing: configured coverage threshold" },
|
|
235
|
+
"ivt-loop-converged": { type: "boolean", description: "testing: IVT loop converged on spec" },
|
|
236
|
+
"ivt-loop-iterations": { type: "string", description: "testing: IVT iteration count" }
|
|
237
|
+
},
|
|
238
|
+
async run({ args }) {
|
|
239
|
+
const protocolType = args.protocolType;
|
|
240
|
+
if (!SUPPORTED_PROTOCOL_TYPES.includes(protocolType)) {
|
|
241
|
+
cliError(
|
|
242
|
+
`Unknown protocol type "${protocolType}". Supported: ${SUPPORTED_PROTOCOL_TYPES.join(", ")}`,
|
|
243
|
+
2,
|
|
244
|
+
{
|
|
245
|
+
name: "E_VALIDATION",
|
|
246
|
+
fix: `Use one of: ${SUPPORTED_PROTOCOL_TYPES.join(", ")}`
|
|
247
|
+
}
|
|
248
|
+
);
|
|
249
|
+
process.exit(2);
|
|
250
|
+
}
|
|
251
|
+
const mode = args["manifest-file"] ? "manifest" : "task";
|
|
252
|
+
await dispatchFromCli(
|
|
253
|
+
"query",
|
|
254
|
+
"check",
|
|
255
|
+
"protocol",
|
|
256
|
+
{
|
|
257
|
+
protocolType,
|
|
258
|
+
mode,
|
|
259
|
+
taskId: args["task-id"],
|
|
260
|
+
manifestFile: args["manifest-file"],
|
|
261
|
+
strict: args.strict,
|
|
262
|
+
votingMatrixFile: args["voting-matrix-file"],
|
|
263
|
+
epicId: args["epic-id"],
|
|
264
|
+
siblingCount: args["sibling-count"] !== void 0 ? Number.parseInt(args["sibling-count"], 10) : void 0,
|
|
265
|
+
maxSiblings: args["max-siblings"] !== void 0 ? Number.parseInt(args["max-siblings"], 10) : void 0,
|
|
266
|
+
specFile: args["spec-file"],
|
|
267
|
+
hasCodeChanges: args["has-code-changes"],
|
|
268
|
+
hasTaskTags: args["has-task-tags"],
|
|
269
|
+
hasContributionTags: args["has-contribution-tags"],
|
|
270
|
+
version: args.version,
|
|
271
|
+
hasChangelog: args["has-changelog"],
|
|
272
|
+
artifactType: args["artifact-type"],
|
|
273
|
+
buildPassed: args["build-passed"],
|
|
274
|
+
hasAttestation: args["has-attestation"],
|
|
275
|
+
hasSbom: args["has-sbom"],
|
|
276
|
+
adrContent: args["adr-content"],
|
|
277
|
+
status: args.status,
|
|
278
|
+
hitlReviewed: args["hitl-reviewed"],
|
|
279
|
+
downstreamFlagged: args["downstream-flagged"],
|
|
280
|
+
persistedInDb: args["persisted-in-db"],
|
|
281
|
+
specMatchConfirmed: args["spec-match-confirmed"],
|
|
282
|
+
testSuitePassed: args["test-suite-passed"],
|
|
283
|
+
protocolComplianceChecked: args["protocol-compliance-checked"],
|
|
284
|
+
framework: args.framework,
|
|
285
|
+
testsRun: args["tests-run"] !== void 0 ? Number.parseInt(args["tests-run"], 10) : void 0,
|
|
286
|
+
testsPassed: args["tests-passed"] !== void 0 ? Number.parseInt(args["tests-passed"], 10) : void 0,
|
|
287
|
+
testsFailed: args["tests-failed"] !== void 0 ? Number.parseInt(args["tests-failed"], 10) : void 0,
|
|
288
|
+
coveragePercent: args["coverage-percent"] !== void 0 ? Number.parseFloat(args["coverage-percent"]) : void 0,
|
|
289
|
+
coverageThreshold: args["coverage-threshold"] !== void 0 ? Number.parseFloat(args["coverage-threshold"]) : void 0,
|
|
290
|
+
ivtLoopConverged: args["ivt-loop-converged"],
|
|
291
|
+
ivtLoopIterations: args["ivt-loop-iterations"] !== void 0 ? Number.parseInt(args["ivt-loop-iterations"], 10) : void 0
|
|
292
|
+
},
|
|
293
|
+
{ command: "check" }
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
var checkProvenanceCommand = defineCommand({
|
|
298
|
+
meta: {
|
|
299
|
+
name: "provenance",
|
|
300
|
+
description: "Audit git log for commits missing a Task ID (T####)"
|
|
301
|
+
},
|
|
302
|
+
args: {
|
|
303
|
+
since: {
|
|
304
|
+
type: "string",
|
|
305
|
+
description: 'Git revision range start (e.g. "v2026.5.0", "HEAD~50", "main")'
|
|
306
|
+
},
|
|
307
|
+
branch: {
|
|
308
|
+
type: "string",
|
|
309
|
+
description: "Branch to audit (default: HEAD)"
|
|
310
|
+
},
|
|
311
|
+
strict: {
|
|
312
|
+
type: "boolean",
|
|
313
|
+
description: "Exit with code 1 if any untagged commits are found"
|
|
314
|
+
},
|
|
315
|
+
limit: {
|
|
316
|
+
type: "string",
|
|
317
|
+
description: "Maximum number of commits to audit (default: 200)"
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
async run({ args }) {
|
|
321
|
+
const { execSync } = await import("node:child_process");
|
|
322
|
+
const since = args.since;
|
|
323
|
+
const branch = args.branch || "HEAD";
|
|
324
|
+
const strict = Boolean(args.strict);
|
|
325
|
+
const limit = args.limit ? Number.parseInt(args.limit, 10) : 200;
|
|
326
|
+
const range = since ? `${since}..${branch}` : branch;
|
|
327
|
+
let logOutput;
|
|
328
|
+
try {
|
|
329
|
+
logOutput = execSync(`git log --no-merges --pretty=format:"%H %s" -n ${limit} ${range}`, {
|
|
330
|
+
encoding: "utf8",
|
|
331
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
332
|
+
});
|
|
333
|
+
} catch (err) {
|
|
334
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
335
|
+
cliError(`git log failed: ${message}`, 1, {
|
|
336
|
+
name: "E_GIT_LOG",
|
|
337
|
+
fix: "Ensure you are inside a git repository and the range is valid."
|
|
338
|
+
});
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
const lines = logOutput.trim().split("\n").filter(Boolean);
|
|
342
|
+
const TASK_ID_RE = /T[0-9]+/;
|
|
343
|
+
const EXEMPT_RE = /^(Merge |Revert |fixup! |squash! |amend! )/;
|
|
344
|
+
const untagged = [];
|
|
345
|
+
const total = lines.length;
|
|
346
|
+
for (const line of lines) {
|
|
347
|
+
const tabIdx = line.indexOf(" ");
|
|
348
|
+
if (tabIdx < 0) continue;
|
|
349
|
+
const sha = line.slice(0, tabIdx).trim();
|
|
350
|
+
const subject = line.slice(tabIdx + 1).trim();
|
|
351
|
+
if (EXEMPT_RE.test(subject)) continue;
|
|
352
|
+
if (!TASK_ID_RE.test(subject)) {
|
|
353
|
+
untagged.push({ sha: sha.slice(0, 12), subject });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const tagged = total - untagged.length;
|
|
357
|
+
const result = {
|
|
358
|
+
success: true,
|
|
359
|
+
data: {
|
|
360
|
+
audited: total,
|
|
361
|
+
tagged,
|
|
362
|
+
untagged: untagged.length,
|
|
363
|
+
untaggedCommits: untagged,
|
|
364
|
+
range,
|
|
365
|
+
passed: untagged.length === 0
|
|
366
|
+
},
|
|
367
|
+
meta: { operation: "check.provenance" }
|
|
368
|
+
};
|
|
369
|
+
process.stdout.write(`${JSON.stringify(result)}
|
|
370
|
+
`);
|
|
371
|
+
if (strict && untagged.length > 0) {
|
|
372
|
+
process.stderr.write(
|
|
373
|
+
`[provenance] ${untagged.length} of ${total} audited commits lack a Task ID.
|
|
374
|
+
`
|
|
375
|
+
);
|
|
376
|
+
process.exit(1);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
var checkArchCommand = defineCommand({
|
|
381
|
+
meta: {
|
|
382
|
+
name: "arch",
|
|
383
|
+
description: "Run all 5 SG-ARCH-SOLID architectural lint gates and emit a LAFS envelope (T9837)"
|
|
384
|
+
},
|
|
385
|
+
args: {
|
|
386
|
+
strict: {
|
|
387
|
+
type: "boolean",
|
|
388
|
+
description: "Fail even if gates are in baseline mode (passes --strict to each script)"
|
|
389
|
+
},
|
|
390
|
+
json: {
|
|
391
|
+
type: "boolean",
|
|
392
|
+
description: "Emit JSON envelope only (no human output)"
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
async run({ args }) {
|
|
396
|
+
const { spawnSync } = await import("node:child_process");
|
|
397
|
+
const { existsSync } = await import("node:fs");
|
|
398
|
+
const { join, resolve } = await import("node:path");
|
|
399
|
+
const strict = Boolean(args.strict);
|
|
400
|
+
const jsonOnly = Boolean(args.json);
|
|
401
|
+
const repoRoot = resolve(process.cwd());
|
|
402
|
+
const gates = [
|
|
403
|
+
{
|
|
404
|
+
id: "gate-1",
|
|
405
|
+
task: "T9837a",
|
|
406
|
+
script: "scripts/lint-no-raw-define-command.mjs",
|
|
407
|
+
description: "No defineCommand() outside cli/lib factory"
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
id: "gate-2",
|
|
411
|
+
task: "T9837b",
|
|
412
|
+
script: "scripts/lint-no-direct-db-open.mjs",
|
|
413
|
+
description: "No DatabaseSync outside core/store"
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
id: "gate-3",
|
|
417
|
+
task: "T9837c",
|
|
418
|
+
script: "scripts/lint-contracts-fan-out.mjs",
|
|
419
|
+
description: "No inline types imported by >2 files"
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
id: "gate-4",
|
|
423
|
+
task: "T9837d",
|
|
424
|
+
script: "scripts/lint-no-ssot-exempt.mjs",
|
|
425
|
+
description: "No SSoT-EXEMPT without linked task ID"
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
id: "gate-5",
|
|
429
|
+
task: "T9837e",
|
|
430
|
+
script: "scripts/lint-cli-package-boundary.mjs",
|
|
431
|
+
description: "No business-logic helper > 30 LOC in CLI commands"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
id: "gate-6",
|
|
435
|
+
task: "T11640",
|
|
436
|
+
script: "scripts/lint-no-bare-get-active-session.mjs",
|
|
437
|
+
description: "No NEW bare getActiveSession() callsites (use resolveCurrentSession)"
|
|
438
|
+
// get-active-session-allowed: gate description string, not a callsite
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
id: "gate-7",
|
|
442
|
+
task: "T12041",
|
|
443
|
+
script: "scripts/lint-no-domain-db-singleton.mjs",
|
|
444
|
+
description: "No NEW per-domain DB singleton cache (bind via the ProjectStore/GlobalStore ports)"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
// T12087: zero-tolerance. An unbounded fork pool froze this machine
|
|
448
|
+
// twice, and it only ever bites locally — CI runners have 2-4 cores, so
|
|
449
|
+
// the unsafe default passes there and takes down the developer instead.
|
|
450
|
+
id: "gate-8",
|
|
451
|
+
task: "T12087",
|
|
452
|
+
script: "scripts/lint-vitest-memory-safe.mjs",
|
|
453
|
+
description: "Every vitest config spreads the memory-safe fork bounds (workers + heap cap)"
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
// T12076: ratchet, not zero-tolerance. 106 static core-barrel imports
|
|
457
|
+
// force the full 1266-module @cleocode/core graph to load before any
|
|
458
|
+
// command runs (measured: 2.54 s for the barrel vs 0.12 s for a deep
|
|
459
|
+
// module). Converting them one at a time produced an
|
|
460
|
+
// EnvironmentTeardownError, so the count is allowed to fall but never
|
|
461
|
+
// rise, and the measurement travels with the gate.
|
|
462
|
+
id: "gate-10",
|
|
463
|
+
task: "T12076",
|
|
464
|
+
script: "scripts/lint-cli-startup-barrel-imports.mjs",
|
|
465
|
+
description: "No NEW static @cleocode/core barrel import in the CLI (startup cost)"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
// T12093: zero-tolerance. `release-prepare.yml` invoked two commands
|
|
469
|
+
// that never existed (`cleo version-bump`, `cleo release changelog`),
|
|
470
|
+
// each discovered only after a full ~20-minute green preflight — and
|
|
471
|
+
// the same break shipped in the template every consuming project
|
|
472
|
+
// renders. A manifest read answers it in 200 ms.
|
|
473
|
+
id: "gate-9",
|
|
474
|
+
task: "T12093",
|
|
475
|
+
script: "scripts/lint-workflow-cleo-commands.mjs",
|
|
476
|
+
description: "Every `cleo` command invoked by a workflow (or its template) exists"
|
|
477
|
+
},
|
|
478
|
+
// ---------------------------------------------------------------------
|
|
479
|
+
// T12122 (GH #1251): the nine gates below were documented in AGENTS.md's
|
|
480
|
+
// gate table but were NEVER bundled here, so `cleo check arch` reported
|
|
481
|
+
// a green that covered 10 of the 15 documented gates. Every agent is
|
|
482
|
+
// told to run this command to self-check before pushing, so the command
|
|
483
|
+
// silently covering two-thirds of its own documentation is the same
|
|
484
|
+
// defect class as a filter that is accepted and not applied.
|
|
485
|
+
//
|
|
486
|
+
// All nine were measured before bundling: none needs a build, network
|
|
487
|
+
// access, or non-trivial time (~800 ms for all nine combined), so there
|
|
488
|
+
// was no reason for the omission and nothing has to be skipped.
|
|
489
|
+
// ---------------------------------------------------------------------
|
|
490
|
+
{
|
|
491
|
+
id: "gate-11",
|
|
492
|
+
task: "T9802",
|
|
493
|
+
script: "scripts/lint-paths-ssot.mjs",
|
|
494
|
+
description: "env-paths / XDG_DATA_HOME / worktree path strings live in packages/paths only"
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
id: "gate-12",
|
|
498
|
+
task: "T9860",
|
|
499
|
+
script: "scripts/lint-deployed-template-parity.mjs",
|
|
500
|
+
description: ".github/workflows/* matches the rendered core workflow templates"
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
id: "gate-13",
|
|
504
|
+
task: "T11281",
|
|
505
|
+
script: "scripts/lint-node-engine-ssot.mjs",
|
|
506
|
+
description: "Every package engines.node equals the root floor"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
id: "gate-14",
|
|
510
|
+
task: "T11400",
|
|
511
|
+
script: "scripts/lint-publish-surface.mjs",
|
|
512
|
+
description: "release.yml publish_pkg list is the npm publish SSoT"
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
id: "gate-15",
|
|
516
|
+
task: "T11418",
|
|
517
|
+
script: "scripts/lint-no-runtime-in-contracts.mjs",
|
|
518
|
+
description: "packages/contracts is types-only (no net-new runtime helper)"
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
id: "gate-16",
|
|
522
|
+
task: "T11409",
|
|
523
|
+
script: "scripts/lint-tools-vs-skills-boundary.mjs",
|
|
524
|
+
description: "Atomic tool primitives are defined only in their home packages"
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
id: "gate-17",
|
|
528
|
+
task: "T11389",
|
|
529
|
+
script: "scripts/lint-no-crate-publish.mjs",
|
|
530
|
+
description: "Every crate declares publish = false (zero crates.io)"
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
id: "gate-18",
|
|
534
|
+
task: "T11783",
|
|
535
|
+
script: "scripts/lint-llm-chokepoint.mjs",
|
|
536
|
+
description: "LLM resolution + client/transport construction stay in the chokepoint"
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
id: "gate-19",
|
|
540
|
+
task: "T12069",
|
|
541
|
+
script: "scripts/lint-injection-commands.mjs",
|
|
542
|
+
description: "Every `cleo` command named in CLEO-INJECTION.md exists"
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
// T12122: the gate on the gates. Without it, this list and the
|
|
546
|
+
// AGENTS.md table drift apart again the moment someone adds one and
|
|
547
|
+
// not the other — which is exactly how the 10-vs-15 split happened.
|
|
548
|
+
id: "gate-20",
|
|
549
|
+
task: "T12122",
|
|
550
|
+
script: "scripts/lint-arch-gate-parity.mjs",
|
|
551
|
+
description: "The bundled gate list and the AGENTS.md gate table are the same set"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
// gh#1283: some tables live in BOTH cleo.db scopes, and nexus ATTACHes
|
|
555
|
+
// the global file onto the shared project handle. A bare name then
|
|
556
|
+
// resolves by SQLite search order and answers without saying which
|
|
557
|
+
// file it read. Narrow by design — qualifying EVERYTHING would break
|
|
558
|
+
// the nexus registry fall-through that depends on bare names.
|
|
559
|
+
id: "gate-21",
|
|
560
|
+
task: "T12156",
|
|
561
|
+
script: "scripts/lint-dual-scope-unqualified-reads.mjs",
|
|
562
|
+
description: "No unqualified SQL reads of tables resident in both cleo.db scopes"
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
// gh#1223: every module reaching the AI SDK can emit on stdout via
|
|
566
|
+
// `ai@6`'s console.info banner. An INVENTORY rather than a per-module
|
|
567
|
+
// rule — the guard is installed once at the envelope funnel by design.
|
|
568
|
+
id: "gate-22",
|
|
569
|
+
task: "T12169",
|
|
570
|
+
script: "scripts/lint-ai-sdk-surface.mjs",
|
|
571
|
+
description: "No unreviewed module reaches the AI SDK at runtime"
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
// T12308: gate 14 checks the injection TEMPLATE and gate 15 the
|
|
575
|
+
// workflow `run:` blocks. The third agent-facing surface is the one
|
|
576
|
+
// CLEO GENERATES — the spawn prompt — and nothing checked it. It had
|
|
577
|
+
// been telling every validation-stage agent to run `cleo verify <id>
|
|
578
|
+
// --run` after that flag was dropped, and every orchestrated agent to
|
|
579
|
+
// pass `cleo conduit subscribe --topicName`, which is not the flag.
|
|
580
|
+
id: "gate-23",
|
|
581
|
+
task: "T12308",
|
|
582
|
+
script: "scripts/lint-agent-prompt-commands.mjs",
|
|
583
|
+
description: "Every `cleo` invocation CLEO writes into an agent prompt exists and is runnable"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
// T12382: the only `.cant` parser users received was a committed
|
|
587
|
+
// linux-x64 binary; every other OS threw. A committed binary also
|
|
588
|
+
// goes stale silently (the committed lafs-napi one already rejects
|
|
589
|
+
// every real envelope). Binaries are built by CI and staged at
|
|
590
|
+
// release, so none may be tracked.
|
|
591
|
+
id: "gate-24",
|
|
592
|
+
task: "T12382",
|
|
593
|
+
script: "scripts/lint-no-committed-native-binaries.mjs",
|
|
594
|
+
description: "No native .node/.wasm binary is committed (built by CI, staged at release)"
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
// T12455 (salvaged from T12138 / gh#1207): SCOPE differs from gate 19
|
|
598
|
+
// deliberately. Gate 19 ratchets a repo-wide count (may fall, never
|
|
599
|
+
// rise); this permits ZERO across the modules reachable from the CLI
|
|
600
|
+
// entrypoint's static import graph, because those are paid on EVERY
|
|
601
|
+
// invocation including `cleo --version` — one import was 87% of CLI
|
|
602
|
+
// startup. Neither subsumes the other; the filenames carry the split.
|
|
603
|
+
id: "gate-25",
|
|
604
|
+
task: "T12455",
|
|
605
|
+
script: "scripts/lint-cli-startup-barrel-entrypoint.mjs",
|
|
606
|
+
description: "No module reachable from the CLI entrypoint statically imports a core barrel"
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
// T12528: citty parses `--no-<name>` as `{ <name>: false }`, never as
|
|
610
|
+
// `{ 'no-<name>': true }`, so a handler reading `args['no-<name>']`
|
|
611
|
+
// silently ignores the flag. Sixteen handlers did, including
|
|
612
|
+
// `orchestrate spawn --no-worktree` and `release plan --no-changelog`.
|
|
613
|
+
// Every read goes through `negatedFlag()` in cli/lib/negated-flag.ts.
|
|
614
|
+
id: "gate-26",
|
|
615
|
+
task: "T12528",
|
|
616
|
+
script: "scripts/lint-no-negated-flag-reads.mjs",
|
|
617
|
+
description: "No raw args['no-<flag>'] read in the CLI (citty never sets it)"
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
// T12483: the owner rule that every human decision goes through the
|
|
621
|
+
// harness ask tool with options (never prose; subagents relay to the
|
|
622
|
+
// orchestrator) must reach every surface an agent reads: the injected
|
|
623
|
+
// template, the ct-cleo / ct-orchestrator skills, and the spawn-prompt
|
|
624
|
+
// return contract emitted at every tier.
|
|
625
|
+
id: "gate-27",
|
|
626
|
+
task: "T12483",
|
|
627
|
+
script: "scripts/lint-hitl-rule-delivery.mjs",
|
|
628
|
+
description: "HITL ask-tool rule present on every agent delivery surface"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
// T12332 (Gate A): every cleo.db table now carries a replication
|
|
632
|
+
// class, and replication captures writes at the chokepoint
|
|
633
|
+
// (openDualScopeDb and the canonical accessors, which are exempt). A
|
|
634
|
+
// raw INSERT/UPDATE/DELETE/REPLACE elsewhere is a write nobody can
|
|
635
|
+
// enumerate. A ratchet: today's offenders are baselined per
|
|
636
|
+
// (file, table), a new one fails, and a removed one must leave the
|
|
637
|
+
// baseline in the same change.
|
|
638
|
+
id: "gate-28",
|
|
639
|
+
task: "T12332",
|
|
640
|
+
script: "scripts/lint-no-raw-table-writes.mjs",
|
|
641
|
+
description: "No new raw SQL write on a classified cleo.db table (ratchet)"
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
// T12648: SKILL.md frontmatter is the skills metadata SSoT (D11157).
|
|
645
|
+
// The manifest is generated from it, so a hand-edited version, a
|
|
646
|
+
// directory the manifest omits, or an entry with no directory fails.
|
|
647
|
+
id: "gate-29",
|
|
648
|
+
task: "T12648",
|
|
649
|
+
script: "scripts/lint-skills-manifest.mjs",
|
|
650
|
+
description: "Skills manifest generated from valid SKILL.md frontmatter"
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
// T12648: a skill named by stage guidance, the spawn prompt or a
|
|
654
|
+
// .cant protocol must exist, be declared install: harness and be
|
|
655
|
+
// installed; metadata.install must match what install does.
|
|
656
|
+
id: "gate-30",
|
|
657
|
+
task: "T12648",
|
|
658
|
+
script: "scripts/lint-emitted-skills.mjs",
|
|
659
|
+
description: "Every skill code emits is installable (ratchet)"
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
// T12649: gate 14's command/flag rules applied to every canonical
|
|
663
|
+
// skill. Core-tier skills are zero-tolerance; others ratchet.
|
|
664
|
+
id: "gate-31",
|
|
665
|
+
task: "T12649",
|
|
666
|
+
script: "scripts/lint-skill-commands.mjs",
|
|
667
|
+
description: "Every cleo command a skill teaches exists and is runnable"
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
// T12124 (gh#1256): skills declare the code they document in
|
|
671
|
+
// metadata.covers. Here: every core/LOOM skill declares live covers;
|
|
672
|
+
// CI adds the PR diff check (--base).
|
|
673
|
+
id: "gate-32",
|
|
674
|
+
task: "T12124",
|
|
675
|
+
script: "scripts/lint-skill-coverage.mjs",
|
|
676
|
+
description: "Skills declare live metadata.covers (PR diff checked in CI)"
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
// T9148 / T12124: ct-cleo stays a thin pointer — ratcheted.
|
|
680
|
+
id: "gate-33",
|
|
681
|
+
task: "T12124",
|
|
682
|
+
script: "scripts/check-ct-cleo-thin.mjs",
|
|
683
|
+
description: "ct-cleo SKILL.md does not grow (thin-pointer ratchet)"
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
// T12704: an ES module has no `require`. A bare `require()` throws
|
|
687
|
+
// under Node while vitest supplies one, so tests stay green and the
|
|
688
|
+
// shipped build fails, usually inside a swallowing `try`: the docs
|
|
689
|
+
// audit wrote nothing, two doctor checks never ran, and no
|
|
690
|
+
// .worktreeinclude glob ever copied.
|
|
691
|
+
id: "gate-34",
|
|
692
|
+
task: "T12704",
|
|
693
|
+
script: "scripts/lint-no-esm-bare-require.mjs",
|
|
694
|
+
description: "No bare require() in ESM package sources"
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
// T12663: every model call site is a registered decision site
|
|
698
|
+
// (spec system-one-integration §3.5, D11158): decide()/askSiteDecision
|
|
699
|
+
// name a registry id, LLM entry points live in registered files of a
|
|
700
|
+
// generative/agent rung, a System One site runs `on` only with go-live
|
|
701
|
+
// evidence, and chokepoint bypasses are baselined per file.
|
|
702
|
+
id: "gate-35",
|
|
703
|
+
task: "T12663",
|
|
704
|
+
script: "scripts/lint-model-call-sites.mjs",
|
|
705
|
+
description: "Every model call site is a registered decision site (ratchet)"
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
// T12819 / T12827 (journal spec §2.3a, §3.5 Rule 4): nothing drops
|
|
709
|
+
// cleo_trigger_suspend; only dropSyncMachinery drops _sync_* tables;
|
|
710
|
+
// migrations never mention capture triggers; forward-only migration
|
|
711
|
+
// rules (owned triggers carry the suspension clause, deterministic
|
|
712
|
+
// DML, no parent DELETE in a rebuild file); released migration files
|
|
713
|
+
// are byte-identical to the base ref (#1719).
|
|
714
|
+
id: "gate-36",
|
|
715
|
+
task: "T12819",
|
|
716
|
+
script: "scripts/lint-sync-schema.mjs",
|
|
717
|
+
description: "Change-journal schema rules (suspend table, migrations)"
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
// T12897: every syncing cleo.db table is declared in ROW_IDENTITY or
|
|
721
|
+
// exempt with a reason and a task in ROW_IDENTITY_EXEMPT; a stale
|
|
722
|
+
// exemption (table gone, no longer syncing, or declared) fails too.
|
|
723
|
+
// The fresh-store check is store/__tests__/row-identity-gate.test.ts.
|
|
724
|
+
id: "gate-37",
|
|
725
|
+
task: "T12897",
|
|
726
|
+
script: "scripts/lint-row-identity-coverage.mjs",
|
|
727
|
+
description: "Every syncing cleo.db table has declared row identity or an exemption"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
// T12881: the raw sync applier never runs TypeScript write paths, so
|
|
731
|
+
// every rejection site on a synced write path is tagged
|
|
732
|
+
// `// @sync-invariant <id>` (contracts sync-write-invariants
|
|
733
|
+
// registry) or an escape with a reason. Untagged sites are baselined
|
|
734
|
+
// per (file, symbol, code); the baseline only shrinks. Registry
|
|
735
|
+
// closure: tables classified, triggers created by migrations, no
|
|
736
|
+
// dead gates (spec t12859 §3.6.7).
|
|
737
|
+
id: "gate-38",
|
|
738
|
+
task: "T12881",
|
|
739
|
+
script: "scripts/lint-sync-write-invariants.mjs",
|
|
740
|
+
description: "Every synced-write rejection site is classified (ratchet)"
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
// T13126: gates 19 and 25 read the CLI SOURCE graph, and stayed green
|
|
744
|
+
// while every `cleo` call evaluated all of CORE: the unsplit esbuild
|
|
745
|
+
// bundle hoisted each lazy `import()`'s externals to static imports.
|
|
746
|
+
// This gate measures the BUILT CLI instead: the entry's static graph
|
|
747
|
+
// must not import a barrel, and `--version`, `--help` and `show` run in
|
|
748
|
+
// a throwaway sandbox under module-count budgets (the ratchet) and RSS
|
|
749
|
+
// ceilings. Needs a current `pnpm run build`; a missing or stale build
|
|
750
|
+
// fails rather than measuring code that is no longer there.
|
|
751
|
+
id: "gate-39",
|
|
752
|
+
task: "T13126",
|
|
753
|
+
script: "scripts/check-cli-startup-graph.mjs",
|
|
754
|
+
description: "Built CLI startup graph and per-command module budgets (ratchet)"
|
|
755
|
+
}
|
|
756
|
+
];
|
|
757
|
+
const scriptArgs = strict ? ["--strict"] : ["--check"];
|
|
758
|
+
const results = [];
|
|
759
|
+
let anyFailed = false;
|
|
760
|
+
for (const gate of gates) {
|
|
761
|
+
const scriptPath = join(repoRoot, gate.script);
|
|
762
|
+
if (!existsSync(scriptPath)) {
|
|
763
|
+
results.push({
|
|
764
|
+
id: gate.id,
|
|
765
|
+
task: gate.task,
|
|
766
|
+
script: gate.script,
|
|
767
|
+
description: gate.description,
|
|
768
|
+
status: "skipped",
|
|
769
|
+
exitCode: null,
|
|
770
|
+
stdout: "",
|
|
771
|
+
stderr: `Script not yet created (task ${gate.task} pending).`
|
|
772
|
+
});
|
|
773
|
+
continue;
|
|
774
|
+
}
|
|
775
|
+
const result = spawnSync("node", [scriptPath, ...scriptArgs], {
|
|
776
|
+
encoding: "utf8",
|
|
777
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
778
|
+
cwd: repoRoot
|
|
779
|
+
});
|
|
780
|
+
const passed = result.status === 0;
|
|
781
|
+
if (!passed) anyFailed = true;
|
|
782
|
+
results.push({
|
|
783
|
+
id: gate.id,
|
|
784
|
+
task: gate.task,
|
|
785
|
+
script: gate.script,
|
|
786
|
+
description: gate.description,
|
|
787
|
+
status: passed ? "pass" : "fail",
|
|
788
|
+
exitCode: result.status,
|
|
789
|
+
stdout: result.stdout ?? "",
|
|
790
|
+
stderr: result.stderr ?? ""
|
|
791
|
+
});
|
|
792
|
+
}
|
|
793
|
+
const passCount = results.filter((r) => r.status === "pass").length;
|
|
794
|
+
const failCount = results.filter((r) => r.status === "fail").length;
|
|
795
|
+
const skipCount = results.filter((r) => r.status === "skipped").length;
|
|
796
|
+
const envelope = {
|
|
797
|
+
success: !anyFailed,
|
|
798
|
+
data: {
|
|
799
|
+
saga: "T9831",
|
|
800
|
+
epic: "T9837",
|
|
801
|
+
mode: strict ? "strict" : "baseline",
|
|
802
|
+
summary: { pass: passCount, fail: failCount, skipped: skipCount, total: gates.length },
|
|
803
|
+
gates: results,
|
|
804
|
+
passed: !anyFailed
|
|
805
|
+
},
|
|
806
|
+
meta: {
|
|
807
|
+
operation: "check.arch",
|
|
808
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
809
|
+
}
|
|
810
|
+
};
|
|
811
|
+
process.stdout.write(`${JSON.stringify(envelope)}
|
|
812
|
+
`);
|
|
813
|
+
if (!jsonOnly) {
|
|
814
|
+
process.stderr.write(`
|
|
815
|
+
`);
|
|
816
|
+
process.stderr.write(`SG-ARCH-SOLID Architectural Boundary Check (T9837)
|
|
817
|
+
`);
|
|
818
|
+
process.stderr.write(`${"\u2500".repeat(52)}
|
|
819
|
+
`);
|
|
820
|
+
for (const r of results) {
|
|
821
|
+
const icon = r.status === "pass" ? "PASS" : r.status === "fail" ? "FAIL" : "SKIP";
|
|
822
|
+
process.stderr.write(` [${icon}] ${r.id} (${r.task}) \u2014 ${r.description}
|
|
823
|
+
`);
|
|
824
|
+
if (r.status === "fail" && r.stderr.trim()) {
|
|
825
|
+
const lines = r.stderr.trim().split("\n").slice(0, 3);
|
|
826
|
+
for (const line of lines) {
|
|
827
|
+
process.stderr.write(` ${line}
|
|
828
|
+
`);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
if (r.status === "skipped") {
|
|
832
|
+
process.stderr.write(` ${r.stderr.trim()}
|
|
833
|
+
`);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
process.stderr.write(`${"\u2500".repeat(52)}
|
|
837
|
+
`);
|
|
838
|
+
process.stderr.write(
|
|
839
|
+
` Result: ${passCount} passed, ${failCount} failed, ${skipCount} skipped
|
|
840
|
+
`
|
|
841
|
+
);
|
|
842
|
+
process.stderr.write(`
|
|
843
|
+
`);
|
|
844
|
+
}
|
|
845
|
+
if (anyFailed) process.exit(1);
|
|
846
|
+
}
|
|
847
|
+
});
|
|
848
|
+
var checkPrCommand = defineCommand({
|
|
849
|
+
meta: {
|
|
850
|
+
name: "pr",
|
|
851
|
+
description: "Run the CI required-gates locally and report one pass/fail summary (T11956)"
|
|
852
|
+
},
|
|
853
|
+
args: {
|
|
854
|
+
full: {
|
|
855
|
+
type: "boolean",
|
|
856
|
+
description: "Also run the complete standalone-lint surface (slower, exhaustive)"
|
|
857
|
+
},
|
|
858
|
+
only: {
|
|
859
|
+
type: "string",
|
|
860
|
+
description: 'Comma-separated gate ids to run (e.g. "biome,typecheck,test")'
|
|
861
|
+
},
|
|
862
|
+
"memory-max": {
|
|
863
|
+
type: "string",
|
|
864
|
+
description: "MemoryMax for cgroup-capped heavy gates on Linux (default: 16G)"
|
|
865
|
+
},
|
|
866
|
+
"no-keep-going": {
|
|
867
|
+
type: "boolean",
|
|
868
|
+
description: "Stop at the first failing gate instead of running them all"
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
async run({ args }) {
|
|
872
|
+
const onlyRaw = args.only;
|
|
873
|
+
const summary = runPrGate({
|
|
874
|
+
full: Boolean(args.full),
|
|
875
|
+
only: onlyRaw ? onlyRaw.split(",").map((s) => s.trim()).filter(Boolean) : void 0,
|
|
876
|
+
memoryMax: args["memory-max"],
|
|
877
|
+
keepGoing: !negatedFlag(args, "keep-going"),
|
|
878
|
+
onProgress: (line) => process.stderr.write(`${line}
|
|
879
|
+
`)
|
|
880
|
+
});
|
|
881
|
+
emitPrGateSummary(summary);
|
|
882
|
+
if (!summary.passed) process.exit(1);
|
|
883
|
+
}
|
|
884
|
+
});
|
|
885
|
+
var checkCommand = defineCommand({
|
|
886
|
+
meta: { name: "check", description: "Validation and compliance checks" },
|
|
887
|
+
subCommands: {
|
|
888
|
+
schema: checkSchemaCommand,
|
|
889
|
+
coherence: checkCoherenceCommand,
|
|
890
|
+
task: checkTaskCommand,
|
|
891
|
+
output: checkOutputCommand,
|
|
892
|
+
canon: checkCanonCommand,
|
|
893
|
+
protocol: checkProtocolCommand,
|
|
894
|
+
provenance: checkProvenanceCommand,
|
|
895
|
+
arch: checkArchCommand,
|
|
896
|
+
pr: checkPrCommand
|
|
897
|
+
},
|
|
898
|
+
async run({ cmd, rawArgs }) {
|
|
899
|
+
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
900
|
+
if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
|
|
901
|
+
await showUsage(cmd);
|
|
902
|
+
}
|
|
903
|
+
});
|
|
904
|
+
export {
|
|
905
|
+
checkCommand
|
|
906
|
+
};
|
|
907
|
+
//# sourceMappingURL=check-RWJLBCI2.js.map
|