vigiles 2.0.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 (156) hide show
  1. package/.claude/settings.json +46 -0
  2. package/.claude/settings.local.json +8 -0
  3. package/.claude-plugin/hooks/post-edit.sh +34 -0
  4. package/.claude-plugin/hooks/pre-edit.sh +40 -0
  5. package/.claude-plugin/hooks/session-start.sh +38 -0
  6. package/.claude-plugin/marketplace.json +14 -0
  7. package/.claude-plugin/plugin.json +47 -0
  8. package/.github/workflows/ci.yml +81 -0
  9. package/.prettierignore +1 -0
  10. package/.vigiles/generated.d.ts +205 -0
  11. package/CLAUDE.md +95 -0
  12. package/CLAUDE.md.spec.ts +142 -0
  13. package/CONTRIBUTING.md +121 -0
  14. package/LICENSE +21 -0
  15. package/README.md +377 -0
  16. package/action.yml +25 -0
  17. package/dist/action.d.ts +7 -0
  18. package/dist/action.d.ts.map +1 -0
  19. package/dist/action.js +180 -0
  20. package/dist/action.js.map +1 -0
  21. package/dist/cli.d.ts +12 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +1267 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/cli.test.d.ts +2 -0
  26. package/dist/cli.test.d.ts.map +1 -0
  27. package/dist/cli.test.js +650 -0
  28. package/dist/cli.test.js.map +1 -0
  29. package/dist/compile.d.ts +101 -0
  30. package/dist/compile.d.ts.map +1 -0
  31. package/dist/compile.js +503 -0
  32. package/dist/compile.js.map +1 -0
  33. package/dist/evolve.d.ts +132 -0
  34. package/dist/evolve.d.ts.map +1 -0
  35. package/dist/evolve.js +599 -0
  36. package/dist/evolve.js.map +1 -0
  37. package/dist/freshness.d.ts +67 -0
  38. package/dist/freshness.d.ts.map +1 -0
  39. package/dist/freshness.js +244 -0
  40. package/dist/freshness.js.map +1 -0
  41. package/dist/freshness.test.d.ts +2 -0
  42. package/dist/freshness.test.d.ts.map +1 -0
  43. package/dist/freshness.test.js +356 -0
  44. package/dist/freshness.test.js.map +1 -0
  45. package/dist/generate-types.d.ts +34 -0
  46. package/dist/generate-types.d.ts.map +1 -0
  47. package/dist/generate-types.js +381 -0
  48. package/dist/generate-types.js.map +1 -0
  49. package/dist/inline.d.ts +58 -0
  50. package/dist/inline.d.ts.map +1 -0
  51. package/dist/inline.js +142 -0
  52. package/dist/inline.js.map +1 -0
  53. package/dist/inline.test.d.ts +5 -0
  54. package/dist/inline.test.d.ts.map +1 -0
  55. package/dist/inline.test.js +152 -0
  56. package/dist/inline.test.js.map +1 -0
  57. package/dist/linters.d.ts +38 -0
  58. package/dist/linters.d.ts.map +1 -0
  59. package/dist/linters.js +588 -0
  60. package/dist/linters.js.map +1 -0
  61. package/dist/proofs.d.ts +272 -0
  62. package/dist/proofs.d.ts.map +1 -0
  63. package/dist/proofs.js +622 -0
  64. package/dist/proofs.js.map +1 -0
  65. package/dist/proofs.test.d.ts +9 -0
  66. package/dist/proofs.test.d.ts.map +1 -0
  67. package/dist/proofs.test.js +952 -0
  68. package/dist/proofs.test.js.map +1 -0
  69. package/dist/spec.d.ts +258 -0
  70. package/dist/spec.d.ts.map +1 -0
  71. package/dist/spec.js +113 -0
  72. package/dist/spec.js.map +1 -0
  73. package/dist/spec.test.d.ts +2 -0
  74. package/dist/spec.test.d.ts.map +1 -0
  75. package/dist/spec.test.js +1222 -0
  76. package/dist/spec.test.js.map +1 -0
  77. package/dist/types.d.ts +101 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +3 -0
  80. package/dist/types.js.map +1 -0
  81. package/dist/validate.d.ts +10 -0
  82. package/dist/validate.d.ts.map +1 -0
  83. package/dist/validate.js +286 -0
  84. package/dist/validate.js.map +1 -0
  85. package/dist/validate.test.d.ts +2 -0
  86. package/dist/validate.test.d.ts.map +1 -0
  87. package/dist/validate.test.js +531 -0
  88. package/dist/validate.test.js.map +1 -0
  89. package/docs/agent-setup.md +85 -0
  90. package/docs/agent-workflows.md +103 -0
  91. package/docs/comparison.md +71 -0
  92. package/docs/freshness.md +124 -0
  93. package/docs/inline-mode.md +119 -0
  94. package/docs/linter-support.md +166 -0
  95. package/docs/spec-format.md +194 -0
  96. package/eslint.config.mjs +79 -0
  97. package/examples/CLAUDE.md +54 -0
  98. package/examples/CLAUDE.md.spec.ts +65 -0
  99. package/examples/SKILL.md +50 -0
  100. package/examples/SKILL.md.spec.ts +57 -0
  101. package/fixtures/example-project/CLAUDE.md +11 -0
  102. package/fixtures/example-project/package.json +9 -0
  103. package/fixtures/example-project/src/index.ts +3 -0
  104. package/fixtures/example-project/src/utils.test.ts +2 -0
  105. package/fixtures/example-project/src/utils.ts +3 -0
  106. package/logo.png +0 -0
  107. package/package.json +42 -0
  108. package/research/adoption-strategy.md +111 -0
  109. package/research/agent-integration.md +145 -0
  110. package/research/ai-code-quality.md +197 -0
  111. package/research/code-search-for-agents.md +313 -0
  112. package/research/competitive-landscape.md +163 -0
  113. package/research/doc-freshness.md +516 -0
  114. package/research/executable-specs.md +368 -0
  115. package/research/feature-ideas.md +464 -0
  116. package/research/formal-proofs-for-agents.md +338 -0
  117. package/research/fp-for-agent-harness.md +150 -0
  118. package/research/fp-for-deterministic-ai.md +131 -0
  119. package/research/self-evolving-specs.md +298 -0
  120. package/schemas/claude-md-strict.yml +18 -0
  121. package/schemas/claude-md.yml +6 -0
  122. package/schemas/skill-strict.yml +12 -0
  123. package/schemas/skill.yml +5 -0
  124. package/skills/audit-feedback-loop/SKILL.md +76 -0
  125. package/skills/edit-spec/SKILL.md +131 -0
  126. package/skills/enforce-rules-format/SKILL.md +71 -0
  127. package/skills/generate-logo/SKILL.md +102 -0
  128. package/skills/generate-rule/SKILL.md +90 -0
  129. package/skills/linter-docs/clippy.md +241 -0
  130. package/skills/linter-docs/eslint.md +384 -0
  131. package/skills/linter-docs/pylint.md +288 -0
  132. package/skills/linter-docs/rubocop.md +277 -0
  133. package/skills/linter-docs/ruff.md +187 -0
  134. package/skills/linter-docs/stylelint.md +247 -0
  135. package/skills/migrate-to-spec/SKILL.md +124 -0
  136. package/skills/pr-to-lint-rule/SKILL.md +97 -0
  137. package/skills/strengthen/SKILL.md +168 -0
  138. package/src/action.ts +214 -0
  139. package/src/cli.test.ts +914 -0
  140. package/src/cli.ts +1631 -0
  141. package/src/compile.ts +691 -0
  142. package/src/evolve.ts +781 -0
  143. package/src/freshness.test.ts +449 -0
  144. package/src/freshness.ts +299 -0
  145. package/src/generate-types.ts +448 -0
  146. package/src/inline.test.ts +206 -0
  147. package/src/inline.ts +164 -0
  148. package/src/linters.ts +739 -0
  149. package/src/proofs.test.ts +1314 -0
  150. package/src/proofs.ts +849 -0
  151. package/src/spec.test.ts +1471 -0
  152. package/src/spec.ts +427 -0
  153. package/src/types.ts +117 -0
  154. package/src/validate.test.ts +701 -0
  155. package/src/validate.ts +381 -0
  156. package/tsconfig.json +23 -0
@@ -0,0 +1,272 @@
1
+ /**
2
+ * vigiles — Deterministic proof system for self-evolving specifications.
3
+ *
4
+ * Six algorithms that verify spec mutations without any LLM dependency:
5
+ *
6
+ * 1. MonotonicityLattice — rules can only strengthen over time
7
+ * 2. ncd() — information-theoretic duplicate detection
8
+ * 3. BloomFilter — fast approximate set membership
9
+ * 4. fixedPoint() — compilation convergence detection
10
+ * 5. MerkleHistory — tamper-evident spec evolution audit trail
11
+ * 6. propertyTest() — random mutation + invariant checking
12
+ */
13
+ import type { Rule, ClaudeSpec } from "./spec.js";
14
+ export interface MonotonicityViolation {
15
+ ruleId: string;
16
+ from: Rule["_kind"];
17
+ to: Rule["_kind"];
18
+ fromStrength: number;
19
+ toStrength: number;
20
+ }
21
+ export interface MonotonicityResult {
22
+ valid: boolean;
23
+ violations: MonotonicityViolation[];
24
+ added: string[];
25
+ removed: string[];
26
+ strengthened: string[];
27
+ unchanged: string[];
28
+ }
29
+ /**
30
+ * Check that a spec mutation is monotonic: existing rules only strengthen.
31
+ *
32
+ * - Adding rules: always allowed
33
+ * - Removing rules: flagged (informational, not a violation by default)
34
+ * - Strengthening (guidance → check → enforce): allowed
35
+ * - Weakening (enforce → guidance): violation unless allowWeaken includes the rule ID
36
+ */
37
+ export declare function checkMonotonicity(before: Record<string, Rule>, after: Record<string, Rule>, options?: {
38
+ allowWeaken?: Set<string>;
39
+ }): MonotonicityResult;
40
+ /**
41
+ * Compute the join (least upper bound) of two rule kinds in the lattice.
42
+ * join(guidance, enforce) = enforce
43
+ */
44
+ export declare function latticeJoin(a: Rule["_kind"], b: Rule["_kind"]): Rule["_kind"];
45
+ /**
46
+ * Compute the meet (greatest lower bound) of two rule kinds in the lattice.
47
+ * meet(guidance, enforce) = guidance
48
+ */
49
+ export declare function latticeMeet(a: Rule["_kind"], b: Rule["_kind"]): Rule["_kind"];
50
+ /** Get the numeric strength of a rule kind. */
51
+ export declare function ruleStrength(kind: Rule["_kind"]): number;
52
+ /**
53
+ * Normalized Compression Distance — information-theoretic similarity.
54
+ *
55
+ * NCD(x, y) = (C(xy) - min(C(x), C(y))) / max(C(x), C(y))
56
+ *
57
+ * Range: [0, 1+ε] where 0 = identical information content.
58
+ * Deterministic. No model dependency. Approximates the universal distance metric.
59
+ *
60
+ * Reference: Li, Chen, Li, Ma, Vitányi (2004) "The Similarity Metric"
61
+ */
62
+ export declare function ncd(a: string, b: string): number;
63
+ export interface NCDPair {
64
+ idA: string;
65
+ idB: string;
66
+ distance: number;
67
+ }
68
+ /**
69
+ * Find all rule pairs with NCD below a similarity threshold.
70
+ * Returns pairs sorted by distance (most similar first).
71
+ */
72
+ export declare function findSimilarRules(rules: Record<string, Rule>, threshold?: number): NCDPair[];
73
+ /**
74
+ * Bloom filter — space-efficient probabilistic set membership.
75
+ *
76
+ * Insert elements, then query "is X possibly in the set?"
77
+ * False positives possible. False negatives impossible.
78
+ *
79
+ * Optimal parameters:
80
+ * m = -(n × ln(p)) / (ln2)² (bit array size)
81
+ * k = (m / n) × ln2 (hash function count)
82
+ *
83
+ * Reference: Bloom (1970) "Space/Time Trade-offs in Hash Coding"
84
+ */
85
+ export declare class BloomFilter {
86
+ private readonly bits;
87
+ private readonly numHashes;
88
+ readonly size: number;
89
+ private _count;
90
+ /**
91
+ * Create a Bloom filter.
92
+ * @param expectedItems Expected number of items to insert
93
+ * @param falsePositiveRate Desired false positive rate (0-1)
94
+ */
95
+ constructor(expectedItems: number, falsePositiveRate?: number);
96
+ /** Number of items inserted. */
97
+ get count(): number;
98
+ /** Theoretical false positive rate given current fill. */
99
+ get estimatedFPR(): number;
100
+ /** Insert an element. */
101
+ add(item: string): void;
102
+ /** Query membership. Returns true if the item MIGHT be in the set. */
103
+ has(item: string): boolean;
104
+ /**
105
+ * Estimate the Jaccard similarity between two Bloom filters.
106
+ * Uses bit-level comparison — no need to know the original elements.
107
+ */
108
+ static jaccardSimilarity(a: BloomFilter, b: BloomFilter): number;
109
+ }
110
+ /**
111
+ * Build a Bloom filter from a rule's tokens.
112
+ * Tokenizes rule text into words and n-grams for fuzzy matching.
113
+ */
114
+ export declare function ruleToBloomFilter(rule: Rule, expectedTokens?: number): BloomFilter;
115
+ export interface FixedPointResult {
116
+ converged: boolean;
117
+ iterations: number;
118
+ /** Hash at each iteration. */
119
+ hashes: string[];
120
+ /** If not converged, the cycle length (0 = no cycle detected within maxIterations). */
121
+ cycleLength: number;
122
+ }
123
+ /**
124
+ * Detect whether a compile function reaches a fixed point.
125
+ *
126
+ * A fixed point means: applying the function again produces the same output.
127
+ * compile(compile(spec)) === compile(spec)
128
+ *
129
+ * If the function doesn't converge, detects cycles using Floyd's
130
+ * tortoise-and-hare algorithm adapted for hash sequences.
131
+ *
132
+ * @param compileFn A function that takes content and returns new content
133
+ * @param initialContent Starting content
134
+ * @param maxIterations Maximum iterations before declaring divergence
135
+ */
136
+ export declare function fixedPoint(compileFn: (content: string) => string, initialContent: string, maxIterations?: number): FixedPointResult;
137
+ export interface Mutation {
138
+ type: "add" | "remove" | "strengthen" | "weaken" | "merge" | "reword";
139
+ ruleIds: string[];
140
+ description: string;
141
+ }
142
+ export interface ProofReceipt {
143
+ name: string;
144
+ passed: boolean;
145
+ detail?: string;
146
+ }
147
+ export interface HistoryNode {
148
+ /** SHA-256 hash of this node (covers all fields except `hash` itself). */
149
+ hash: string;
150
+ /** Hash of the parent node ("genesis" for the first node). */
151
+ parentHash: string;
152
+ /** Hash of the compiled spec content at this version. */
153
+ specHash: string;
154
+ /** What mutation was applied. */
155
+ mutation: Mutation;
156
+ /** Proof receipts — which proofs ran and their results. */
157
+ proofs: ProofReceipt[];
158
+ /** Unix timestamp (ms). */
159
+ timestamp: number;
160
+ }
161
+ /**
162
+ * Merkle history — append-only, tamper-evident spec evolution log.
163
+ *
164
+ * Each node's hash covers its parent hash, creating a chain where
165
+ * tampering with any node invalidates all descendants.
166
+ */
167
+ /**
168
+ * Read-only view of a MerkleHistory — exposes inspection methods but no
169
+ * append/mutation surface. Callers that only need to read the audit trail
170
+ * should depend on this instead of MerkleHistory to prevent bypassing the
171
+ * engine's validation gates.
172
+ */
173
+ export interface ReadonlyMerkleHistory {
174
+ readonly length: number;
175
+ head(): HistoryNode | null;
176
+ getNodes(): readonly HistoryNode[];
177
+ verify(): {
178
+ valid: boolean;
179
+ invalidAt: number;
180
+ };
181
+ toJSON(): string;
182
+ }
183
+ export declare class MerkleHistory implements ReadonlyMerkleHistory {
184
+ private nodes;
185
+ /** Number of versions in the history. */
186
+ get length(): number;
187
+ /**
188
+ * Get all nodes as a deep defensive copy. Callers cannot mutate node
189
+ * fields (specHash, mutation, proofs) through this API — that would
190
+ * bypass append/proof gates and weaken the tamper-evident guarantees.
191
+ */
192
+ getNodes(): readonly HistoryNode[];
193
+ /**
194
+ * Get the latest node, or null if empty. Returned as a deep defensive
195
+ * copy — see getNodes() for rationale.
196
+ */
197
+ head(): HistoryNode | null;
198
+ /**
199
+ * Append a new version to the history.
200
+ * Returns the hash of the new node.
201
+ */
202
+ append(specHash: string, mutation: Mutation, proofs: ProofReceipt[]): string;
203
+ /**
204
+ * Verify the entire chain — every node's hash must be correct,
205
+ * and every parent pointer must match the previous node.
206
+ *
207
+ * Returns the index of the first invalid node, or -1 if valid.
208
+ */
209
+ verify(): {
210
+ valid: boolean;
211
+ invalidAt: number;
212
+ };
213
+ /**
214
+ * Serialize the history to JSON for persistence.
215
+ */
216
+ toJSON(): string;
217
+ /**
218
+ * Deserialize a history from JSON. Rejects non-array payloads and
219
+ * validates that each entry has the required HistoryNode shape so
220
+ * malformed persisted data can't produce a "valid" history that
221
+ * later crashes on append/verify.
222
+ */
223
+ static fromJSON(json: string): MerkleHistory;
224
+ }
225
+ export type MutationGenerator<T> = (value: T, seed: number) => T;
226
+ export type Invariant<T> = (value: T) => boolean;
227
+ export interface PropertyTestResult<T> {
228
+ passed: boolean;
229
+ iterations: number;
230
+ /** If failed, the mutation sequence that caused the failure. */
231
+ failingSequence?: T[];
232
+ /** If failed, the minimal shrunk counterexample. */
233
+ shrunk?: T;
234
+ /** Name of the invariant that failed. */
235
+ failedInvariant?: string;
236
+ }
237
+ /**
238
+ * Property-based testing: generate random mutations, check invariants hold.
239
+ *
240
+ * Inspired by QuickCheck/fast-check. Uses a deterministic PRNG for
241
+ * reproducible failures.
242
+ *
243
+ * @param initial Starting value
244
+ * @param mutate Function that produces a random mutation
245
+ * @param invariants Named invariant functions that must all return true
246
+ * @param options Test parameters
247
+ */
248
+ export declare function propertyTest<T>(initial: T, mutate: MutationGenerator<T>, invariants: Record<string, Invariant<T>>, options?: {
249
+ iterations?: number;
250
+ seed?: number;
251
+ sequenceLength?: number;
252
+ }): PropertyTestResult<T>;
253
+ export interface FitnessResult {
254
+ score: number;
255
+ coverage: number;
256
+ redundancy: number;
257
+ budgetPressure: number;
258
+ }
259
+ /**
260
+ * Compute the fitness of a spec. Higher is better.
261
+ *
262
+ * fitness = coverage × (1 - redundancy) × (1 - budgetPressure)
263
+ *
264
+ * - coverage: fraction of rules with enforcement (check or enforce)
265
+ * - redundancy: fraction of rule pairs that are near-duplicates (NCD < threshold)
266
+ * - budgetPressure: tokens used / max tokens
267
+ */
268
+ export declare function fitness(spec: ClaudeSpec, options?: {
269
+ maxTokens?: number;
270
+ ncdThreshold?: number;
271
+ }): FitnessResult;
272
+ //# sourceMappingURL=proofs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proofs.d.ts","sourceRoot":"","sources":["../src/proofs.ts"],"names":[],"mappings":"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"}