oh-my-claude-sisyphus 3.8.16 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.mcp.json +1 -1
  4. package/agents/analyst.md +41 -0
  5. package/agents/architect.md +45 -0
  6. package/agents/critic.md +42 -0
  7. package/agents/deep-executor.md +193 -0
  8. package/agents/planner.md +82 -0
  9. package/bridge/mcp-server.cjs +181 -181
  10. package/dist/__tests__/agent-registry.test.js +1 -1
  11. package/dist/__tests__/installer.test.js +8 -8
  12. package/dist/__tests__/installer.test.js.map +1 -1
  13. package/dist/__tests__/omc-tools-server.test.js +2 -2
  14. package/dist/__tests__/omc-tools-server.test.js.map +1 -1
  15. package/dist/__tests__/skills.test.js +5 -4
  16. package/dist/__tests__/skills.test.js.map +1 -1
  17. package/dist/agents/deep-executor.d.ts +15 -0
  18. package/dist/agents/deep-executor.d.ts.map +1 -0
  19. package/dist/agents/deep-executor.js +47 -0
  20. package/dist/agents/deep-executor.js.map +1 -0
  21. package/dist/agents/definitions.d.ts +15 -0
  22. package/dist/agents/definitions.d.ts.map +1 -1
  23. package/dist/agents/definitions.js +25 -0
  24. package/dist/agents/definitions.js.map +1 -1
  25. package/dist/agents/index.d.ts +1 -0
  26. package/dist/agents/index.d.ts.map +1 -1
  27. package/dist/agents/index.js +1 -0
  28. package/dist/agents/index.js.map +1 -1
  29. package/dist/cli/commands/doctor-conflicts.d.ts +55 -0
  30. package/dist/cli/commands/doctor-conflicts.d.ts.map +1 -0
  31. package/dist/cli/commands/doctor-conflicts.js +261 -0
  32. package/dist/cli/commands/doctor-conflicts.js.map +1 -0
  33. package/dist/cli/index.js +16 -1
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/features/auto-update.d.ts +12 -0
  36. package/dist/features/auto-update.d.ts.map +1 -1
  37. package/dist/features/auto-update.js +4 -1
  38. package/dist/features/auto-update.js.map +1 -1
  39. package/dist/features/context-injector/types.d.ts +1 -1
  40. package/dist/features/context-injector/types.d.ts.map +1 -1
  41. package/dist/hooks/__tests__/bridge.test.d.ts +2 -0
  42. package/dist/hooks/__tests__/bridge.test.d.ts.map +1 -0
  43. package/dist/hooks/__tests__/bridge.test.js +199 -0
  44. package/dist/hooks/__tests__/bridge.test.js.map +1 -0
  45. package/dist/hooks/beads-context/__tests__/index.test.d.ts +2 -0
  46. package/dist/hooks/beads-context/__tests__/index.test.d.ts.map +1 -0
  47. package/dist/hooks/beads-context/__tests__/index.test.js +150 -0
  48. package/dist/hooks/beads-context/__tests__/index.test.js.map +1 -0
  49. package/dist/hooks/beads-context/constants.d.ts +3 -0
  50. package/dist/hooks/beads-context/constants.d.ts.map +1 -0
  51. package/dist/hooks/beads-context/constants.js +35 -0
  52. package/dist/hooks/beads-context/constants.js.map +1 -0
  53. package/dist/hooks/beads-context/index.d.ts +21 -0
  54. package/dist/hooks/beads-context/index.d.ts.map +1 -0
  55. package/dist/hooks/beads-context/index.js +62 -0
  56. package/dist/hooks/beads-context/index.js.map +1 -0
  57. package/dist/hooks/beads-context/types.d.ts +7 -0
  58. package/dist/hooks/beads-context/types.d.ts.map +1 -0
  59. package/dist/hooks/beads-context/types.js +2 -0
  60. package/dist/hooks/beads-context/types.js.map +1 -0
  61. package/dist/hooks/bridge.d.ts +4 -0
  62. package/dist/hooks/bridge.d.ts.map +1 -1
  63. package/dist/hooks/bridge.js +76 -23
  64. package/dist/hooks/bridge.js.map +1 -1
  65. package/dist/hooks/clear-suggestions/constants.d.ts +54 -0
  66. package/dist/hooks/clear-suggestions/constants.d.ts.map +1 -0
  67. package/dist/hooks/clear-suggestions/constants.js +102 -0
  68. package/dist/hooks/clear-suggestions/constants.js.map +1 -0
  69. package/dist/hooks/clear-suggestions/index.d.ts +61 -0
  70. package/dist/hooks/clear-suggestions/index.d.ts.map +1 -0
  71. package/dist/hooks/clear-suggestions/index.js +282 -0
  72. package/dist/hooks/clear-suggestions/index.js.map +1 -0
  73. package/dist/hooks/clear-suggestions/triggers.d.ts +65 -0
  74. package/dist/hooks/clear-suggestions/triggers.d.ts.map +1 -0
  75. package/dist/hooks/clear-suggestions/triggers.js +222 -0
  76. package/dist/hooks/clear-suggestions/triggers.js.map +1 -0
  77. package/dist/hooks/clear-suggestions/types.d.ts +92 -0
  78. package/dist/hooks/clear-suggestions/types.d.ts.map +1 -0
  79. package/dist/hooks/clear-suggestions/types.js +9 -0
  80. package/dist/hooks/clear-suggestions/types.js.map +1 -0
  81. package/dist/hooks/index.d.ts +1 -0
  82. package/dist/hooks/index.d.ts.map +1 -1
  83. package/dist/hooks/index.js +3 -0
  84. package/dist/hooks/index.js.map +1 -1
  85. package/dist/hooks/permission-handler/index.d.ts.map +1 -1
  86. package/dist/hooks/permission-handler/index.js +3 -1
  87. package/dist/hooks/permission-handler/index.js.map +1 -1
  88. package/dist/hooks/setup/index.d.ts.map +1 -1
  89. package/dist/hooks/setup/index.js +12 -5
  90. package/dist/hooks/setup/index.js.map +1 -1
  91. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  92. package/dist/hooks/subagent-tracker/index.js +25 -9
  93. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  94. package/dist/index.js +1 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/installer/__tests__/claude-md-merge.test.d.ts +6 -0
  97. package/dist/installer/__tests__/claude-md-merge.test.d.ts.map +1 -0
  98. package/dist/installer/__tests__/claude-md-merge.test.js +220 -0
  99. package/dist/installer/__tests__/claude-md-merge.test.js.map +1 -0
  100. package/dist/installer/__tests__/safe-installer.test.d.ts +6 -0
  101. package/dist/installer/__tests__/safe-installer.test.d.ts.map +1 -0
  102. package/dist/installer/__tests__/safe-installer.test.js +172 -0
  103. package/dist/installer/__tests__/safe-installer.test.js.map +1 -0
  104. package/dist/installer/hooks.d.ts.map +1 -1
  105. package/dist/installer/hooks.js +3 -1
  106. package/dist/installer/hooks.js.map +1 -1
  107. package/dist/installer/index.d.ts +27 -1
  108. package/dist/installer/index.d.ts.map +1 -1
  109. package/dist/installer/index.js +209 -85
  110. package/dist/installer/index.js.map +1 -1
  111. package/dist/mcp/omc-tools-server.d.ts +1 -1
  112. package/dist/mcp/omc-tools-server.d.ts.map +1 -1
  113. package/dist/mcp/omc-tools-server.js +3 -3
  114. package/dist/mcp/omc-tools-server.js.map +1 -1
  115. package/dist/mcp/standalone-server.js +1 -1
  116. package/dist/mcp/standalone-server.js.map +1 -1
  117. package/dist/verification/tier-selector.d.ts +40 -0
  118. package/dist/verification/tier-selector.d.ts.map +1 -0
  119. package/dist/verification/tier-selector.js +95 -0
  120. package/dist/verification/tier-selector.js.map +1 -0
  121. package/dist/verification/tier-selector.test.d.ts +2 -0
  122. package/dist/verification/tier-selector.test.d.ts.map +1 -0
  123. package/dist/verification/tier-selector.test.js +282 -0
  124. package/dist/verification/tier-selector.test.js.map +1 -0
  125. package/docs/AGENTS.md +1 -1
  126. package/docs/CLAUDE.md +90 -378
  127. package/docs/partials/agent-tiers.md +165 -0
  128. package/docs/partials/features.md +131 -0
  129. package/docs/partials/mode-hierarchy.md +120 -0
  130. package/docs/partials/mode-selection-guide.md +82 -0
  131. package/docs/partials/verification-tiers.md +107 -0
  132. package/docs/shared/agent-tiers.md +165 -0
  133. package/docs/shared/features.md +131 -0
  134. package/docs/shared/mode-hierarchy.md +120 -0
  135. package/docs/shared/mode-selection-guide.md +82 -0
  136. package/docs/shared/verification-tiers.md +107 -0
  137. package/package.json +4 -3
  138. package/scripts/compose-docs.mjs +44 -0
  139. package/scripts/keyword-detector.mjs +13 -3
  140. package/skills/deep-executor/SKILL.md +50 -0
  141. package/skills/ecomode/SKILL.md +58 -103
  142. package/skills/omc-setup/SKILL.md +197 -20
  143. package/skills/plan/SKILL.md +62 -0
  144. package/skills/project-session-manager/SKILL.md +87 -4
  145. package/skills/project-session-manager/lib/config.sh +54 -5
  146. package/skills/project-session-manager/lib/parse.sh +65 -11
  147. package/skills/project-session-manager/lib/providers/github.sh +52 -0
  148. package/skills/project-session-manager/lib/providers/interface.sh +76 -0
  149. package/skills/project-session-manager/lib/providers/jira.sh +79 -0
  150. package/skills/project-session-manager/lib/session.sh +49 -12
  151. package/skills/project-session-manager/lib/worktree.sh +37 -4
  152. package/skills/project-session-manager/psm.sh +116 -51
  153. package/skills/ralph/SKILL.md +41 -27
  154. package/skills/ultrawork/SKILL.md +56 -66
  155. package/templates/hooks/keyword-detector.mjs +21 -13
  156. package/templates/hooks/lib/stdin.mjs +62 -0
  157. package/templates/hooks/persistent-mode.mjs +7 -8
  158. package/templates/hooks/post-tool-use.mjs +8 -10
  159. package/templates/hooks/pre-tool-use.mjs +9 -6
  160. package/templates/hooks/session-start.mjs +7 -8
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Verification Tier Selector
3
+ *
4
+ * Scales verification effort with task complexity to optimize cost
5
+ * while maintaining quality. Used by ralph, autopilot, and ultrapilot.
6
+ */
7
+ const TIER_AGENTS = {
8
+ LIGHT: {
9
+ agent: 'architect-low',
10
+ model: 'haiku',
11
+ evidenceRequired: ['lsp_diagnostics clean'],
12
+ },
13
+ STANDARD: {
14
+ agent: 'architect-medium',
15
+ model: 'sonnet',
16
+ evidenceRequired: ['lsp_diagnostics clean', 'build pass'],
17
+ },
18
+ THOROUGH: {
19
+ agent: 'architect',
20
+ model: 'opus',
21
+ evidenceRequired: ['full architect review', 'all tests pass', 'no regressions'],
22
+ },
23
+ };
24
+ /**
25
+ * Select appropriate verification tier based on change metadata.
26
+ */
27
+ export function selectVerificationTier(changes) {
28
+ // Security and architectural changes always require thorough review
29
+ if (changes.hasSecurityImplications || changes.hasArchitecturalChanges) {
30
+ return 'THOROUGH';
31
+ }
32
+ // Large scope changes require thorough review
33
+ if (changes.filesChanged > 20) {
34
+ return 'THOROUGH';
35
+ }
36
+ // Small, well-tested changes can use light verification
37
+ if (changes.filesChanged < 5 &&
38
+ changes.linesChanged < 100 &&
39
+ changes.testCoverage === 'full') {
40
+ return 'LIGHT';
41
+ }
42
+ // Default to standard verification
43
+ return 'STANDARD';
44
+ }
45
+ /**
46
+ * Get the verification agent configuration for a tier.
47
+ */
48
+ export function getVerificationAgent(tier) {
49
+ return TIER_AGENTS[tier];
50
+ }
51
+ /**
52
+ * Detect if any files represent architectural changes.
53
+ */
54
+ export function detectArchitecturalChanges(files) {
55
+ const architecturalPatterns = [
56
+ /config\.(ts|js|json)$/i,
57
+ /schema\.(ts|prisma|sql)$/i,
58
+ /definitions\.ts$/i,
59
+ /types\.ts$/i,
60
+ /package\.json$/i,
61
+ /tsconfig\.json$/i,
62
+ ];
63
+ return files.some((file) => architecturalPatterns.some((pattern) => pattern.test(file)));
64
+ }
65
+ /**
66
+ * Detect if any files have security implications.
67
+ */
68
+ export function detectSecurityImplications(files) {
69
+ const securityPatterns = [
70
+ /\/auth\//i, // auth directory
71
+ /\/security\//i, // security directory
72
+ /(^|[\/-])permissions?\.(ts|js)$/i, // permission.ts, permissions.ts
73
+ /(^|[\/-])credentials?\.(ts|js|json)$/i, // credential.ts, credentials.json
74
+ /(^|[\/-])secrets?\.(ts|js|json|ya?ml)$/i, // secret.ts, secrets.yaml
75
+ /(^|[\/-])tokens?\.(ts|js|json)$/i, // token.ts, auth-token.ts
76
+ /\.(env|pem|key)(\.|$)/i, // .env, .env.local, cert.pem, private.key
77
+ /(^|[\/-])passwords?\.(ts|js|json)$/i, // password.ts
78
+ /(^|[\/-])oauth/i, // oauth.ts, oauth-config.ts, oauth2.ts
79
+ /(^|[\/-])jwt/i, // jwt.ts, jwt-utils.ts, jwt_utils.ts
80
+ ];
81
+ return files.some((file) => securityPatterns.some((pattern) => pattern.test(file)));
82
+ }
83
+ /**
84
+ * Build change metadata from a list of changed files and line count.
85
+ */
86
+ export function buildChangeMetadata(files, linesChanged, testCoverage = 'partial') {
87
+ return {
88
+ filesChanged: files.length,
89
+ linesChanged,
90
+ hasArchitecturalChanges: detectArchitecturalChanges(files),
91
+ hasSecurityImplications: detectSecurityImplications(files),
92
+ testCoverage,
93
+ };
94
+ }
95
+ //# sourceMappingURL=tier-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-selector.js","sourceRoot":"","sources":["../../src/verification/tier-selector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,WAAW,GAAgD;IAC/D,KAAK,EAAE;QACL,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,OAAO;QACd,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;KAC5C;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,QAAQ;QACf,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,YAAY,CAAC;KAC1D;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,MAAM;QACb,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;KAChF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,oEAAoE;IACpE,IAAI,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;QACvE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,wDAAwD;IACxD,IACE,OAAO,CAAC,YAAY,GAAG,CAAC;QACxB,OAAO,CAAC,YAAY,GAAG,GAAG;QAC1B,OAAO,CAAC,YAAY,KAAK,MAAM,EAC/B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mCAAmC;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAsB;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAe;IACxD,MAAM,qBAAqB,GAAG;QAC5B,wBAAwB;QACxB,2BAA2B;QAC3B,mBAAmB;QACnB,aAAa;QACb,iBAAiB;QACjB,kBAAkB;KACnB,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAe;IACxD,MAAM,gBAAgB,GAAG;QACvB,WAAW,EAA+B,iBAAiB;QAC3D,eAAe,EAA2B,qBAAqB;QAC/D,kCAAkC,EAAQ,gCAAgC;QAC1E,uCAAuC,EAAG,kCAAkC;QAC5E,yCAAyC,EAAE,0BAA0B;QACrE,kCAAkC,EAAQ,0BAA0B;QACpE,wBAAwB,EAAkB,0CAA0C;QACpF,qCAAqC,EAAK,cAAc;QACxD,iBAAiB,EAAyB,uCAAuC;QACjF,eAAe,EAA2B,qCAAqC;KAChF,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAe,EACf,YAAoB,EACpB,eAA4C,SAAS;IAErD,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,YAAY;QACZ,uBAAuB,EAAE,0BAA0B,CAAC,KAAK,CAAC;QAC1D,uBAAuB,EAAE,0BAA0B,CAAC,KAAK,CAAC;QAC1D,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tier-selector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-selector.test.d.ts","sourceRoot":"","sources":["../../src/verification/tier-selector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,282 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { selectVerificationTier, getVerificationAgent, detectArchitecturalChanges, detectSecurityImplications, buildChangeMetadata, } from './tier-selector.js';
3
+ describe('selectVerificationTier', () => {
4
+ it('returns LIGHT for small, well-tested changes', () => {
5
+ const changes = {
6
+ filesChanged: 2,
7
+ linesChanged: 50,
8
+ hasArchitecturalChanges: false,
9
+ hasSecurityImplications: false,
10
+ testCoverage: 'full',
11
+ };
12
+ expect(selectVerificationTier(changes)).toBe('LIGHT');
13
+ });
14
+ it('returns THOROUGH for security changes regardless of size', () => {
15
+ const changes = {
16
+ filesChanged: 1,
17
+ linesChanged: 5,
18
+ hasArchitecturalChanges: false,
19
+ hasSecurityImplications: true,
20
+ testCoverage: 'full',
21
+ };
22
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
23
+ });
24
+ it('returns THOROUGH for architectural changes', () => {
25
+ const changes = {
26
+ filesChanged: 3,
27
+ linesChanged: 80,
28
+ hasArchitecturalChanges: true,
29
+ hasSecurityImplications: false,
30
+ testCoverage: 'partial',
31
+ };
32
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
33
+ });
34
+ it('returns STANDARD for medium changes without special flags', () => {
35
+ const changes = {
36
+ filesChanged: 10,
37
+ linesChanged: 200,
38
+ hasArchitecturalChanges: false,
39
+ hasSecurityImplications: false,
40
+ testCoverage: 'partial',
41
+ };
42
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
43
+ });
44
+ it('returns THOROUGH for >20 files', () => {
45
+ const changes = {
46
+ filesChanged: 25,
47
+ linesChanged: 100,
48
+ hasArchitecturalChanges: false,
49
+ hasSecurityImplications: false,
50
+ testCoverage: 'full',
51
+ };
52
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
53
+ });
54
+ it('returns STANDARD when test coverage is not full', () => {
55
+ const changes = {
56
+ filesChanged: 2,
57
+ linesChanged: 50,
58
+ hasArchitecturalChanges: false,
59
+ hasSecurityImplications: false,
60
+ testCoverage: 'partial',
61
+ };
62
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
63
+ });
64
+ it('returns STANDARD when lines exceed 100', () => {
65
+ const changes = {
66
+ filesChanged: 3,
67
+ linesChanged: 150,
68
+ hasArchitecturalChanges: false,
69
+ hasSecurityImplications: false,
70
+ testCoverage: 'full',
71
+ };
72
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
73
+ });
74
+ });
75
+ describe('getVerificationAgent', () => {
76
+ it('returns architect-low for LIGHT tier', () => {
77
+ const agent = getVerificationAgent('LIGHT');
78
+ expect(agent.agent).toBe('architect-low');
79
+ expect(agent.model).toBe('haiku');
80
+ });
81
+ it('returns architect-medium for STANDARD tier', () => {
82
+ const agent = getVerificationAgent('STANDARD');
83
+ expect(agent.agent).toBe('architect-medium');
84
+ expect(agent.model).toBe('sonnet');
85
+ });
86
+ it('returns architect for THOROUGH tier', () => {
87
+ const agent = getVerificationAgent('THOROUGH');
88
+ expect(agent.agent).toBe('architect');
89
+ expect(agent.model).toBe('opus');
90
+ });
91
+ });
92
+ describe('detectArchitecturalChanges', () => {
93
+ it('detects config files', () => {
94
+ expect(detectArchitecturalChanges(['src/config.ts'])).toBe(true);
95
+ expect(detectArchitecturalChanges(['app.config.json'])).toBe(true);
96
+ });
97
+ it('detects schema files', () => {
98
+ expect(detectArchitecturalChanges(['prisma/schema.prisma'])).toBe(true);
99
+ expect(detectArchitecturalChanges(['db/schema.sql'])).toBe(true);
100
+ });
101
+ it('detects definitions and types', () => {
102
+ expect(detectArchitecturalChanges(['src/definitions.ts'])).toBe(true);
103
+ expect(detectArchitecturalChanges(['src/types.ts'])).toBe(true);
104
+ });
105
+ it('detects package files', () => {
106
+ expect(detectArchitecturalChanges(['package.json'])).toBe(true);
107
+ expect(detectArchitecturalChanges(['tsconfig.json'])).toBe(true);
108
+ });
109
+ it('ignores regular source files', () => {
110
+ expect(detectArchitecturalChanges(['src/utils/helper.ts'])).toBe(false);
111
+ expect(detectArchitecturalChanges(['src/components/Button.tsx'])).toBe(false);
112
+ });
113
+ });
114
+ describe('detectSecurityImplications', () => {
115
+ it('detects auth files', () => {
116
+ expect(detectSecurityImplications(['src/auth/login.ts'])).toBe(true);
117
+ expect(detectSecurityImplications(['lib/auth/jwt.ts'])).toBe(true);
118
+ });
119
+ it('detects security-related paths', () => {
120
+ expect(detectSecurityImplications(['src/security/encrypt.ts'])).toBe(true);
121
+ expect(detectSecurityImplications(['src/permissions.ts'])).toBe(true);
122
+ });
123
+ it('detects credential and secret files', () => {
124
+ expect(detectSecurityImplications(['credentials.json'])).toBe(true);
125
+ expect(detectSecurityImplications(['secrets.ts'])).toBe(true);
126
+ });
127
+ it('detects env files', () => {
128
+ expect(detectSecurityImplications(['.env'])).toBe(true);
129
+ expect(detectSecurityImplications(['.env.local'])).toBe(true);
130
+ });
131
+ it('ignores regular source files', () => {
132
+ expect(detectSecurityImplications(['src/utils/helper.ts'])).toBe(false);
133
+ expect(detectSecurityImplications(['src/components/Button.tsx'])).toBe(false);
134
+ });
135
+ });
136
+ describe('buildChangeMetadata', () => {
137
+ it('builds metadata with auto-detection', () => {
138
+ const files = ['src/auth/login.ts', 'src/config.ts'];
139
+ const metadata = buildChangeMetadata(files, 100, 'full');
140
+ expect(metadata.filesChanged).toBe(2);
141
+ expect(metadata.linesChanged).toBe(100);
142
+ expect(metadata.hasArchitecturalChanges).toBe(true);
143
+ expect(metadata.hasSecurityImplications).toBe(true);
144
+ expect(metadata.testCoverage).toBe('full');
145
+ });
146
+ it('defaults test coverage to partial', () => {
147
+ const metadata = buildChangeMetadata(['src/util.ts'], 50);
148
+ expect(metadata.testCoverage).toBe('partial');
149
+ });
150
+ });
151
+ describe('boundary values', () => {
152
+ it('returns STANDARD for exactly 5 files with full test coverage', () => {
153
+ const changes = {
154
+ filesChanged: 5,
155
+ linesChanged: 50,
156
+ hasArchitecturalChanges: false,
157
+ hasSecurityImplications: false,
158
+ testCoverage: 'full',
159
+ };
160
+ // 5 files is at the boundary - should NOT qualify for LIGHT (which requires < 5)
161
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
162
+ });
163
+ it('returns STANDARD for exactly 100 lines with full test coverage', () => {
164
+ const changes = {
165
+ filesChanged: 3,
166
+ linesChanged: 100,
167
+ hasArchitecturalChanges: false,
168
+ hasSecurityImplications: false,
169
+ testCoverage: 'full',
170
+ };
171
+ // 100 lines is at the boundary - should NOT qualify for LIGHT (which requires < 100)
172
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
173
+ });
174
+ it('returns THOROUGH for exactly 21 files', () => {
175
+ const changes = {
176
+ filesChanged: 21,
177
+ linesChanged: 100,
178
+ hasArchitecturalChanges: false,
179
+ hasSecurityImplications: false,
180
+ testCoverage: 'full',
181
+ };
182
+ // 21 files exceeds > 20 threshold
183
+ expect(selectVerificationTier(changes)).toBe('THOROUGH');
184
+ });
185
+ it('returns STANDARD for exactly 20 files', () => {
186
+ const changes = {
187
+ filesChanged: 20,
188
+ linesChanged: 100,
189
+ hasArchitecturalChanges: false,
190
+ hasSecurityImplications: false,
191
+ testCoverage: 'full',
192
+ };
193
+ // 20 files does NOT exceed > 20 threshold
194
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
195
+ });
196
+ });
197
+ describe('edge cases', () => {
198
+ it('handles testCoverage: none', () => {
199
+ const changes = {
200
+ filesChanged: 2,
201
+ linesChanged: 50,
202
+ hasArchitecturalChanges: false,
203
+ hasSecurityImplications: false,
204
+ testCoverage: 'none',
205
+ };
206
+ // No test coverage means it can't qualify for LIGHT
207
+ expect(selectVerificationTier(changes)).toBe('STANDARD');
208
+ });
209
+ it('handles empty file list in buildChangeMetadata', () => {
210
+ const metadata = buildChangeMetadata([], 0);
211
+ expect(metadata.filesChanged).toBe(0);
212
+ expect(metadata.linesChanged).toBe(0);
213
+ expect(metadata.hasArchitecturalChanges).toBe(false);
214
+ expect(metadata.hasSecurityImplications).toBe(false);
215
+ });
216
+ it('handles zero files and zero lines', () => {
217
+ const changes = {
218
+ filesChanged: 0,
219
+ linesChanged: 0,
220
+ hasArchitecturalChanges: false,
221
+ hasSecurityImplications: false,
222
+ testCoverage: 'full',
223
+ };
224
+ // 0 files and 0 lines with full coverage qualifies for LIGHT
225
+ expect(selectVerificationTier(changes)).toBe('LIGHT');
226
+ });
227
+ });
228
+ describe('false-positive prevention', () => {
229
+ describe('detectSecurityImplications', () => {
230
+ it('does NOT flag tokenizer.ts as security file', () => {
231
+ expect(detectSecurityImplications(['src/utils/tokenizer.ts'])).toBe(false);
232
+ });
233
+ it('does NOT flag StringTokenizer.ts as security file', () => {
234
+ expect(detectSecurityImplications(['src/lexer/StringTokenizer.ts'])).toBe(false);
235
+ });
236
+ it('does NOT flag secretariat.ts as security file', () => {
237
+ expect(detectSecurityImplications(['src/admin/secretariat.ts'])).toBe(false);
238
+ });
239
+ it('does NOT flag permissionless.ts as security file', () => {
240
+ expect(detectSecurityImplications(['src/blockchain/permissionless.ts'])).toBe(false);
241
+ });
242
+ it('DOES flag auth/token.ts as security file', () => {
243
+ expect(detectSecurityImplications(['src/auth/token.ts'])).toBe(true);
244
+ });
245
+ it('DOES flag secrets.yaml as security file', () => {
246
+ expect(detectSecurityImplications(['config/secrets.yaml'])).toBe(true);
247
+ });
248
+ it('DOES flag .env.local as security file', () => {
249
+ expect(detectSecurityImplications(['.env.local'])).toBe(true);
250
+ });
251
+ it('DOES flag permissions.ts as security file', () => {
252
+ expect(detectSecurityImplications(['src/permissions.ts'])).toBe(true);
253
+ });
254
+ it('DOES flag oauth2.ts as security file', () => {
255
+ expect(detectSecurityImplications(['src/auth/oauth2.ts'])).toBe(true);
256
+ });
257
+ it('DOES flag oauth2-client.ts as security file', () => {
258
+ expect(detectSecurityImplications(['src/oauth2-client.ts'])).toBe(true);
259
+ });
260
+ it('DOES flag jwt_utils.ts as security file', () => {
261
+ expect(detectSecurityImplications(['src/jwt_utils.ts'])).toBe(true);
262
+ });
263
+ });
264
+ describe('detectArchitecturalChanges', () => {
265
+ it('does NOT flag barrel index.ts as architectural', () => {
266
+ expect(detectArchitecturalChanges(['src/components/index.ts'])).toBe(false);
267
+ });
268
+ it('does NOT flag nested barrel index.ts as architectural', () => {
269
+ expect(detectArchitecturalChanges(['src/utils/helpers/index.ts'])).toBe(false);
270
+ });
271
+ it('DOES still flag config.ts as architectural', () => {
272
+ expect(detectArchitecturalChanges(['src/config.ts'])).toBe(true);
273
+ });
274
+ it('DOES still flag package.json as architectural', () => {
275
+ expect(detectArchitecturalChanges(['package.json'])).toBe(true);
276
+ });
277
+ it('DOES still flag tsconfig.json as architectural', () => {
278
+ expect(detectArchitecturalChanges(['tsconfig.json'])).toBe(true);
279
+ });
280
+ });
281
+ });
282
+ //# sourceMappingURL=tier-selector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-selector.test.js","sourceRoot":"","sources":["../../src/verification/tier-selector.test.ts"],"names":[],"mappings":"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"}
package/docs/AGENTS.md CHANGED
@@ -79,7 +79,7 @@ Use raw GitHub URLs for external accessibility:
79
79
  Use consistent version heading format with blank line after heading:
80
80
 
81
81
  ```markdown
82
- ## v3.8.16 Changes
82
+ ## v3.8.17 Changes
83
83
 
84
84
  - Feature A
85
85
  - Feature B