@su-record/vibe 3.2.61 → 3.2.64

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 (69) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CLAUDE.md +32 -5
  4. package/dist/tools/bench/benchCompare.d.ts +78 -0
  5. package/dist/tools/bench/benchCompare.d.ts.map +1 -0
  6. package/dist/tools/bench/benchCompare.js +113 -0
  7. package/dist/tools/bench/benchCompare.js.map +1 -0
  8. package/dist/tools/bench/benchDefinition.d.ts +37 -0
  9. package/dist/tools/bench/benchDefinition.d.ts.map +1 -0
  10. package/dist/tools/bench/benchDefinition.js +69 -0
  11. package/dist/tools/bench/benchDefinition.js.map +1 -0
  12. package/dist/tools/bench/benchReport.d.ts +16 -0
  13. package/dist/tools/bench/benchReport.d.ts.map +1 -0
  14. package/dist/tools/bench/benchReport.js +64 -0
  15. package/dist/tools/bench/benchReport.js.map +1 -0
  16. package/dist/tools/bench/index.d.ts +10 -0
  17. package/dist/tools/bench/index.d.ts.map +1 -0
  18. package/dist/tools/bench/index.js +7 -0
  19. package/dist/tools/bench/index.js.map +1 -0
  20. package/dist/tools/contract/agentContract.d.ts +86 -0
  21. package/dist/tools/contract/agentContract.d.ts.map +1 -0
  22. package/dist/tools/contract/agentContract.js +140 -0
  23. package/dist/tools/contract/agentContract.js.map +1 -0
  24. package/dist/tools/contract/index.d.ts +8 -0
  25. package/dist/tools/contract/index.d.ts.map +1 -0
  26. package/dist/tools/contract/index.js +6 -0
  27. package/dist/tools/contract/index.js.map +1 -0
  28. package/dist/tools/contract/reverseDrift.d.ts +71 -0
  29. package/dist/tools/contract/reverseDrift.d.ts.map +1 -0
  30. package/dist/tools/contract/reverseDrift.js +136 -0
  31. package/dist/tools/contract/reverseDrift.js.map +1 -0
  32. package/dist/tools/docs/agentsMd.d.ts +45 -0
  33. package/dist/tools/docs/agentsMd.d.ts.map +1 -0
  34. package/dist/tools/docs/agentsMd.js +51 -0
  35. package/dist/tools/docs/agentsMd.js.map +1 -0
  36. package/dist/tools/docs/cacheSurface.d.ts +37 -0
  37. package/dist/tools/docs/cacheSurface.d.ts.map +1 -0
  38. package/dist/tools/docs/cacheSurface.js +98 -0
  39. package/dist/tools/docs/cacheSurface.js.map +1 -0
  40. package/dist/tools/index.d.ts +6 -0
  41. package/dist/tools/index.d.ts.map +1 -1
  42. package/dist/tools/index.js +6 -0
  43. package/dist/tools/index.js.map +1 -1
  44. package/dist/tools/spec/index.d.ts +2 -0
  45. package/dist/tools/spec/index.d.ts.map +1 -1
  46. package/dist/tools/spec/index.js +2 -0
  47. package/dist/tools/spec/index.js.map +1 -1
  48. package/dist/tools/spec/specLifecycle.d.ts +40 -0
  49. package/dist/tools/spec/specLifecycle.d.ts.map +1 -0
  50. package/dist/tools/spec/specLifecycle.js +147 -0
  51. package/dist/tools/spec/specLifecycle.js.map +1 -0
  52. package/dist/tools/spec/validateSpecDocument.d.ts.map +1 -1
  53. package/dist/tools/spec/validateSpecDocument.js +13 -0
  54. package/dist/tools/spec/validateSpecDocument.js.map +1 -1
  55. package/hooks/scripts/code-check.js +7 -0
  56. package/hooks/scripts/lib/ephemeral-lane.js +106 -0
  57. package/hooks/scripts/lib/iteration-cost.js +178 -0
  58. package/hooks/scripts/lib/loop-ledger.js +38 -5
  59. package/hooks/scripts/loop-ledger.js +9 -1
  60. package/hooks/scripts/pre-tool-guard.js +16 -0
  61. package/hooks/scripts/step-counter.js +29 -0
  62. package/package.json +7 -3
  63. package/skills/vibe.contract/SKILL.md +114 -1
  64. package/skills/vibe.docs/references/agent.md +4 -0
  65. package/skills/vibe.loop/SKILL.md +47 -1
  66. package/skills/vibe.spec/SKILL.md +2 -1
  67. package/vibe/rules/loop-contract.md +25 -5
  68. package/vibe/rules/prefix-cache-surface.md +98 -0
  69. package/vibe/templates/spec-template.md +31 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheSurface.js","sourceRoot":"","sources":["../../../src/tools/docs/cacheSurface.ts"],"names":[],"mappings":"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"}
@@ -72,4 +72,10 @@ export type { DispatchSignals, ResumeState, StakesSignals, UrlKind, AttachmentKi
72
72
  export { evaluateCostGate, formatCostGate } from './dispatch/index.js';
73
73
  export type { CostOperation, CostGateConfig, CostGateDecision, } from './dispatch/index.js';
74
74
  export type { ParsedLoopDefinition, LoopValidationResult, LoopTrigger, LoopVerify, LoopIsolation, LoopStatus, } from './loop/index.js';
75
+ export { REVERSE_DRIFT_KINDS, isReverseDriftKind, classifyReverseDrift, summarizeReverseDrift, formatReverseReport, formatReverseInboxLines, } from './contract/index.js';
76
+ export type { ReverseDriftKind, ReverseDriftSeverity, ReverseDriftClassification, ReverseDriftFinding, ReverseDriftSummary, ReverseReportInput, } from './contract/index.js';
77
+ export { validateBenchDefinition, DEFAULT_MIN_RUNS_PER_ARM, summarizeArm, compareArms, formatBenchReport, } from './bench/index.js';
78
+ export type { BenchArm, BenchDefinition, BenchFinding, BenchFindingSeverity, BenchValidationResult, ArmSummary, BenchComparison, BenchExclusion, BenchMetric, BenchRange, BenchRun, BenchVerdict, BenchReportInput, } from './bench/index.js';
79
+ export { parseAgentContract, validateAgentContract, checkAgentToolLog, } from './contract/index.js';
80
+ export type { AgentContract, AgentContractCheck, AgentContractFinding, AgentContractFindingSeverity, AgentContractValidation, AgentToolCall, AgentViolation, AgentViolationKind, } from './contract/index.js';
75
81
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -85,4 +85,10 @@ export { validateSpecDocument, formatSpecValidation, featureSlugFromPath, } from
85
85
  // 디스패처 결정론 신호 — 파일 존재·URL 도메인·첨부 확장자는 모델이 아니라 코드가 판정한다
86
86
  export { collectDispatchSignals, detectResumeState, detectStakesSignals, classifyUrl, classifyAttachment, } from './dispatch/index.js';
87
87
  export { evaluateCostGate, formatCostGate } from './dispatch/index.js';
88
+ // Contract tools — 역방향 계약 드리프트(구현 → SPEC)의 등급·목적지 고정
89
+ export { REVERSE_DRIFT_KINDS, isReverseDriftKind, classifyReverseDrift, summarizeReverseDrift, formatReverseReport, formatReverseInboxLines, } from './contract/index.js';
90
+ // Bench tools — 루프 설정 자기 대조. 판정 불가를 코드가 낸다 (§3.5)
91
+ export { validateBenchDefinition, DEFAULT_MIN_RUNS_PER_ARM, summarizeArm, compareArms, formatBenchReport, } from './bench/index.js';
92
+ // Agent contract — 런타임 게이트를 빌드타임에 생성한다 (판정 대상은 도구 호출 로그)
93
+ export { parseAgentContract, validateAgentContract, checkAgentToolLog, } from './contract/index.js';
88
94
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAkBnG,iBAAiB;AAEjB,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,oBAAoB;AACpB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAahC,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,mCAAmC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,4BAA4B;AAC5B,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAerC,oBAAoB;AACpB,OAAO;AACL,iBAAiB;AACjB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB;AAChB,aAAa;AACb,QAAQ,EACR,YAAY;AACZ,iBAAiB;AACjB,YAAY;AACZ,4BAA4B;AAC5B,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB;AACpB,sBAAsB;AACtB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AA0BzB,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAQvE,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAMpF,2BAA2B;AAC3B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAQzC,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAUhE,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,EACX,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAS1C,iCAAiC;AACjC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,uCAAuC,CAAC;AAS/C,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAQzF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAO9E,uDAAuD;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAMtE,qBAAqB;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,uDAAuD;AACvD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,6 @@ export { generateTraceabilityMatrix, formatMatrixAsMarkdown, formatMatrixAsHtml
13
13
  export type { TraceItem, TraceabilityMatrix, TraceSummary, TraceMatrixOptions } from './traceabilityMatrix.js';
14
14
  export { validateSpecDocument, formatSpecValidation, featureSlugFromPath, } from './validateSpecDocument.js';
15
15
  export type { SpecValidationResult, SpecFinding, SpecFindingSeverity, } from './validateSpecDocument.js';
16
+ export { SPEC_STATUSES, SPEC_CLASSES, ANCHOR_REQUIRED_CLASSES, parseSpecLifecycle, checkSpecLifecycle, anchorsRequired, isLifecycleExempt, } from './specLifecycle.js';
17
+ export type { SpecStatus, SpecClass, SpecLifecycleHeader, LifecycleFinding, } from './specLifecycle.js';
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/spec/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,QAAQ,EACR,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,oBAAoB,EACpB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/spec/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,QAAQ,EACR,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,oBAAoB,EACpB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACf,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,4BAA4B,EAC5B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
@@ -14,4 +14,6 @@ export { compileExecutionPacket, getHarnessProfile, validateExecutionPacket, wri
14
14
  export { generateTraceabilityMatrix, formatMatrixAsMarkdown, formatMatrixAsHtml } from './traceabilityMatrix.js';
15
15
  // SPEC Code Guard — 산출물이 하류(run/verify)로 넘어가기 전 노드 단위 검사
16
16
  export { validateSpecDocument, formatSpecValidation, featureSlugFromPath, } from './validateSpecDocument.js';
17
+ // SPEC lifecycle — 닫힌 Status/Class 집합과 Anchors 규율 (CI 게이트가 같은 정의를 import 한다)
18
+ export { SPEC_STATUSES, SPEC_CLASSES, ANCHOR_REQUIRED_CLASSES, parseSpecLifecycle, checkSpecLifecycle, anchorsRequired, isLifecycleExempt, } from './specLifecycle.js';
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/spec/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iBAAiB;AACjB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,aAAa;AACb,OAAO,EACL,QAAQ,EACR,YAAY,EACb,MAAM,gBAAgB,CAAC;AAOxB,iBAAiB;AACjB,OAAO,EACL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAM5B,4BAA4B;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAe9B,sBAAsB;AACtB,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAQjC,yDAAyD;AACzD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/spec/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iBAAiB;AACjB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,aAAa;AACb,OAAO,EACL,QAAQ,EACR,YAAY,EACb,MAAM,gBAAgB,CAAC;AAOxB,iBAAiB;AACjB,OAAO,EACL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAM5B,4BAA4B;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAe9B,sBAAsB;AACtB,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAQjC,yDAAyD;AACzD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAOnC,6EAA6E;AAC7E,OAAO,EACL,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /** SPEC 이 가질 수 있는 lifecycle 상태 — 이 집합 밖의 값은 게이트가 거부한다 */
2
+ export declare const SPEC_STATUSES: readonly ["DRAFT", "APPROVED", "VERIFIED", "SUPERSEDED", "REJECTED"];
3
+ export type SpecStatus = (typeof SPEC_STATUSES)[number];
4
+ /** SPEC 의 변경 종류 — dsh Agent Note 의 닫힌 6종을 그대로 쓴다 */
5
+ export declare const SPEC_CLASSES: readonly ["feature", "bug-fix", "simplification", "architecture", "process", "testing"];
6
+ export type SpecClass = (typeof SPEC_CLASSES)[number];
7
+ /**
8
+ * Anchors 를 요구하는 Class.
9
+ *
10
+ * 코드 경로에 실제로 안착하는 종류만 넣는다. process/testing/simplification 은
11
+ * 규약·워크플로 변경이라 고정할 경로가 없는 경우가 많고, 억지로 요구하면 통과 의식이 된다.
12
+ */
13
+ export declare const ANCHOR_REQUIRED_CLASSES: readonly SpecClass[];
14
+ export interface SpecLifecycleHeader {
15
+ status?: string;
16
+ specClass?: string;
17
+ /** `## Anchors` 절에서 뽑은 경로. 절이 없으면 undefined (빈 배열과 구분한다) */
18
+ anchors?: string[];
19
+ }
20
+ export interface LifecycleFinding {
21
+ code: string;
22
+ message: string;
23
+ }
24
+ /**
25
+ * 분할 SPEC 의 phase 파일은 헤더를 요구하지 않는다 — 헤더는 `_index.md` 한 벌이
26
+ * SSOT 다. phase 파일마다 Status 를 두면 둘이 어긋나는 새 드리프트를 만든다.
27
+ */
28
+ export declare function isLifecycleExempt(specPath: string): boolean;
29
+ /** SPEC 원문에서 lifecycle 헤더를 읽는다 */
30
+ export declare function parseSpecLifecycle(content: string): SpecLifecycleHeader;
31
+ /** VERIFIED + 코드성 Class 면 Anchors 절이 있고 비어 있지 않아야 한다 */
32
+ export declare function anchorsRequired(header: SpecLifecycleHeader): boolean;
33
+ /**
34
+ * 내용만으로 판정 가능한 lifecycle 검사.
35
+ *
36
+ * @param content SPEC 마크다운 원문
37
+ * @param specPath 파일 경로 — phase 파일 면제 판정에 쓴다
38
+ */
39
+ export declare function checkSpecLifecycle(content: string, specPath?: string): LifecycleFinding[];
40
+ //# sourceMappingURL=specLifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specLifecycle.d.ts","sourceRoot":"","sources":["../../../src/tools/spec/specLifecycle.ts"],"names":[],"mappings":"AAoBA,yDAAyD;AACzD,eAAO,MAAM,aAAa,sEAAuE,CAAC;AAClG,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,oDAAoD;AACpD,eAAO,MAAM,YAAY,yFAOf,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,SAAS,EAA2C,CAAC;AAEpG,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AA8BD,kCAAkC;AAClC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAQvE;AAkCD,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAGpE;AAaD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CASzF"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * SPEC lifecycle 규율 — 헤더의 닫힌 집합과 "썩은 앵커" 를 판정한다.
3
+ *
4
+ * 배경: `.vibe/specs/**` 는 VERIFIED 로 확정된 뒤에도 코드가 움직이면 그대로 남는다.
5
+ * 실측(2026-09-02): 29개 중 20개에 Status 줄이 아예 없었고, 남은 9개의 값은 5가지
6
+ * 형태로 갈라져 있었다 (`COMPLETE`, 소문자 `verified`, 후행 공백 …). 템플릿은
7
+ * `DRAFT | APPROVED` 만 선언했으니 선언과 실물이 이미 어긋나 있었다.
8
+ *
9
+ * 두 가지를 고정한다:
10
+ * - **닫힌 집합** — Status·Class 는 여기 있는 값만 쓸 수 있다. 새 값을 만들려면
11
+ * 이 파일을 고쳐야 하고, 그 순간 리뷰 대상이 된다.
12
+ * - **Anchors** — VERIFIED 이고 코드에 고정되는 Class 인 SPEC 은 자기가 안착한
13
+ * 경로를 나열해야 한다. 그 경로가 사라지면 게이트가 실패한다. lifecycle 표기만으로는
14
+ * 썩음을 못 잡는다 — 문서는 Status 를 바꾸지 않은 채 늙기 때문이다.
15
+ *
16
+ * 경로 존재 검사는 여기서 하지 않는다. 이 모듈은 순수 함수로 두고(하네스·CWD 무관),
17
+ * 파일시스템 판정은 `scripts/validate-spec-lifecycle.ts` 가 맡는다.
18
+ */
19
+ import path from 'path';
20
+ /** SPEC 이 가질 수 있는 lifecycle 상태 — 이 집합 밖의 값은 게이트가 거부한다 */
21
+ export const SPEC_STATUSES = ['DRAFT', 'APPROVED', 'VERIFIED', 'SUPERSEDED', 'REJECTED'];
22
+ /** SPEC 의 변경 종류 — dsh Agent Note 의 닫힌 6종을 그대로 쓴다 */
23
+ export const SPEC_CLASSES = [
24
+ 'feature',
25
+ 'bug-fix',
26
+ 'simplification',
27
+ 'architecture',
28
+ 'process',
29
+ 'testing',
30
+ ];
31
+ /**
32
+ * Anchors 를 요구하는 Class.
33
+ *
34
+ * 코드 경로에 실제로 안착하는 종류만 넣는다. process/testing/simplification 은
35
+ * 규약·워크플로 변경이라 고정할 경로가 없는 경우가 많고, 억지로 요구하면 통과 의식이 된다.
36
+ */
37
+ export const ANCHOR_REQUIRED_CLASSES = ['feature', 'bug-fix', 'architecture'];
38
+ const STATUS_LINE = /^\s*[-*]?\s*\*{0,2}Status\*{0,2}\s*[::]\s*(.+)$/im;
39
+ const CLASS_LINE = /^\s*[-*]?\s*\*{0,2}Class\*{0,2}\s*[::]\s*(.+)$/im;
40
+ const ANCHORS_HEADING = /^#{2,4}\s*(?:Anchors|앵커)\s*$/im;
41
+ const LIST_ITEM = /^\s*[-*]\s+(.+)$/;
42
+ /**
43
+ * 분할 SPEC 의 phase 파일은 헤더를 요구하지 않는다 — 헤더는 `_index.md` 한 벌이
44
+ * SSOT 다. phase 파일마다 Status 를 두면 둘이 어긋나는 새 드리프트를 만든다.
45
+ */
46
+ export function isLifecycleExempt(specPath) {
47
+ return /^phase-\d+-/.test(path.basename(specPath));
48
+ }
49
+ /**
50
+ * 헤더 값에서 첫 토큰만 뽑는다 — `VERIFIED (2026-08-29 — …)` 의 괄호 뒷말은 자유 서술이다.
51
+ *
52
+ * 하이픈은 구분자로 쓰지 않는다: Class `bug-fix` 가 `bug` 로 잘린다.
53
+ */
54
+ function firstToken(value) {
55
+ return value.trim().split(/[\s(·—]/)[0].trim();
56
+ }
57
+ function parseAnchors(content) {
58
+ const heading = content.match(ANCHORS_HEADING);
59
+ if (!heading)
60
+ return undefined;
61
+ const level = (heading[0].match(/^#+/) ?? ['#'])[0].length;
62
+ const after = content.slice((heading.index ?? 0) + heading[0].length);
63
+ const next = after.search(new RegExp(`^#{1,${level}}\\s`, 'm'));
64
+ const body = next === -1 ? after : after.slice(0, next);
65
+ const out = [];
66
+ for (const line of body.split('\n')) {
67
+ const m = line.match(LIST_ITEM);
68
+ if (!m)
69
+ continue;
70
+ const code = m[1].match(/`([^`]+)`/);
71
+ out.push((code ? code[1] : m[1]).trim());
72
+ }
73
+ return out;
74
+ }
75
+ /** SPEC 원문에서 lifecycle 헤더를 읽는다 */
76
+ export function parseSpecLifecycle(content) {
77
+ const status = content.match(STATUS_LINE);
78
+ const specClass = content.match(CLASS_LINE);
79
+ return {
80
+ status: status ? firstToken(status[1]) : undefined,
81
+ specClass: specClass ? firstToken(specClass[1]).toLowerCase() : undefined,
82
+ anchors: parseAnchors(content),
83
+ };
84
+ }
85
+ function checkStatus(header, out) {
86
+ if (!header.status) {
87
+ out.push({
88
+ code: 'no-spec-status',
89
+ message: `Status 필드가 없다 — lifecycle 을 판정할 수 없다 (${SPEC_STATUSES.join(' | ')}).`,
90
+ });
91
+ return;
92
+ }
93
+ if (!SPEC_STATUSES.includes(header.status)) {
94
+ out.push({
95
+ code: 'invalid-spec-status',
96
+ message: `Status 값을 알 수 없다: "${header.status}" — ${SPEC_STATUSES.join(' | ')} 중 하나여야 한다.`,
97
+ });
98
+ }
99
+ }
100
+ function checkClass(header, out) {
101
+ if (!header.specClass) {
102
+ out.push({
103
+ code: 'no-spec-class',
104
+ message: `Class 필드가 없다 — Anchors 요구 여부를 판정할 수 없다 (${SPEC_CLASSES.join(' | ')}).`,
105
+ });
106
+ return;
107
+ }
108
+ if (!SPEC_CLASSES.includes(header.specClass)) {
109
+ out.push({
110
+ code: 'invalid-spec-class',
111
+ message: `Class 값을 알 수 없다: "${header.specClass}" — ${SPEC_CLASSES.join(' | ')} 중 하나여야 한다.`,
112
+ });
113
+ }
114
+ }
115
+ /** VERIFIED + 코드성 Class 면 Anchors 절이 있고 비어 있지 않아야 한다 */
116
+ export function anchorsRequired(header) {
117
+ return header.status === 'VERIFIED'
118
+ && ANCHOR_REQUIRED_CLASSES.includes(header.specClass ?? '');
119
+ }
120
+ function checkAnchors(header, out) {
121
+ if (!anchorsRequired(header))
122
+ return;
123
+ if (!header.anchors || header.anchors.length === 0) {
124
+ out.push({
125
+ code: 'no-anchors',
126
+ message: `VERIFIED + Class ${header.specClass} 인 SPEC 은 "## Anchors" 절에 안착한 경로를 나열해야 한다 `
127
+ + '— 경로가 사라지면 게이트가 썩음을 잡는다.',
128
+ });
129
+ }
130
+ }
131
+ /**
132
+ * 내용만으로 판정 가능한 lifecycle 검사.
133
+ *
134
+ * @param content SPEC 마크다운 원문
135
+ * @param specPath 파일 경로 — phase 파일 면제 판정에 쓴다
136
+ */
137
+ export function checkSpecLifecycle(content, specPath) {
138
+ if (specPath && isLifecycleExempt(specPath))
139
+ return [];
140
+ const header = parseSpecLifecycle(content);
141
+ const out = [];
142
+ checkStatus(header, out);
143
+ checkClass(header, out);
144
+ checkAnchors(header, out);
145
+ return out;
146
+ }
147
+ //# sourceMappingURL=specLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specLifecycle.js","sourceRoot":"","sources":["../../../src/tools/spec/specLifecycle.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateSpecDocument.d.ts","sourceRoot":"","sources":["../../../src/tools/spec/validateSpecDocument.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iCAAiC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAwBD,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5D;AA6MD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,oBAAoB,CAyBtB;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAUzE"}
1
+ {"version":3,"file":"validateSpecDocument.d.ts","sourceRoot":"","sources":["../../../src/tools/spec/validateSpecDocument.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iCAAiC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAwBD,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5D;AAyND;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,oBAAoB,CA0BtB;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAUzE"}
@@ -14,6 +14,7 @@
14
14
  * (dual-harness-doctrine 운영 규칙 2).
15
15
  */
16
16
  import path from 'path';
17
+ import { checkSpecLifecycle } from './specLifecycle.js';
17
18
  const REQ_ID = /\bREQ-([a-z0-9-]+)-(\d{3})\b/g;
18
19
  const STAKES_LINE = /^\s*[-*]?\s*\*{0,2}Stakes\*{0,2}\s*[::]\s*(.+)$/im;
19
20
  const VALID_STAKES = ['demo', 'prototype', 'production'];
@@ -215,6 +216,17 @@ function checkPlaceholders(content, findings) {
215
216
  }
216
217
  }
217
218
  }
219
+ /**
220
+ * lifecycle 헤더(Status·Class·Anchors) — 닫힌 집합 판정은 `specLifecycle.ts` 가 소유한다.
221
+ *
222
+ * P1 인 이유: 값이 열려 있으면 `.vibe/specs/` 전수를 도는 CI 게이트가 무엇을 통과로
223
+ * 볼지 정할 수 없다. 실측으로 5가지 표기가 공존했고 그중 둘은 템플릿에 없는 값이었다.
224
+ */
225
+ function checkLifecycle(content, specPath, findings) {
226
+ for (const f of checkSpecLifecycle(content, specPath)) {
227
+ findings.push({ severity: 'P1', code: f.code, message: f.message });
228
+ }
229
+ }
218
230
  function checkScenarios(content, findings) {
219
231
  if (!/^#{1,3}\s*\d*\.?\s*Scenarios/im.test(content)) {
220
232
  findings.push({
@@ -243,6 +255,7 @@ export function validateSpecDocument(content, options = {}) {
243
255
  const featureSlug = options.specPath ? featureSlugFromPath(options.specPath) : undefined;
244
256
  const requirementIds = checkRequirements(content, featureSlug, findings);
245
257
  checkStakes(content, findings);
258
+ checkLifecycle(content, options.specPath, findings);
246
259
  checkDoneCriteria(content, findings);
247
260
  checkGrounding(content, findings);
248
261
  checkPlaceholders(content, findings);
@@ -1 +1 @@
1
- {"version":3,"file":"validateSpecDocument.js","sourceRoot":"","sources":["../../../src/tools/spec/validateSpecDocument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AAoBxB,MAAM,MAAM,GAAG,+BAA+B,CAAC;AAC/C,MAAM,WAAW,GAAG,mDAAmD,CAAC;AACxE,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAEzD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtE,OAAO,OAAO;SACX,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;SACjC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,OAAe,EAAE,KAAa;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,MAAM,GAAG,GAAuD,EAAE,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,WAA+B,EAAE,QAAuB;IAClG,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EACL,oEAAoE;kBAClE,sCAAsC;SAC3C,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,0DAA0D;IAC1D,yEAAyE;IACzE,sEAAsE;IACtE,0CAA0C;IAC1C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAC7D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EACL,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,WAAW,YAAY,UAAU,CAAC,MAAM,KAAK;sBAChF,yDAAyD;gBAC7D,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,QAAuB;IAC3D,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,4EAA4E;SACtF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,8CAA8C;SACzF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,wHAAwH,CAAC;AAE9I,4CAA4C;AAC5C,MAAM,cAAc,GAAG,sEAAsE,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,eAAe,GAAG,qGAAqG,CAAC;AAE9H,oDAAoD;AACpD,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AACnD,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAE1E;;;;;;;;;;;;GAYG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,QAAuB;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,CAAG,sBAAsB;IAE9C,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAG,kBAAkB;IAEpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,iDAAiD;kBACtD,0CAA0C;kBAC1C,eAAe;SACpB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,QAAuB;IACjE,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,oBAAoB;IAE/D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,sEAAsE;SAChF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,4CAA4C;IAC5C,kCAAkC;IAClC,EAAE;IACF,6CAA6C;IAC7C,8DAA8D;IAC9D,qDAAqD;IACrD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,qBAAqB,GAAG,yEAAyE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnH,IAAI,CAAC,QAAQ,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,kEAAkE;YAC3E,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,OAAe,EAAE,QAAuB;IACjE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAuD;QACnE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC5E,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE;QACnF,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE;KACxE,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,IAAI;gBACd,IAAI;gBACJ,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B;gBACzE,IAAI;aACL,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,QAAuB;IAC9D,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,oDAAoD;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC5E,cAAc,EAAE,EAAE;SACnB,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzF,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzE,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/B,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAElC,OAAO;QACL,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;QAC/C,QAAQ;QACR,cAAc;KACf,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,yBAAyB,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;IAClE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACpC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK;QACvB,CAAC,CAAC,wBAAwB,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG;QAC3F,CAAC,CAAC,wBAAwB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;IACvF,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"validateSpecDocument.js","sourceRoot":"","sources":["../../../src/tools/spec/validateSpecDocument.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { getToolsBaseUrl, PROJECT_DIR } from './utils.js';
14
14
  import { readFileSync } from 'fs';
15
15
  import { buildCliCtx, isDirectRun } from './lib/hook-context.js';
16
16
  import { CODE_EXT_RE, shouldCheckConsole } from './lib/console-allow.js';
17
+ import { isEphemeralPath } from './lib/ephemeral-lane.js';
17
18
 
18
19
  const BASE_URL = getToolsBaseUrl();
19
20
 
@@ -288,6 +289,12 @@ export async function run(ctx) {
288
289
  const files = getModifiedFiles(ctx);
289
290
  if (files.length === 0) return { exitCode: 0, findings };
290
291
 
292
+ // 일회성 레인 — 생성·실행 후 폐기되는 코드에 durable 코드의 무게를 지우지 않는다.
293
+ // 판정은 **경로가** 한다 (모델이 아니라) — `lib/ephemeral-lane.js` 참조.
294
+ // 이 면제가 안전한 이유는 그 경로가 커밋될 수 없기 때문이다: gitignore 가 1차,
295
+ // pre-tool-guard 가 `git add -f` 를 막는 심층 방어다.
296
+ if (isEphemeralPath(files[0], PROJECT_DIR)) return { exitCode: 0, findings };
297
+
291
298
  // 1. 하드룰 탐지기 실행 (changed file only, regex only — 동적 import 없음) —
292
299
  // additionalContext 주입만. 커밋 게이트(verifyRequired)는 태우지 않는다:
293
300
  // 정규식 오탐 하나가 auto-commit을 차단하는 결합은 제거됨
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 일회성 코드 레인 — 생성·실행 후 폐기되는 코드에 durable 코드의 무게를 지우지 않는다.
3
+ *
4
+ * ## 이 파일이 대부분 방어인 이유
5
+ *
6
+ * 이 레인은 원래 "열지 말자" 로 판단했던 것이다. 사유 둘 중 하나가 **게이트 회피 구멍**이었다:
7
+ * "이건 일회성이라 린트 면제" 를 모델이 판정하면 축이 아니라 뒷문이고, 뒷문은 바쁠 때 쓰인다.
8
+ *
9
+ * 그래서 단 하나의 규칙으로 막는다: **판정을 모델이 아니라 경로가 한다.**
10
+ * 경로가 판정하면 면제 대상이 `ls` 하나로 감사되고, 그 경로는 커밋될 수 없다.
11
+ *
12
+ * ## 방어 순서 (과장하지 않는다)
13
+ *
14
+ * 1. **`.gitignore`** — 1차 방어. `git add` 는 무시된 경로를 그냥 거부한다
15
+ * 2. **`pre-tool-guard`** — 심층 방어. 실제로 뚫리는 경로는 `git add -f` 하나뿐이고 그것을 막는다.
16
+ * 훅은 프로젝트 로컬이라 미설치가 흔하므로 이것을 1차라고 부르지 않는다
17
+ *
18
+ * ## fail-safe (fail-open 아님)
19
+ *
20
+ * 훅은 보통 fail-open 이다 — 판정 실패가 작업을 막지 않는다. 여기는 반대로 판정에 실패하면
21
+ * **일회성이 아니라고 답한다.** 모르면 면제하지 않는 쪽이 안전하다: 잘못된 면제는 조용히
22
+ * 품질 게이트를 끄지만, 잘못된 비면제는 검사가 한 번 더 도는 것뿐이다.
23
+ */
24
+
25
+ import path from 'path';
26
+
27
+ /** 유일한 일회성 경로 — 설정으로 열지 않는다. 설정 가능한 면제 경로는 프로젝트마다 다른 뒷문이 된다 */
28
+ export const EPHEMERAL_DIR = '.vibe/ephemeral';
29
+
30
+ /**
31
+ * 프로젝트 기준 상대 경로로 정규화한다 (구분자 통일 + `..` 해소 + 절대/상대 통일).
32
+ *
33
+ * `path.resolve` 로 양쪽을 절대 경로로 만든 뒤 `path.relative` 를 쓴다 — 문자열 접두사
34
+ * 비교로는 부족하다. 훅의 `PROJECT_DIR` 은 `CLAUDE_PROJECT_DIR` 미설정 시 `'.'` 이라
35
+ * (utils.js), 접두사만 보면 절대 경로로 들어온 파일이 프로젝트 밖으로 판정된다.
36
+ */
37
+ function toProjectRelative(filePath, projectDir) {
38
+ const normalized = String(filePath).replace(/\\/g, '/');
39
+ const base = path.resolve(String(projectDir || '.').replace(/\\/g, '/'));
40
+ return path.relative(base, path.resolve(base, normalized)).replace(/\\/g, '/');
41
+ }
42
+
43
+ /**
44
+ * 이 경로가 일회성 레인 안인가.
45
+ *
46
+ * **정규화 후** 접두사를 본다 — `.vibe/ephemeral/../src/x.ts` 는 `.vibe/src/x.ts` 가 되어
47
+ * 거짓이다. 상위 탈출로 면제를 훔칠 수 없어야 한다.
48
+ *
49
+ * @param {string} filePath
50
+ * @param {string} [projectDir] 주면 그 아래 절대 경로도 인식한다
51
+ * @returns {boolean}
52
+ */
53
+ export function isEphemeralPath(filePath, projectDir) {
54
+ try {
55
+ if (!filePath) return false;
56
+ const rel = toProjectRelative(filePath, projectDir);
57
+ if (!rel || rel.startsWith('../') || path.isAbsolute(rel)) return false; // 프로젝트 밖
58
+ return rel === EPHEMERAL_DIR || rel.startsWith(`${EPHEMERAL_DIR}/`);
59
+ } catch {
60
+ return false; // fail-safe — 모르면 면제하지 않는다
61
+ }
62
+ }
63
+
64
+ /** `git add|stage|commit` 구간의 인자만 훑는다 (`;`·`&&`·`|` 로 끊는다) */
65
+ const GIT_STAGING_RE = /\bgit\s+(?:add|stage|commit)\b([^;&|]*)/gi;
66
+
67
+ /** 한 git 구간의 인자에서 일회성 경로만 고른다 (중첩을 얕게 유지하려고 분리했다) */
68
+ function ephemeralArgsIn(segment) {
69
+ const found = [];
70
+ for (const rawArg of String(segment).split(/\s+/)) {
71
+ const arg = rawArg.replace(/^["']|["']$/g, '').trim();
72
+ if (arg && !arg.startsWith('-') && isEphemeralPath(arg)) found.push(arg);
73
+ }
74
+ return found;
75
+ }
76
+
77
+ /**
78
+ * git 스테이징 명령줄에서 일회성 경로를 뽑는다.
79
+ *
80
+ * `git add .` · `git add -A` 는 걸러내지 않는다 — gitignore 가 이미 거르고, 여기서 막으면
81
+ * 정상 커밋이 전부 멈춘다. 멈추는 게이트는 꺼진다.
82
+ *
83
+ * @param {string} command
84
+ * @returns {string[]} 명령에 명시된 일회성 경로들
85
+ */
86
+ export function ephemeralPathsInGitCommand(command) {
87
+ try {
88
+ const found = [];
89
+ for (const match of String(command || '').matchAll(GIT_STAGING_RE)) {
90
+ found.push(...ephemeralArgsIn(match[1]));
91
+ }
92
+ return found;
93
+ } catch {
94
+ return []; // fail-safe — 판정 실패가 커밋을 막지 않는다
95
+ }
96
+ }
97
+
98
+ /** 차단 메시지 — 이유 없는 차단은 우회된다. 무엇을·왜·대안을 함께 낸다 */
99
+ export function formatEphemeralBlock(paths) {
100
+ return [
101
+ `[EPHEMERAL] 일회성 경로를 커밋하려 한다: ${paths.join(', ')}`,
102
+ ` ${EPHEMERAL_DIR}/ 는 생성·실행 후 폐기되는 코드의 자리다. 품질 게이트를 면제받는 대신`,
103
+ ' 커밋되지 않는다 — 면제받은 코드가 배포되면 그 면제가 곧 구멍이 된다.',
104
+ ' 남겨야 하는 코드라면 이 경로 밖으로 옮기고 평소 게이트를 통과시켜라.',
105
+ ].join('\n');
106
+ }