scip-query 0.10.3 → 0.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.
Files changed (87) hide show
  1. package/README.md +9 -8
  2. package/dist/{chunk-YVLHL6KQ.js → chunk-237YUOPK.js} +2 -2
  3. package/dist/chunk-56UN3DMK.js +2 -0
  4. package/dist/chunk-5UDFZC4D.js +2 -0
  5. package/dist/{chunk-X474LKJX.js → chunk-6UFMPECA.js} +2 -2
  6. package/dist/chunk-7JOTOWZO.js +4 -0
  7. package/dist/chunk-A7RNHUJH.js +20 -0
  8. package/dist/chunk-AYYIZ4BA.js +4 -0
  9. package/dist/chunk-BNKE4TT5.js +2 -0
  10. package/dist/chunk-MA7OVFHI.js +2 -0
  11. package/dist/chunk-QUJBXLBY.js +2 -0
  12. package/dist/chunk-WBJZNPUT.js +2 -0
  13. package/dist/{chunk-4HOMAEDD.js → chunk-YUTRW57I.js} +2 -2
  14. package/dist/cli.js +209 -197
  15. package/dist/frontend-behavior-evidence-BxKpKWUu.d.ts +4 -0
  16. package/dist/postinstall.js +3 -3
  17. package/dist/queries/diff-gate.d.ts +4 -2
  18. package/dist/queries/diff-gate.js +1 -1
  19. package/dist/queries/diff-impact.js +1 -1
  20. package/dist/queries/doc-drift.js +1 -1
  21. package/dist/queries/health.js +1 -1
  22. package/dist/queries/incomplete-migration.js +1 -1
  23. package/dist/queries/index.d.ts +1 -0
  24. package/dist/queries/index.js +1 -1
  25. package/dist/queries/plan-context.js +1 -1
  26. package/dist/queries/react-component-duplicates.js +1 -1
  27. package/dist/queries/react-hook-candidates.d.ts +3 -2
  28. package/dist/queries/react-hook-candidates.js +1 -1
  29. package/dist/queries/recent-duplicates.js +1 -1
  30. package/dist/queries/vue-component-duplicates.js +1 -1
  31. package/dist/queries/vue-composable-candidates.d.ts +3 -2
  32. package/dist/queries/vue-composable-candidates.js +1 -1
  33. package/dist/runtime.js +1 -1
  34. package/docs/AGENT_GUIDE.md +42 -5
  35. package/docs/AI_FAILURE_MODES.md +28 -21
  36. package/docs/COMMAND_REFERENCE.md +4 -2
  37. package/docs/analyzer-inventory.md +5 -1
  38. package/docs/analyzer-validation-ledger.md +8 -0
  39. package/package.json +3 -2
  40. package/skills/concrete-plan/SKILL.md +3 -5
  41. package/skills/concrete-plan/agents/openai.yaml +4 -0
  42. package/skills/scip-adoption/SKILL.md +120 -0
  43. package/skills/scip-adoption/agents/openai.yaml +4 -0
  44. package/skills/scip-ai-cleanup/SKILL.md +12 -4
  45. package/skills/scip-ai-cleanup/agents/openai.yaml +4 -0
  46. package/skills/scip-api-impact/SKILL.md +147 -0
  47. package/skills/scip-api-impact/agents/openai.yaml +4 -0
  48. package/skills/scip-debloat/SKILL.md +15 -13
  49. package/skills/scip-debloat/agents/openai.yaml +4 -0
  50. package/skills/scip-debug/SKILL.md +119 -0
  51. package/skills/scip-debug/agents/openai.yaml +4 -0
  52. package/skills/scip-diagram/SKILL.md +138 -0
  53. package/skills/scip-diagram/agents/openai.yaml +4 -0
  54. package/skills/scip-directory-architecture/SKILL.md +2 -2
  55. package/skills/scip-directory-architecture/agents/openai.yaml +4 -0
  56. package/skills/scip-doc-reconcile/SKILL.md +1 -3
  57. package/skills/scip-doc-reconcile/agents/openai.yaml +4 -0
  58. package/skills/scip-explore/SKILL.md +8 -2
  59. package/skills/scip-explore/agents/openai.yaml +4 -0
  60. package/skills/scip-health-audit/SKILL.md +158 -0
  61. package/skills/scip-health-audit/agents/openai.yaml +4 -0
  62. package/skills/scip-health-improve/SKILL.md +151 -0
  63. package/skills/scip-health-improve/agents/openai.yaml +4 -0
  64. package/skills/scip-language-playbook/SKILL.md +7 -4
  65. package/skills/scip-language-playbook/agents/openai.yaml +4 -0
  66. package/skills/scip-maintainability/SKILL.md +7 -3
  67. package/skills/scip-maintainability/agents/openai.yaml +4 -0
  68. package/skills/scip-query/SKILL.md +74 -33
  69. package/skills/scip-query/agents/openai.yaml +4 -0
  70. package/skills/scip-query-setup/SKILL.md +65 -18
  71. package/skills/scip-query-setup/agents/openai.yaml +3 -0
  72. package/skills/scip-react-maintainability/SKILL.md +2 -2
  73. package/skills/scip-react-maintainability/agents/openai.yaml +4 -0
  74. package/skills/scip-triage-issue/SKILL.md +112 -0
  75. package/skills/scip-triage-issue/agents/openai.yaml +4 -0
  76. package/skills/scip-verify/SKILL.md +83 -232
  77. package/skills/scip-verify/agents/openai.yaml +4 -0
  78. package/skills/scip-vue-maintainability/SKILL.md +2 -3
  79. package/skills/scip-vue-maintainability/agents/openai.yaml +4 -0
  80. package/dist/chunk-7ADUXFRZ.js +0 -2
  81. package/dist/chunk-GLJAAKDW.js +0 -4
  82. package/dist/chunk-GS33KGAY.js +0 -2
  83. package/dist/chunk-I7TSQZ3J.js +0 -4
  84. package/dist/chunk-NP5HYVLX.js +0 -20
  85. package/dist/chunk-O4L4AB3T.js +0 -2
  86. package/dist/chunk-TO54DY4O.js +0 -2
  87. package/dist/chunk-UMNENNTX.js +0 -2
@@ -0,0 +1,4 @@
1
+ type FrontendBehaviorEvidenceClass = 'domain-behavior' | 'generic-workflow-scaffolding' | 'mixed' | 'shared-abstraction';
2
+ type FrontendBehaviorActionTier = 'signal' | 'support';
3
+
4
+ export type { FrontendBehaviorActionTier as F, FrontendBehaviorEvidenceClass as a };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{b as k,c as g,d as f,e as m}from"./chunk-NXIAHE7F.js";import{existsSync as p,mkdirSync as L,symlinkSync as b,readlinkSync as v,unlinkSync as q}from"fs";import{join as l,dirname as y,resolve as d}from"path";import{homedir as u,platform as C}from"os";import{fileURLToPath as N}from"url";var R=C()==="win32",T=["scip-query","scip-query-setup","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function A(i={}){let e=i.quiet?()=>{}:console.log,o=N(import.meta.url),I=d(y(o),"..","skills"),$=[l(u(),".claude","skills"),l(u(),".codex","skills"),l(u(),".agents","skills")],s={installed:[],skipped:[],alreadyLinked:[]};for(let r of $){let h=y(r);if(!p(h))continue;L(r,{recursive:!0});let t=j(r);for(let n of T){let a=l(I,n),c=l(r,n);if(!p(a)){s.skipped.push(`${t}/${n}`);continue}if(p(c)){try{let x=v(c);if(d(x)===d(a)){s.alreadyLinked.push(`${t}/${n}`),e(` ok: ${n} \u2192 ${t} (already linked)`);continue}}catch{s.skipped.push(`${t}/${n}`),e(` skip: ${n} \u2192 ${t} (exists, not a symlink)`);continue}q(c)}b(a,c,R?"junction":"dir"),s.installed.push(`${t}/${n}`),e(` done: ${n} \u2192 ${t}`)}}return s}function j(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}function S(){console.log("scip-query: installing skills...");let i=A({quiet:!1});if(i.installed.length+i.alreadyLinked.length>0&&console.log(`
3
- ${i.installed.length} skill(s) installed, ${i.alreadyLinked.length} already linked.`),!k())console.log(`
4
- scip CLI not found on PATH. Attempting auto-install...`),m(console.log)||f();else{let o=g();console.log(`
2
+ import{b as g,c as k,d as m,e as f}from"./chunk-NXIAHE7F.js";import{existsSync as p,mkdirSync as L,symlinkSync as v,readlinkSync as b,unlinkSync as q}from"fs";import{join as e,dirname as y,resolve as d}from"path";import{homedir as u,platform as A}from"os";import{fileURLToPath as C}from"url";var H=A()==="win32",U=["scip-query","scip-query-setup","scip-adoption","scip-health-audit","scip-health-improve","scip-api-impact","concrete-plan","scip-ai-cleanup","scip-debug","scip-explore","scip-triage-issue","scip-diagram","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function N(i={}){let l=i.quiet?()=>{}:console.log,o=C(import.meta.url),h=d(y(o),"..","skills"),I=[e(u(),".claude","skills"),e(u(),".codex","skills"),e(u(),".agents","skills")],n={installed:[],skipped:[],alreadyLinked:[]};for(let r of I){let $=y(r);if(!p($))continue;L(r,{recursive:!0});let t=R(r);for(let s of U){let a=e(h,s),c=e(r,s);if(!p(a)){n.skipped.push(`${t}/${s}`);continue}if(p(c)){try{let x=b(c);if(d(x)===d(a)){n.alreadyLinked.push(`${t}/${s}`),l(` ok: ${s} \u2192 ${t} (already linked)`);continue}}catch{n.skipped.push(`${t}/${s}`),l(` skip: ${s} \u2192 ${t} (exists, not a symlink)`);continue}q(c)}v(a,c,H?"junction":"dir"),n.installed.push(`${t}/${s}`),l(` done: ${s} \u2192 ${t}`)}}return n}function R(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}function S(){console.log("scip-query: installing skills...");let i=N({quiet:!1});if(i.installed.length+i.alreadyLinked.length>0&&console.log(`
3
+ ${i.installed.length} skill(s) installed, ${i.alreadyLinked.length} already linked.`),!g())console.log(`
4
+ scip CLI not found on PATH. Attempting auto-install...`),f(console.log)||m();else{let o=k();console.log(`
5
5
  scip CLI: ${o??"installed"}`)}console.log("")}S();
6
6
  //# sourceMappingURL=postinstall.js.map
@@ -5,13 +5,15 @@ import { DiffImpactPlan } from './diff-impact.js';
5
5
  import { F as FindingSuppression } from '../config-types-Bj4sh28g.js';
6
6
  import 'better-sqlite3';
7
7
 
8
+ type DiffGateActionTier = 'direct' | 'signal' | 'support';
9
+ type DocCitationKind = 'behavioral-claim' | 'configuration-example' | 'guide-reference' | 'intentional-record';
10
+
8
11
  type DiffGateCheck = 'echo' | 'incomplete-migration' | 'co-change-partner' | 'doc-reference' | 'unused-params' | 'new-dead' | 'baseline';
9
12
  /** Canonical check list — the CLI validates `--skip` values against this. */
10
13
  declare const DIFF_GATE_CHECKS: readonly DiffGateCheck[];
11
14
  type DiffGateEvidence = 'graph-fact' | 'semantic' | 'heuristic' | 'change-graph' | 'baseline';
12
15
  type DiffGateSeverity = 'info' | 'warning' | 'error';
13
- type DiffGateActionTier = 'direct' | 'signal' | 'support';
14
- type DocCitationKind = 'behavioral-claim' | 'configuration-example' | 'guide-reference' | 'intentional-record';
16
+
15
17
  interface DiffGateFinding {
16
18
  id: string;
17
19
  check: DiffGateCheck;
@@ -1,2 +1,2 @@
1
- import{d as a,e as b,f as c}from"../chunk-I7TSQZ3J.js";import"../chunk-NNDYO2DX.js";import"../chunk-YVLHL6KQ.js";import"../chunk-B32FX5KB.js";import"../chunk-SPE4YCOT.js";import"../chunk-ZFMPHDAT.js";import"../chunk-C2QSK7E7.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import"../chunk-7KCSELEV.js";import"../chunk-NP5HYVLX.js";import"../chunk-GLJAAKDW.js";import"../chunk-AW4N6MGC.js";import"../chunk-C3MZZ2ZN.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-PFOCOG57.js";import"../chunk-CJJP64OC.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as DIFF_GATE_CHECKS,b as diffGate,c as symbolPreexistenceChecker};
1
+ import{d as a,e as b,f as c}from"../chunk-7JOTOWZO.js";import"../chunk-NNDYO2DX.js";import"../chunk-237YUOPK.js";import"../chunk-B32FX5KB.js";import"../chunk-SPE4YCOT.js";import"../chunk-ZFMPHDAT.js";import"../chunk-C2QSK7E7.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import"../chunk-7KCSELEV.js";import"../chunk-A7RNHUJH.js";import"../chunk-AYYIZ4BA.js";import"../chunk-AW4N6MGC.js";import"../chunk-C3MZZ2ZN.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-PFOCOG57.js";import"../chunk-CJJP64OC.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as DIFF_GATE_CHECKS,b as diffGate,c as symbolPreexistenceChecker};
2
2
  //# sourceMappingURL=diff-gate.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d,e,f}from"../chunk-NP5HYVLX.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as GIT_DIFF_UNAVAILABLE_NOTE,b as diffImpact,d as diffImpactPartial,c as diffImpactPlan,f as fileContentAtBase,e as mergeDiffImpactPartials};
1
+ import{b as a,c as b,d as c,e as d,f as e,g as f}from"../chunk-A7RNHUJH.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as GIT_DIFF_UNAVAILABLE_NOTE,b as diffImpact,d as diffImpactPartial,c as diffImpactPlan,f as fileContentAtBase,e as mergeDiffImpactPartials};
2
2
  //# sourceMappingURL=diff-impact.js.map
@@ -1,2 +1,2 @@
1
- import{b as a,c as b,d as c}from"../chunk-GLJAAKDW.js";import"../chunk-KRGBLZT2.js";import"../chunk-A4L36SZS.js";import"../chunk-7S5E7KWT.js";export{b as docDrift,c as docsCitingFiles,a as isArchivalDoc};
1
+ import{c as a,d as b,e as c}from"../chunk-AYYIZ4BA.js";import"../chunk-KRGBLZT2.js";import"../chunk-A4L36SZS.js";import"../chunk-7S5E7KWT.js";export{b as docDrift,c as docsCitingFiles,a as isArchivalDoc};
2
2
  //# sourceMappingURL=doc-drift.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d}from"../chunk-4HOMAEDD.js";import"../chunk-O3OKSF6O.js";import"../chunk-3KLLFNT4.js";import"../chunk-QSXQT3NE.js";import"../chunk-O4L4AB3T.js";import"../chunk-GS33KGAY.js";import"../chunk-UMNENNTX.js";import"../chunk-TO54DY4O.js";import"../chunk-PVZMPG5I.js";import"../chunk-B32FX5KB.js";import"../chunk-SPE4YCOT.js";import"../chunk-ZFMPHDAT.js";import"../chunk-C2QSK7E7.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import"../chunk-7KCSELEV.js";import"../chunk-AW4N6MGC.js";import"../chunk-C3MZZ2ZN.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-DAI74TJU.js";import"../chunk-PFOCOG57.js";import"../chunk-CJJP64OC.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as HEALTH_PHASES,b as health,c as healthPhase,d as healthReportFromPhases};
1
+ import{a,b,c,d}from"../chunk-YUTRW57I.js";import"../chunk-O3OKSF6O.js";import"../chunk-3KLLFNT4.js";import"../chunk-QSXQT3NE.js";import"../chunk-5UDFZC4D.js";import"../chunk-BNKE4TT5.js";import"../chunk-WBJZNPUT.js";import"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-B32FX5KB.js";import"../chunk-SPE4YCOT.js";import"../chunk-ZFMPHDAT.js";import"../chunk-C2QSK7E7.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import"../chunk-7KCSELEV.js";import"../chunk-AW4N6MGC.js";import"../chunk-C3MZZ2ZN.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-DAI74TJU.js";import"../chunk-PFOCOG57.js";import"../chunk-CJJP64OC.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as HEALTH_PHASES,b as health,c as healthPhase,d as healthReportFromPhases};
2
2
  //# sourceMappingURL=health.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-YVLHL6KQ.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-NP5HYVLX.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as incompleteMigration};
1
+ import{a}from"../chunk-237YUOPK.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-A7RNHUJH.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as incompleteMigration};
2
2
  //# sourceMappingURL=incomplete-migration.js.map
@@ -60,6 +60,7 @@ export { AuditDisagreement, AuditQuestionScore, SelfAuditResult, selfAudit } fro
60
60
  export { SimilarSignatureGroup, similarSignatures } from './similar-signatures.js';
61
61
  import 'better-sqlite3';
62
62
  import '../config-types-Bj4sh28g.js';
63
+ import '../frontend-behavior-evidence-BxKpKWUu.js';
63
64
  import '../git-history-Dao3_Pu9.js';
64
65
 
65
66
  interface HealthBaselineFile {
@@ -1,2 +1,2 @@
1
- import{a as se}from"../chunk-A3VNUGKJ.js";import{a as ye}from"../chunk-QVCCLDZI.js";import{a as de}from"../chunk-77YBOOYT.js";import{a as ve}from"../chunk-FNRPGGVI.js";import{a as Ce}from"../chunk-X474LKJX.js";import{a as fe}from"../chunk-ICXVNWMI.js";import{a as me}from"../chunk-X7ZY6FFF.js";import{a as he}from"../chunk-FIB4JPEX.js";import{a as ce}from"../chunk-YQH353VA.js";import{a as ge}from"../chunk-7ADUXFRZ.js";import{a as je}from"../chunk-ZSLT7NWQ.js";import{a as le}from"../chunk-5M4TYWVI.js";import{a as De}from"../chunk-E44ZMVNA.js";import{a as Re}from"../chunk-DJMK4DBL.js";import{a as xe}from"../chunk-NVFERV4U.js";import{a as ne}from"../chunk-5FOPAXWY.js";import{a as ue}from"../chunk-YUOAAR24.js";import{a as q,b as M,c as U,d as _}from"../chunk-CAWSSEVM.js";import{a as N}from"../chunk-B6MJ5VQV.js";import{a as Z,b as $,c as ee,d as te}from"../chunk-4HOMAEDD.js";import{a as Y}from"../chunk-O3OKSF6O.js";import"../chunk-3KLLFNT4.js";import{a as z}from"../chunk-QSXQT3NE.js";import{a as X}from"../chunk-O4L4AB3T.js";import{a as J}from"../chunk-GS33KGAY.js";import{a as W}from"../chunk-UMNENNTX.js";import{a as Q}from"../chunk-TO54DY4O.js";import"../chunk-PVZMPG5I.js";import{a as oe}from"../chunk-47UA45TU.js";import{a as re}from"../chunk-E7KERP7E.js";import{a as ae,b as pe,c as ie}from"../chunk-7OHWPJ5N.js";import{a as y}from"../chunk-EOZIZWW4.js";import{a as R}from"../chunk-CSWZFD46.js";import{a as g,b as h}from"../chunk-4ZUJJRWT.js";import{a as I,b as w,c as B,d as G,e as O}from"../chunk-I7TSQZ3J.js";import{a as K}from"../chunk-NNDYO2DX.js";import{a as V}from"../chunk-YVLHL6KQ.js";import"../chunk-B32FX5KB.js";import{a as E}from"../chunk-SPE4YCOT.js";import{a as T}from"../chunk-ZFMPHDAT.js";import{a as k}from"../chunk-C2QSK7E7.js";import{a as H,b as L}from"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import{a as P}from"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import{a as F}from"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import{a as b}from"../chunk-7KCSELEV.js";import{b as C,c as j,d as D,e as v}from"../chunk-NP5HYVLX.js";import{c as S}from"../chunk-GLJAAKDW.js";import{a as A}from"../chunk-AW4N6MGC.js";import{a as s}from"../chunk-OLD6PBU6.js";import{b as i}from"../chunk-C3MZZ2ZN.js";import{b as n}from"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import{a as l}from"../chunk-LPLGJ4HO.js";import{a as m}from"../chunk-ESG4HBEF.js";import{a as f}from"../chunk-DAI74TJU.js";import"../chunk-PFOCOG57.js";import{a as c}from"../chunk-YYD245WG.js";import{a as u,b as x}from"../chunk-5QJXH6ZL.js";import{a as d}from"../chunk-CJJP64OC.js";import{a as e}from"../chunk-CFL2CNIF.js";import{a as t}from"../chunk-MUULWXSJ.js";import{a as o,b as r}from"../chunk-BKDXBJDQ.js";import{a}from"../chunk-Z4VHYJ5U.js";import"../chunk-B75HZHUP.js";import{a as p}from"../chunk-TM6GVHA6.js";import"../chunk-CTCAF3YA.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{G as DIFF_GATE_CHECKS,Z as HEALTH_PHASES,e as affected,t as bottlenecks,o as byKind,a as callGraph,p as changeSurface,B as checkHealthBaseline,s as cleanupPlan,n as coChange,l as code,I as collectBaselineFindings,m as complexity,f as complexityHotspots,c as convergence,u as coupling,d as cycles,y as dataflow,i as dead,R as deepChains,g as deps,O as diffGate,C as diffImpact,D as diffImpactPartial,j as diffImpactPlan,S as docDrift,A as drift,b as extractCandidates,q as fanIn,M as fanOut,N as files,$ as health,ee as healthPhase,te as healthReportFromPhases,oe as hierarchy,re as hotspots,pe as importedBy,ae as imports,V as incompleteMigration,P as isolated,r as kindCounts,Re as localityCandidates,xe as members,v as mergeDiffImpactPartials,ne as methods,ue as outline,F as passthroughCandidates,Ce as planContext,h as rdeps,W as reactComponentDuplicates,Q as reactHookCandidates,z as reactLargeComponentPressure,ge as recentDuplicates,je as redundantReexports,le as refs,De as selfAudit,H as similar,L as similarAll,ye as similarChains,de as similarFiles,ve as similarSignatures,he as slice,T as staleAbstractions,k as stats,ce as surface,se as symbols,fe as system,x as topCoupling,U as topFanIn,_ as topFanOut,me as trace,ie as unusedImports,K as unusedParams,J as vueComponentDuplicates,X as vueComposableCandidates,Y as vueLargeViewPressure,E as wrapperCandidates,w as writeHealthBaseline};
1
+ import{a as se}from"../chunk-A3VNUGKJ.js";import{a as ye}from"../chunk-QVCCLDZI.js";import{a as de}from"../chunk-77YBOOYT.js";import{a as ve}from"../chunk-FNRPGGVI.js";import{a as Ce}from"../chunk-6UFMPECA.js";import{a as fe}from"../chunk-ICXVNWMI.js";import{a as me}from"../chunk-X7ZY6FFF.js";import{a as he}from"../chunk-FIB4JPEX.js";import{a as ce}from"../chunk-YQH353VA.js";import{a as ge}from"../chunk-MA7OVFHI.js";import{a as je}from"../chunk-ZSLT7NWQ.js";import{a as le}from"../chunk-5M4TYWVI.js";import{a as De}from"../chunk-E44ZMVNA.js";import{a as Re}from"../chunk-DJMK4DBL.js";import{a as xe}from"../chunk-NVFERV4U.js";import{a as ne}from"../chunk-5FOPAXWY.js";import{a as ue}from"../chunk-YUOAAR24.js";import{a as q,b as M,c as U,d as _}from"../chunk-CAWSSEVM.js";import{a as N}from"../chunk-B6MJ5VQV.js";import{a as Z,b as $,c as ee,d as te}from"../chunk-YUTRW57I.js";import{a as Y}from"../chunk-O3OKSF6O.js";import"../chunk-3KLLFNT4.js";import{a as z}from"../chunk-QSXQT3NE.js";import{a as X}from"../chunk-5UDFZC4D.js";import{a as J}from"../chunk-BNKE4TT5.js";import{a as W}from"../chunk-WBJZNPUT.js";import{a as Q}from"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import{a as oe}from"../chunk-47UA45TU.js";import{a as re}from"../chunk-E7KERP7E.js";import{a as ae,b as pe,c as ie}from"../chunk-7OHWPJ5N.js";import{a as V}from"../chunk-EOZIZWW4.js";import{a as K}from"../chunk-CSWZFD46.js";import{a as G,b as O}from"../chunk-4ZUJJRWT.js";import{a as R,b as g,c as h,d as D,e as v}from"../chunk-7JOTOWZO.js";import{a as j}from"../chunk-NNDYO2DX.js";import{a as C}from"../chunk-237YUOPK.js";import"../chunk-B32FX5KB.js";import{a as y}from"../chunk-SPE4YCOT.js";import{a as x}from"../chunk-ZFMPHDAT.js";import{a as d}from"../chunk-C2QSK7E7.js";import{a as c,b as u}from"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import{a as m}from"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import{a as f}from"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import{a as l}from"../chunk-7KCSELEV.js";import{c as t,d as o,e as r,f as a}from"../chunk-A7RNHUJH.js";import{d as p}from"../chunk-AYYIZ4BA.js";import{a as n}from"../chunk-AW4N6MGC.js";import{a as L}from"../chunk-OLD6PBU6.js";import{b as s}from"../chunk-C3MZZ2ZN.js";import{b as e}from"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import{a as T}from"../chunk-LPLGJ4HO.js";import{a as k}from"../chunk-ESG4HBEF.js";import{a as E}from"../chunk-DAI74TJU.js";import"../chunk-PFOCOG57.js";import{a as I}from"../chunk-YYD245WG.js";import{a as w,b as B}from"../chunk-5QJXH6ZL.js";import{a as i}from"../chunk-CJJP64OC.js";import{a as S}from"../chunk-CFL2CNIF.js";import{a as A}from"../chunk-MUULWXSJ.js";import{a as b,b as P}from"../chunk-BKDXBJDQ.js";import{a as F}from"../chunk-Z4VHYJ5U.js";import"../chunk-B75HZHUP.js";import{a as H}from"../chunk-TM6GVHA6.js";import"../chunk-CTCAF3YA.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{D as DIFF_GATE_CHECKS,Z as HEALTH_PHASES,S as affected,A as bottlenecks,b as byKind,F as callGraph,H as changeSurface,h as checkHealthBaseline,L as cleanupPlan,e as coChange,T as code,R as collectBaselineFindings,k as complexity,E as complexityHotspots,I as convergence,w as coupling,i as cycles,V as dataflow,s as dead,K as deepChains,G as deps,v as diffGate,t as diffImpact,r as diffImpactPartial,o as diffImpactPlan,p as docDrift,n as drift,l as extractCandidates,q as fanIn,M as fanOut,N as files,$ as health,ee as healthPhase,te as healthReportFromPhases,oe as hierarchy,re as hotspots,pe as importedBy,ae as imports,C as incompleteMigration,m as isolated,P as kindCounts,Re as localityCandidates,xe as members,a as mergeDiffImpactPartials,ne as methods,ue as outline,f as passthroughCandidates,Ce as planContext,O as rdeps,W as reactComponentDuplicates,Q as reactHookCandidates,z as reactLargeComponentPressure,ge as recentDuplicates,je as redundantReexports,le as refs,De as selfAudit,c as similar,u as similarAll,ye as similarChains,de as similarFiles,ve as similarSignatures,he as slice,x as staleAbstractions,d as stats,ce as surface,se as symbols,fe as system,B as topCoupling,U as topFanIn,_ as topFanOut,me as trace,ie as unusedImports,j as unusedParams,J as vueComponentDuplicates,X as vueComposableCandidates,Y as vueLargeViewPressure,y as wrapperCandidates,g as writeHealthBaseline};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-X474LKJX.js";import"../chunk-ICXVNWMI.js";import"../chunk-X7ZY6FFF.js";import"../chunk-FIB4JPEX.js";import"../chunk-YQH353VA.js";import"../chunk-3KLLFNT4.js";import"../chunk-EOZIZWW4.js";import"../chunk-4ZUJJRWT.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-ESG4HBEF.js";import"../chunk-CFL2CNIF.js";import"../chunk-Z4VHYJ5U.js";import"../chunk-B75HZHUP.js";import"../chunk-TM6GVHA6.js";import"../chunk-CTCAF3YA.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as planContext};
1
+ import{a}from"../chunk-6UFMPECA.js";import"../chunk-ICXVNWMI.js";import"../chunk-X7ZY6FFF.js";import"../chunk-FIB4JPEX.js";import"../chunk-YQH353VA.js";import"../chunk-3KLLFNT4.js";import"../chunk-EOZIZWW4.js";import"../chunk-4ZUJJRWT.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-ESG4HBEF.js";import"../chunk-CFL2CNIF.js";import"../chunk-Z4VHYJ5U.js";import"../chunk-B75HZHUP.js";import"../chunk-TM6GVHA6.js";import"../chunk-CTCAF3YA.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as planContext};
2
2
  //# sourceMappingURL=plan-context.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-UMNENNTX.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as reactComponentDuplicates};
1
+ import{a}from"../chunk-WBJZNPUT.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as reactComponentDuplicates};
2
2
  //# sourceMappingURL=react-component-duplicates.js.map
@@ -1,9 +1,10 @@
1
1
  import { S as ScipDatabase } from '../db-CTarohbZ.js';
2
+ import { F as FrontendBehaviorActionTier, a as FrontendBehaviorEvidenceClass } from '../frontend-behavior-evidence-BxKpKWUu.js';
2
3
  import 'better-sqlite3';
3
4
  import '../config-types-Bj4sh28g.js';
4
5
 
5
- type ReactHookEvidenceClass = 'domain-behavior' | 'generic-workflow-scaffolding' | 'mixed' | 'shared-abstraction';
6
- type ReactHookActionTier = 'signal' | 'support';
6
+ type ReactHookEvidenceClass = FrontendBehaviorEvidenceClass;
7
+ type ReactHookActionTier = FrontendBehaviorActionTier;
7
8
  interface ReactHookCandidateResult {
8
9
  fileA: string;
9
10
  componentA: string;
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-TO54DY4O.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as reactHookCandidates};
1
+ import{a}from"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as reactHookCandidates};
2
2
  //# sourceMappingURL=react-hook-candidates.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-7ADUXFRZ.js";import"../chunk-O4L4AB3T.js";import"../chunk-GS33KGAY.js";import"../chunk-UMNENNTX.js";import"../chunk-TO54DY4O.js";import"../chunk-PVZMPG5I.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-KRGBLZT2.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as recentDuplicates};
1
+ import{a}from"../chunk-MA7OVFHI.js";import"../chunk-5UDFZC4D.js";import"../chunk-BNKE4TT5.js";import"../chunk-WBJZNPUT.js";import"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-KRGBLZT2.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as recentDuplicates};
2
2
  //# sourceMappingURL=recent-duplicates.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-GS33KGAY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-ERHOS6AW.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as vueComponentDuplicates};
1
+ import{a}from"../chunk-BNKE4TT5.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-ERHOS6AW.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as vueComponentDuplicates};
2
2
  //# sourceMappingURL=vue-component-duplicates.js.map
@@ -1,9 +1,10 @@
1
1
  import { S as ScipDatabase } from '../db-CTarohbZ.js';
2
+ import { F as FrontendBehaviorActionTier, a as FrontendBehaviorEvidenceClass } from '../frontend-behavior-evidence-BxKpKWUu.js';
2
3
  import 'better-sqlite3';
3
4
  import '../config-types-Bj4sh28g.js';
4
5
 
5
- type VueComposableEvidenceClass = 'domain-behavior' | 'generic-workflow-scaffolding' | 'mixed' | 'shared-abstraction';
6
- type VueComposableActionTier = 'signal' | 'support';
6
+ type VueComposableEvidenceClass = FrontendBehaviorEvidenceClass;
7
+ type VueComposableActionTier = FrontendBehaviorActionTier;
7
8
  interface VueComposableCandidateResult {
8
9
  fileA: string;
9
10
  fileB: string;
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-O4L4AB3T.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-ERHOS6AW.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as vueComposableCandidates};
1
+ import{a}from"../chunk-5UDFZC4D.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-ERHOS6AW.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as vueComposableCandidates};
2
2
  //# sourceMappingURL=vue-composable-candidates.js.map
package/dist/runtime.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import{b as $,c as T,d as E}from"./chunk-NXIAHE7F.js";import{a as v}from"./chunk-UUBMFL3F.js";import{readFileSync as D,writeFileSync as A,existsSync as b,mkdirSync as _}from"fs";import{join as c,resolve as C}from"path";import{createHash as W}from"crypto";import{homedir as F}from"os";var h=".scipquery.json",M={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function L(i){let e=c(i,h);if(!b(e))return{};try{let t=D(e,"utf-8");return JSON.parse(t)}catch(t){let s=t instanceof Error?t.message:String(t);throw t instanceof SyntaxError?new Error(`invalid ${h} at ${e}: ${s}`,{cause:t}):new Error(`unable to read ${h} at ${e}: ${s}`,{cause:t})}}function P(i){return{...M,...i.watch}}function N(i,e){let t=process.env.SCIP_QUERY_CACHE_DIR;if(t)return f(t);if(e?.dbPath)return f(C(i,e.dbPath));let n=process.env.XDG_CACHE_HOME||c(F(),".cache"),r=W("sha256").update(C(i)).digest("hex").slice(0,12),o=c(n,"scip-query","projects",r);return f(o)}function m(i,e){let t=N(i,e);return{cacheDir:t,dbPath:c(t,"index.db"),indexPath:c(t,"index.scip"),metaPath:c(t,"meta.json")}}function O(i,e){let t=c(i,h);return b(t)||A(t,JSON.stringify({languages:e,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
2
- `),t}function f(i){return _(i,{recursive:!0}),i}import{watch as q}from"fs";import{existsSync as R,renameSync as I}from"fs";import{join as U,relative as B}from"path";import{fork as G}from"child_process";import H from"ignore";var y=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(e){this.projectRoot=e.projectRoot,this.watchConfig=P(e.config),this.indexPaths=m(e.projectRoot,e.config),this.languages=e.languages,this.pnpmWorkspaces=e.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=e.onStatus??(()=>{}),this.onReindexComplete=e.onReindexComplete??(()=>{}),this.onError=e.onError??(t=>console.error(t.message)),this.gitignoreFilter=v(e.projectRoot),this.extraIgnore=H(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let e=q(this.projectRoot,{recursive:!0},(t,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(e)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let e of this.fsWatchers)e.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(e){let t=B(this.projectRoot,U(this.projectRoot,e));if(this.gitignoreFilter.isIgnored(t)||this.extraIgnore.ignores(t)||e.endsWith("index.db")||e.endsWith("index.scip")||e.endsWith("index.db.tmp")||e.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let s=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:s}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let e=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&e<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-e;this.dirty=!0;let n=Date.now()+s;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},s);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let t=Date.now();this.setStatus({state:"indexing",startedAt:t}),this.runReindex().then(s=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(s),this.dirty&&!this.stopped){let n=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(s=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(s instanceof Error?s:new Error(String(s))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((e,t)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",r=X(this.indexPaths.indexPath),o=G(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:r,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});o.on("exit",d=>{if(d===0)try{R(n)&&I(n,this.indexPaths.dbPath),R(r)&&I(r,this.indexPaths.indexPath),e(Date.now()-s)}catch(a){t(new Error(`Atomic swap failed: ${a}`))}else t(new Error(`Reindex worker exited with code ${d}`))}),o.on("error",t)})}setStatus(e){this.status=e,this.onStatus(e)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function X(i){return i.endsWith(".scip")?i.slice(0,-5)+".tmp.scip":i+".tmp.scip"}import{existsSync as x,mkdirSync as J,symlinkSync as V,readlinkSync as K,unlinkSync as Q}from"fs";import{join as p,dirname as j,resolve as w}from"path";import{homedir as S,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",ee=["scip-query","scip-query-setup","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function te(i={}){let e=i.quiet?()=>{}:console.log,t=z(import.meta.url),s=w(j(t),"..","skills"),n=[p(S(),".claude","skills"),p(S(),".codex","skills"),p(S(),".agents","skills")],r={installed:[],skipped:[],alreadyLinked:[]};for(let o of n){let d=j(o);if(!x(d))continue;J(o,{recursive:!0});let a=ie(o);for(let l of ee){let g=p(s,l),u=p(o,l);if(!x(g)){r.skipped.push(`${a}/${l}`);continue}if(x(u)){try{let k=K(u);if(w(k)===w(g)){r.alreadyLinked.push(`${a}/${l}`),e(` ok: ${l} \u2192 ${a} (already linked)`);continue}}catch{r.skipped.push(`${a}/${l}`),e(` skip: ${l} \u2192 ${a} (exists, not a symlink)`);continue}Q(u)}V(g,u,Z?"junction":"dir"),r.installed.push(`${a}/${l}`),e(` done: ${l} \u2192 ${a}`)}}return r}function ie(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{y as Watcher,T as getScipVersion,O as initProjectConfig,te as installSkills,$ as isScipInstalled,L as loadProjectConfig,E as printScipInstallInstructions,m as resolveIndexPaths};
2
+ `),t}function f(i){return _(i,{recursive:!0}),i}import{watch as U}from"fs";import{existsSync as R,renameSync as k}from"fs";import{join as q,relative as H}from"path";import{fork as B}from"child_process";import G from"ignore";var y=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(e){this.projectRoot=e.projectRoot,this.watchConfig=P(e.config),this.indexPaths=m(e.projectRoot,e.config),this.languages=e.languages,this.pnpmWorkspaces=e.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=e.onStatus??(()=>{}),this.onReindexComplete=e.onReindexComplete??(()=>{}),this.onError=e.onError??(t=>console.error(t.message)),this.gitignoreFilter=v(e.projectRoot),this.extraIgnore=G(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let e=U(this.projectRoot,{recursive:!0},(t,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(e)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let e of this.fsWatchers)e.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(e){let t=H(this.projectRoot,q(this.projectRoot,e));if(this.gitignoreFilter.isIgnored(t)||this.extraIgnore.ignores(t)||e.endsWith("index.db")||e.endsWith("index.scip")||e.endsWith("index.db.tmp")||e.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let s=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:s}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let e=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&e<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-e;this.dirty=!0;let n=Date.now()+s;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},s);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let t=Date.now();this.setStatus({state:"indexing",startedAt:t}),this.runReindex().then(s=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(s),this.dirty&&!this.stopped){let n=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(s=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(s instanceof Error?s:new Error(String(s))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((e,t)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",r=X(this.indexPaths.indexPath),o=B(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:r,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});o.on("exit",d=>{if(d===0)try{R(n)&&k(n,this.indexPaths.dbPath),R(r)&&k(r,this.indexPaths.indexPath),e(Date.now()-s)}catch(a){t(new Error(`Atomic swap failed: ${a}`))}else t(new Error(`Reindex worker exited with code ${d}`))}),o.on("error",t)})}setStatus(e){this.status=e,this.onStatus(e)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function X(i){return i.endsWith(".scip")?i.slice(0,-5)+".tmp.scip":i+".tmp.scip"}import{existsSync as x,mkdirSync as J,symlinkSync as V,readlinkSync as K,unlinkSync as Q}from"fs";import{join as p,dirname as I,resolve as S}from"path";import{homedir as w,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",ee=["scip-query","scip-query-setup","scip-adoption","scip-health-audit","scip-health-improve","scip-api-impact","concrete-plan","scip-ai-cleanup","scip-debug","scip-explore","scip-triage-issue","scip-diagram","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function te(i={}){let e=i.quiet?()=>{}:console.log,t=z(import.meta.url),s=S(I(t),"..","skills"),n=[p(w(),".claude","skills"),p(w(),".codex","skills"),p(w(),".agents","skills")],r={installed:[],skipped:[],alreadyLinked:[]};for(let o of n){let d=I(o);if(!x(d))continue;J(o,{recursive:!0});let a=ie(o);for(let l of ee){let g=p(s,l),u=p(o,l);if(!x(g)){r.skipped.push(`${a}/${l}`);continue}if(x(u)){try{let j=K(u);if(S(j)===S(g)){r.alreadyLinked.push(`${a}/${l}`),e(` ok: ${l} \u2192 ${a} (already linked)`);continue}}catch{r.skipped.push(`${a}/${l}`),e(` skip: ${l} \u2192 ${a} (exists, not a symlink)`);continue}Q(u)}V(g,u,Z?"junction":"dir"),r.installed.push(`${a}/${l}`),e(` done: ${l} \u2192 ${a}`)}}return r}function ie(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{y as Watcher,T as getScipVersion,O as initProjectConfig,te as installSkills,$ as isScipInstalled,L as loadProjectConfig,E as printScipInstallInstructions,m as resolveIndexPaths};
3
3
  //# sourceMappingURL=runtime.js.map
@@ -6,6 +6,43 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
6
6
 
7
7
  ---
8
8
 
9
+ ## Workflow 0: Bootstrap scip-query in a project
10
+
11
+ **Goal:** Make a repository ready for scip-query-backed agent work before cleanup or implementation begins.
12
+
13
+ ### Steps
14
+
15
+ 1. **Run setup**
16
+ ```bash
17
+ scip-query setup-hooks --json
18
+ scip-query setup --json
19
+ ```
20
+ Returns: project-local hook install state, detected languages, indexer readiness, remediation attempts, index result, capability summary, smoke tests, health score, issue list, health dossier paths, and setup verdict.
21
+
22
+ 2. **Resolve blockers**
23
+ ```bash
24
+ scip-query check-deps
25
+ scip-query doctor
26
+ scip-query capability-matrix --json
27
+ ```
28
+ Missing indexers or toolchains are blockers, not clean results. Fix what setup can prove, then rerun setup or reindex.
29
+
30
+ 3. **Start health follow-through**
31
+ ```bash
32
+ scip-query health --json --full
33
+ scip-query diff-gate --json
34
+ ```
35
+ Before cleanup, tell the user the health score, confirmed items, unavailable checks, and recommended first cleanup batch. Use `scip-health-audit` for confirmation and `scip-health-improve` when the user wants autonomous score improvement.
36
+
37
+ ### What you should know after this workflow
38
+
39
+ - Whether the index is current and usable
40
+ - Which capabilities are available, partial, or unavailable
41
+ - Where the health dossier was written
42
+ - What needs to be fixed before the repo can be called ready
43
+
44
+ ---
45
+
9
46
  ## Workflow 1: Understand a system before making changes
10
47
 
11
48
  **Goal:** Build a complete mental model of a module or feature area so you can write a precise implementation plan with no ambiguity about what code exists, what it does, and what depends on it.
@@ -88,7 +125,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
88
125
  4. **Check blast radius before editing**
89
126
  ```bash
90
127
  scip-query change-surface <file>
91
- scip-query diff-impact
128
+ scip-query diff-impact --json
92
129
  ```
93
130
  Identify which symbols in your change set have many external consumers and which downstream files will be affected.
94
131
 
@@ -101,7 +138,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
101
138
 
102
139
  6. **After making changes, verify impact**
103
140
  ```bash
104
- scip-query diff-impact
141
+ scip-query diff-impact --json
105
142
  scip-query drift
106
143
  ```
107
144
  Shows every symbol affected by your git diff, every consumer file impacted, and whether the change introduced new structural drift.
@@ -297,7 +334,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
297
334
 
298
335
  1. **Compute diff impact**
299
336
  ```bash
300
- scip-query diff-impact
337
+ scip-query diff-impact --json
301
338
  ```
302
339
  Shows: changed files, changed symbols with fan-in counts, and affected consumer files.
303
340
 
@@ -326,7 +363,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
326
363
  | See what a function calls and who calls it | `call-graph <symbol>` |
327
364
  | Check blast radius of a change | `affected <symbol>` |
328
365
  | Get a pre-change briefing | `change-surface <file>` |
329
- | See impact of my git changes | `diff-impact` |
366
+ | See impact of my git changes | `diff-impact --json` |
330
367
  | Find dead code to delete | `dead --min-loc 10 --skip-barrels` |
331
368
  | Find duplicate functions | `similar --min-similarity 0.5` |
332
369
  | Find same-shape functions | `similar-signatures --min-loc 5` |
@@ -347,7 +384,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
347
384
  - **Always reindex before analysis** if the codebase has changed significantly: `scip-query reindex`
348
385
  - **Use `--json` on `health`** for programmatic consumption — parse the JSON to make decisions
349
386
  - **Run `change-surface` before every file modification** — it takes <1 second and prevents surprises
350
- - **Run `diff-impact` before committing** — catches unexpected blast radius across downstream consumers
387
+ - **Run `diff-impact --json` before committing** — catches unexpected blast radius across downstream consumers
351
388
  - **Use `convergence` after `similar`** — `similar` finds the problem, `convergence` gives the solution
352
389
  - **Start cleanup with `health`** — it prioritizes for you so you don't have to decide what to fix first
353
390
  - **Scope commands with `-s`** — most commands accept `--scope <path>` to limit analysis to a specific module. Use this on large codebases to keep results focused.
@@ -207,13 +207,13 @@ breaks transitively, or which files historically move together with it — then
207
207
 
208
208
  **The detectors:** `plan-context` (one command bundling definitions,
209
209
  references, call graph, blast radius, churn, and co-change partners — the
210
- pre-edit briefing), `change-surface`, `affected`, `diff-impact`.
210
+ pre-edit briefing), `change-surface`, `affected`, `diff-impact --json`.
211
211
 
212
212
  **Use it:**
213
213
 
214
214
  ```bash
215
215
  scip-query plan-context <symbol-or-file> # before the edit
216
- scip-query diff-impact # after the edit
216
+ scip-query diff-impact --json # after the edit
217
217
  ```
218
218
 
219
219
  The `concrete-plan` skill enforces this end-to-end: every step in a plan must
@@ -244,35 +244,42 @@ scip-query health --baseline # in CI
244
244
 
245
245
  The detectors only help if they run. Three layers, in increasing strength:
246
246
 
247
- **1. Skills (routing).** Installing scip-query symlinks nine skills into
248
- `~/.agents/skills/`, `~/.claude/skills/`, and `~/.codex/skills/` — they update
249
- automatically with the package. The `scip-query` router skill triggers on any
250
- codebase work and dispatches to the right specialist (explore → plan →
251
- implement verify clean up), carrying the non-negotiables: similarity check
252
- before new helpers, `incomplete-migration` after extractions, `diff-gate`
253
- before done.
247
+ **1. Skills and lifecycle hooks (routing).** Installing scip-query symlinks the
248
+ bundled skills into `~/.agents/skills/`, `~/.claude/skills/`, and
249
+ `~/.codex/skills/` — they update automatically with the package. Project setup
250
+ writes reviewable repo-local hooks to `.codex/hooks.json` and
251
+ `.claude/settings.json`, unless `SCIP_QUERY_SKIP_HOOK_INSTALL=1` is set. The
252
+ hooks add scip-query context at session start, route prompts toward the right
253
+ specialist, and run a safe Stop hook wrapper around the diff gate only for that
254
+ repository. The Stop hook warns by default instead of blocking the agent; set
255
+ `SCIP_QUERY_STOP_HOOK_MODE=feedback` to ask the agent to continue without a
256
+ hook error, or `SCIP_QUERY_STOP_HOOK_MODE=block` to enforce the gate. Run
257
+ `scip-query setup-hooks --json` to repair the current repo's hooks.
254
258
 
255
- **2. Project guidance (instructions).** Run once per project:
259
+ **2. Project setup and guidance.** Run once per project:
256
260
 
257
261
  ```bash
258
- scip-query setup-agent
262
+ scip-query setup --json
259
263
  ```
260
264
 
261
- Seeds a managed block in `AGENTS.md` (the cross-tool standard Codex, Cursor,
262
- Gemini, and others read) pointing at the router skill and the gate — plus an
263
- `@AGENTS.md` import shim in `CLAUDE.md`, because Claude Code doesn't read
264
- AGENTS.md natively. Only the marked block is ever managed; your content is
265
- never touched, and an existing `@AGENTS.md` bridge is left alone.
265
+ Setup installs or refreshes skills, configures project-local hooks, checks indexer readiness, attempts
266
+ configured indexer remediation, refreshes the index, smoke-tests representative
267
+ commands, writes `docs/scip-query/health-dossier.md` and `.json`, reports the
268
+ health score and items needing attention, and seeds a managed block in
269
+ `AGENTS.md` plus a `CLAUDE.md` import shim.
270
+
271
+ After setup, use `scip-health-audit` to confirm raw signals and
272
+ `scip-health-improve` when the user wants the agent to fix the worst confirmed
273
+ items until the health score is as high as reasonably possible.
266
274
 
267
275
  **3. The gate (enforcement).**
268
276
 
269
277
  ```bash
270
- scip-query diff-gate # one command, every check above, scoped to the diff, exit 1 on findings
278
+ scip-query diff-gate --json # one command, every check above, scoped to the diff, exit 1 on findings
271
279
  scip-query setup-agent --git-hook # pre-commit backstop: fires whoever wrote the diff
272
280
  ```
273
281
 
274
282
  Every finding ships with a remediation an agent can act on without human
275
- triage. For in-session enforcement, `diff-gate --hook` speaks the turn-end
276
- hook contract shared by Claude Code, Codex, and Gemini CLI (blocks the agent's
277
- "done" and feeds the findings back as its next prompt) — wire it into your
278
- tool's hook config if you want the gate to be unskippable.
283
+ triage. The installed Codex/Claude Stop hook uses the same diff-gate evidence,
284
+ warns by default, and no-ops outside indexed scip-query workspaces, so global
285
+ hook install stays safe for ordinary projects.
@@ -95,7 +95,7 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
95
95
  | `co-change [file]` | Files that change together in git history without a dependency edge — hidden coupling candidates | `--min-together <n>`<br>`-n, --limit <n>`<br>`--all`<br>`--full`<br>`--json` |
96
96
  | `diff-gate` | Gate the current diff: echo candidates, incomplete migrations, missing co-change partners, uncited doc updates, unused params, new dead symbols; exit 1 on findings | `--base <ref>`<br>`--min-together <n>`<br>`--max-echo-checks <n>`<br>`--max-helpers <n>`<br>`--skip <check>`<br>`--hook`<br>`--json` |
97
97
  | `incomplete-migration` | Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain | `--base <ref>`<br>`--min-containment <n>`<br>`--max-helpers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
98
- | `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref>` |
98
+ | `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref>`<br>`--json` |
99
99
 
100
100
  ### Planning
101
101
 
@@ -115,7 +115,8 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
115
115
 
116
116
  | Command | Description | Options |
117
117
  |---|---|---|
118
- | `install-skills` | Install skills (scip-query, scip-query-setup, concrete-plan, scip-ai-cleanup, scip-explore, scip-debloat, scip-doc-reconcile, scip-directory-architecture, scip-maintainability, scip-react-maintainability, scip-vue-maintainability, scip-verify, scip-language-playbook) into Claude Code, Codex, and shared agent roots | - |
118
+ | `install-skills` | Install skills (scip-query, scip-query-setup, scip-adoption, scip-health-audit, scip-health-improve, scip-api-impact, concrete-plan, scip-ai-cleanup, scip-debug, scip-explore, scip-triage-issue, scip-diagram, scip-debloat, scip-doc-reconcile, scip-directory-architecture, scip-maintainability, scip-react-maintainability, scip-vue-maintainability, scip-verify, scip-language-playbook) into Claude Code, Codex, and shared agent roots | - |
119
+ | `setup-hooks` | Install or refresh project-local Codex and Claude Code lifecycle hooks | `--json` |
119
120
  | `check-deps` | Check whether scip-query and the detected language indexers are actually runnable | - |
120
121
  | `capabilities` | Report which evidence and verification capabilities are available in this project | `--json` |
121
122
  | `capability-matrix` | Report the evidence and verification capability matrix by language | `--json` |
@@ -123,6 +124,7 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
123
124
  | `config-validate` | Validate .scipquery.json, including structured suppressions and declared coupling groups | `--json` |
124
125
  | `suppress <id>` | Record an accepted finding in .scipquery.json with a required reason | `--reason <text>`<br>`--check <check>`<br>`--file <path>`<br>`--expires-at <iso>`<br>`--json` |
125
126
  | `doctor` | Diagnose config, index freshness, dependency readiness, and project capabilities | `--json` |
127
+ | `setup` | Bootstrap this project: install agent skills, refresh the index, verify capabilities, and report health | `--git-hook`<br>`--json` |
126
128
  | `setup-agent` | Seed agent guidance for this project: AGENTS.md/CLAUDE.md block pointing agents at the scip-query skills and diff gate, plus an optional git pre-commit backstop | `--git-hook` |
127
129
  | `setup-ci` | Write a GitHub Actions workflow that runs scip-query reindex and diff-gate on pull requests | `--force`<br>`--dry-run` |
128
130
  | `watch` | Watch for file changes and reindex automatically | `--debounce <ms>`<br>`--cooldown <ms>` |
@@ -20,7 +20,7 @@ The action tiers are:
20
20
 
21
21
  ## Current Surfaces
22
22
 
23
- The published query surface lives in `src/queries/public-query-entries.ts`. The CLI command order and families live in `src/runtime/commands/query-command-specs.ts`. The composite health score runs the phases listed in `HEALTH_PHASES` in `src/queries/health/health.ts`. The diff gate runs the checks listed in `DIFF_GATE_CHECKS` in `src/queries/impact/diff-gate.ts`.
23
+ The published query surface and private query-helper manifest live in `src/queries/public-query-entries.ts`. The CLI command order and families live in `src/runtime/commands/query-command-specs.ts`. The composite health score runs the phases listed in `HEALTH_PHASES` in `src/queries/health/health.ts`. The diff gate runs the checks listed in `DIFF_GATE_CHECKS` in `src/queries/impact/diff-gate.ts`, with doc-reference and baseline policy helpers kept private to the query tree.
24
24
 
25
25
  `health --json` on this repository currently reports:
26
26
 
@@ -160,3 +160,7 @@ Command shape:
160
160
  - Action tier: contextual signal. It guides placement; it should not force moves without architecture judgment.
161
161
 
162
162
  This should pair with `react-large-component-pressure`, `vue-large-view-pressure`, `extract-candidates`, and `incomplete-migration` so agents do not reduce size scores by dumping extracted pieces into flat local directories.
163
+
164
+ ## 2026-06-23 Citation Refresh
165
+
166
+ The maintainability-register completion slice rechecked the command and diff-gate guide references above. `src/runtime/commands/query-command-specs.ts` still owns the public query order, now also exporting `orderedQueryCommandDescriptors` so CLI registration can derive from that order. `src/queries/impact/diff-gate.ts` still owns `DIFF_GATE_CHECKS`; the slice only centralized finding emission through a local recorder and did not change the listed check family.
@@ -260,3 +260,11 @@ The first concrete run was intentionally narrow:
260
260
  6. Produce one calibration memo that says whether the current direct/signal/support split still holds.
261
261
 
262
262
  That slice tested the ledger, the protocol, the review burden, and the score model before the later completion passes covered the remaining analyzer families.
263
+
264
+ ## 2026-06-23 Citation Refresh
265
+
266
+ The maintainability-register completion slice rechecked the ledger's command-surface and diff-gate citations. `queryCommandOrder` remains the canonical public query order, and `orderedQueryCommandDescriptors` is now derived from that list for CLI registration. `diffGate()` still runs the same check families recorded in the ledger; finding construction now goes through a local recorder that derives the suppression hint consistently.
267
+
268
+ ## 2026-06-23 Current Sweep Citation Refresh
269
+
270
+ The current maintainability sweep rechecked the `diff-gate.ts` citation again after doc-reference and baseline policy helpers moved into private query modules. The ledger remains accurate because `diffGate()` and `DIFF_GATE_CHECKS` still live in `src/queries/impact/diff-gate.ts`; only helper policy bodies moved behind the same entry point.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scip-query",
3
- "version": "0.10.3",
3
+ "version": "0.10.4",
4
4
  "description": "Evidence and verification for AI coding agents: map code, reuse concepts, finish migrations, and gate diffs.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,8 @@
13
13
  "dist/**/*.d.ts",
14
14
  "docs/assets/**/*",
15
15
  "docs/*.md",
16
- "skills/**/SKILL.md"
16
+ "skills/**/SKILL.md",
17
+ "skills/**/agents/*.yaml"
17
18
  ],
18
19
  "sideEffects": false,
19
20
  "exports": {
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: concrete-plan
3
3
  description: Build concrete, checklist-driven implementation plans using scip-query for every code reference. Plans are stress-tested against 11 engineering principles before shipping.
4
- allowed-tools: [Bash, Write, Edit, Glob, Agent, TaskCreate, TaskUpdate, TaskGet, TaskList]
5
- keywords: [plan, design, architecture, implementation, checklist, blueprint, proposal, rfc, spec]
6
4
  ---
7
5
 
8
6
  # Concrete Implementation Planning
@@ -114,7 +112,7 @@ This skill deliberately excludes `Grep` and `Read` from its allowed tools. This
114
112
  | Reverse dependencies | `scip-query rdeps <file>` |
115
113
  | **Full transitive blast radius** | `scip-query affected <symbol>` |
116
114
  | **Pre-change risk briefing** | `scip-query change-surface <file>` |
117
- | **Git diff impact analysis** | `scip-query diff-impact` |
115
+ | **Git diff impact analysis** | `scip-query diff-impact --json` |
118
116
  | **Complexity analysis** | `scip-query complexity <symbol>` (branches, cyclomatic, fan-in/out) |
119
117
  | **Dataflow: what feeds in/out** | `scip-query dataflow <symbol>` (producers, consumers, usage sites) |
120
118
  | **Backward slice (what affects this)** | `scip-query slice <symbol>` |
@@ -296,7 +294,7 @@ After stress-testing is complete:
296
294
  3. **Fix drift**: Update any stale references.
297
295
  4. **Check execution order**: No phase depends on a later phase. No step within a phase depends on a later step.
298
296
  5. **Check validation coverage**: Every behavior-changing step should have a corresponding validation step. Flag gaps in tests, manual checks, or runtime verification.
299
- 6. **Run diff-impact**: `scip-query diff-impact` to verify the blast radius matches what the plan predicted.
297
+ 6. **Run diff-impact**: `scip-query diff-impact --json` to verify the blast radius matches what the plan predicted.
300
298
 
301
299
  ---
302
300
 
@@ -327,7 +325,7 @@ Dependencies & Impact:
327
325
  - `scip-query rdeps <file>` — files that depend on this file
328
326
  - `scip-query affected <symbol>` — transitive closure of breakage
329
327
  - `scip-query change-surface <file>` — pre-change risk briefing
330
- - `scip-query diff-impact` — git diff impact analysis
328
+ - `scip-query diff-impact --json` — git diff impact analysis
331
329
 
332
330
  Analysis:
333
331
  - `scip-query complexity <symbol>` — branches, cyclomatic estimate, fan-in/out
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Concrete Plan"
3
+ short_description: "SCIP-grounded implementation plans"
4
+ default_prompt: "Use $concrete-plan to create a SCIP-grounded implementation plan for this change."