enigma-cli 1.57.0 → 1.57.2

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.
@@ -7,6 +7,6 @@
7
7
  "minimalCode"
8
8
  ],
9
9
  "updated": "2026-07-17T00:17:02+02:00",
10
- "cliVersion": "1.57.0",
10
+ "cliVersion": "1.57.2",
11
11
  "sha": "3f0dcc28341bb0407860534f7ce9314cfc91b5e673f8f3d13b89d61851ed75f6"
12
12
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "On-demand over-engineering review - diff review, whole-repo audit, and enigma: debt-marker ledger (tags delete/stdlib/native/yagni/shrink, line/dep scoring); lists cuts, applies nothing.",
6
6
  "updated": "2026-06-16T11:24:30+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "f742a2be3f328b9ea1ff9a35a449177c2cbec35ad16e46f7054b7a873a2ab017"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Backend/API architecture: controller-service-repository layering, modern TypeScript project configuration (module resolution, strict flags, @/* path alias), API and request optimization (batching, avoiding redundant calls, skipping no-op writes), server-side caching (Redis), and Zod boundary validation.",
6
6
  "updated": "2026-08-02T19:59:01+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "652637f818b4ce4f4d5d83fa68fa57fe7842e32fb179523958c5496af54bb938"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Ciphera code style conventions (formatting, naming, imports incl. namespace imports for wide module surfaces, path-alias specifiers and no file extensions, comments, code-level anti-patterns; TypeScript-first, language-agnostic).",
6
6
  "updated": "2026-08-02T19:59:01+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "3beb0383a9cb0331ef8a579308a2517d24d57a8ba33751ad17d16d0a4f66e344"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Pre-delivery self-review gate, prioritized review dimensions, and change-quality criteria.",
6
6
  "updated": "2026-08-19T12:37:59+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "6b8a924cc11b61d4b45b73384aeb095ce622229359b7cc2c6ce4bb0cf3015ed7"
9
9
  }
@@ -7,6 +7,6 @@
7
7
  "codeGraph"
8
8
  ],
9
9
  "updated": "2026-08-15T20:49:24+02:00",
10
- "cliVersion": "1.57.0",
10
+ "cliVersion": "1.57.2",
11
11
  "sha": "95b7202e5659f8d9d6f11ce29e7dc5b01575ba86c78ef948bec4753ccf430155"
12
12
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Senior database architecture policy: engine selection (PostgreSQL by default, SQLite only for local-first/embedded stores), ORM selection (Prisma in TypeScript/JavaScript), query optimization, anti-duplication/normalization, scalability, and RGPD/GDPR encryption.",
6
6
  "updated": "2026-08-04T18:33:27+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "26fddc14caf697e830448a2cc453ddc470fe83d098d50bd67b278effba63274e"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Reproduce-isolate-fix debugging methodology with root-cause discipline and regression verification.",
6
6
  "updated": "2026-08-02T04:15:47+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "968876bcac9ce6e5a20be05c89ac97191b112c9e08679a8dc506d150c375fec4"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Dependency and supply-chain security: lockfiles and reproducible installs, version pinning, vulnerability auditing, vetting/minimizing packages, vendoring, and SBOM/provenance.",
6
6
  "updated": "2026-06-01T00:45:28+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "6375d835c2aef2c9bd31ce116444dc3d796f510f9970a213aa3ac4696d7e21b9"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Transactional email: React Email templates instead of hand-written HTML tables, server-side rendering, one send module behind the provider SDK, plain-text alternatives, idempotent background sending, link safety, and deliverability (SPF/DKIM/DMARC, bounce suppression, unsubscribe).",
6
6
  "updated": "2026-09-28T21:34:15+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "648c7ae3d95d5a033f4955a87613e20b40b265bfcc24d41a5732d415abe778f9"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one.",
6
6
  "updated": "2026-09-28T21:34:15+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "5d532c2dc467f960ff800c5cd7021db09911599347959cd04481f2054abd9baa"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Frontend architecture: reusable components, abstraction thresholds, state management, real-time form validation where an emptied or not-yet-filled field is incomplete rather than invalid (a `*` on the label and an aria-disabled submit, never \"email is not valid\" over an empty input), no-op detection (skip any operation whose result equals current state, not just form saves; dirty means different from the loaded snapshot, not touched), instant first paint (render the shell, load data async, skeletons), perceived performance (prefetch on intent, debounce/throttle, cancel stale requests, avoid waterfalls, lazy widgets), large-list rendering (infinite scroll is the preferred default, pagination the deliberate exception when the design or the user calls for it, virtualization, skeletons, progressive loading), data views that ship their own affordances by default (a log, expense, transaction or history table is not done when the rows render: fuse.js search, the filters its column kinds imply, a date range, sort, filter state in the URL, and an export of the filtered set), every reference to an entity being a way into it (a name, id, project or path in a row links to that record, reveals it in a hover card, or at minimum copies and filters by it, never inert text; machine codes get human labels and raw payloads are never dumped into a cell), optimistic UI with rollback, visual restraint (one card level, spacing before borders, one elevation scale), icon actions (repeated row/card actions are icon-only buttons with aria-label plus title, not text labels), responsive/adaptive layout (fluid units, breakpoints, no overlap/overflow, viewport meta, touch targets), form fields that declare their keyboard and casing (autocapitalize/autocomplete/inputmode per field kind, set once in the shared Input, normalized on blur), variable-length text (min-width:0 in flex/grid, wrap vs truncate, long unbroken strings, worst-case content checks), auth screens (breached-password feedback, strength meter, cookie consent before login/register), and AI chat/agent interfaces via Vercel's AI Elements registry instead of hand-rolled message threads.",
6
6
  "updated": "2026-10-02T12:11:30+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "2571746934548e64ee30348bbf29b1d971d3afa0a7b32277b137150bf8803f90"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Git & contribution policy (senior engineering standards).",
6
6
  "updated": "2026-10-02T14:54:11+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "c6ffef058397ac22310053af1f96d768c36eb8761336258cfef2b97cff3fb0e9"
9
9
  }
@@ -7,6 +7,6 @@
7
7
  "logoColorPolicy"
8
8
  ],
9
9
  "updated": "2026-07-17T00:17:02+02:00",
10
- "cliVersion": "1.57.0",
10
+ "cliVersion": "1.57.2",
11
11
  "sha": "09cdbefd98625b02a7d03685e5deed128238ff8454a83fe22279610fe3ef8ddf"
12
12
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Application and AI-agent security: secrets, authn/authz (least privilege, object- and role-level checks), credential flows with breach-checked passwords (Have I Been Pwned), OWASP Top 10 with vetted helpers for SSRF, redirects and uploads, transport/crypto baseline, cookies and consent, secure logging, and agent/MCP/tool-use safety.",
6
6
  "updated": "2026-09-28T21:34:15+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "544359122f127cccedfe469232da915b04f7f4aa4795297281bd4bc9cd07d371"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Create new skills, modify and improve existing skills, and measure skill performance with evals and benchmarks.",
6
6
  "updated": "2026-08-03T00:16:54+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "a49f6166f57d734e0f13487332da37903e925f32257447856af0fbd6a5f1dc84"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Exhaustive completion discipline for long/multi-item tasks - inventory, coverage ledger, verified done.",
6
6
  "updated": "2026-10-02T12:38:13+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "ee8447d5ca9e5d77e0a338d1e762c30e1527ded4665c10ddf21f2c4c9ce3f2d5"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Concise, realistic copy for UI, landing/sales, SEO, email and docs - the user's outcome instead of the mechanism, no full enumerations or \"powered by\" lineage, none of the recognizable AI-writing tells, and never a typographic dash.",
6
6
  "updated": "2026-09-28T21:34:15+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "e32623f37f1bf90fa611968ca8b216e3381771254b6af7c81a953c17a8889ddb"
9
9
  }
@@ -4,6 +4,6 @@
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Test strategy, coverage gates, deterministic tests, mocking discipline, regression-first bug fixing, and test-suite organization (layout by type/domain, mirrored paths, file naming, fixture/helper placement).",
6
6
  "updated": "2026-06-16T17:11:49+02:00",
7
- "cliVersion": "1.57.0",
7
+ "cliVersion": "1.57.2",
8
8
  "sha": "3bdf591057b760f674fb2b1425f63acb426cda2c4f042e1a74c5a5d3807df664"
9
9
  }
@@ -74,7 +74,7 @@ Per field kind (defaults - override only with a reason):
74
74
 
75
75
  | Field | Normalizes to |
76
76
  | --- | --- |
77
- | Email | trim, lowercase, then validate. Store it lowercased so lookups and uniqueness never miss. |
77
+ | Email | trim, lowercase, then validate with the project's existing email check or the schema library's (`z.email()`, Pydantic `EmailStr`), never a regex written for this one form - `/^[^\s@]+@[^\s@]+\.[^\s@]+$/` accepts `user@example.com,`. Store it lowercased so lookups and uniqueness never miss. |
78
78
  | Person name (full name, first, last) | trim, collapse inner spaces, uppercase the first letter of every word - and ONLY that letter, so `McDonald`, `O'Brien`, `van der Berg` and `Jean-Luc` survive. Split on spaces, hyphens and apostrophes. |
79
79
  | Username, handle, slug | trim, drop a leading `@`, lowercase when the identifier is case-insensitive, then check the allowed character set. |
80
80
  | Profile link (LinkedIn, GitHub, X, Instagram) | accept BOTH a full URL and a bare handle, canonicalize to one stored form, check the host is the expected domain, and drop query and tracking parameters. |
@@ -3,7 +3,7 @@
3
3
  "version": "1.5.1",
4
4
  "provider": "FJRG2007/enigma",
5
5
  "description": "Strict frontend + backend schema validation, normalization before validation (shared normalizers: trim, lowercase email, capitalize names, canonicalize links and handles), real-time error timing (an emptied or not-yet-filled field is incomplete, not invalid: a `*` and an aria-disabled submit instead of \"not valid\" over an empty input), schema consistency, and safe client-facing error handling.",
6
- "updated": "2026-08-11T17:10:56+02:00",
7
- "cliVersion": "1.57.0",
8
- "sha": "24928a4c9eed28ebede9f23f746b09a9d3d8176f8fcca61a7780a853fa5bed4e"
6
+ "updated": "2026-10-02T19:07:57+02:00",
7
+ "cliVersion": "1.57.2",
8
+ "sha": "7b39ded6b82cb7a8424aea7b8d59a293791205d57e7272ff63d9fa558772ecb1"
9
9
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "enigma-darwin-arm64": "e4a30cd15dd1882d0775b507b551f8ab15b8841267bd02a5728cb68e8a1920ad",
3
- "enigma-linux-arm64": "c58e0e148df8313d1409ade5b1965a763630dc5bf95271ab70cb2bb3bedc8773",
4
- "enigma-linux-x64": "a7333ff89321a4180d70fe58de8848df8d37e89de69ac572a9c4cabd0d2b2784",
5
- "enigma-win32-x64.exe": "d872bf3244b0f6dd36ab34cd4752daabe74946d4e46e6bc561c5e65351ea1968"
2
+ "enigma-darwin-arm64": "a74a93de9dca9df4e91a71b679c2152a0abc6ada699990f9528d1764144fb1b7",
3
+ "enigma-linux-arm64": "6f996233da43d811ffcffb6554c610995268d24ca4ad1d72fa54a3f34ebe09ce",
4
+ "enigma-linux-x64": "a5b2c5ea2e4e402f30a0e6a84c8d810efe719060f152601c9c80b27252f1553f",
5
+ "enigma-win32-x64.exe": "72841174cff65ccbfd28bead7853bb7d4bdcfcfc56df71bcac3dff565478cb28"
6
6
  }
@@ -821,6 +821,42 @@ var BUILTIN_RULES = [
821
821
  severity: "block",
822
822
  skill: "frontend-policy"
823
823
  },
824
+ {
825
+ id: "val-email-regex-hand-rolled",
826
+ label: "Email validated by a hand-written regex",
827
+ files: ["*.tsx", "*.jsx", "*.ts", "*.js", "*.mts", "*.cts", "*.mjs", "*.vue", "*.svelte", "*.astro"],
828
+ excludeFiles: [
829
+ "*.test.*",
830
+ "*.spec.*",
831
+ "*.stories.*",
832
+ "**/tests/**",
833
+ "**/__tests__/**",
834
+ "**/dist/**",
835
+ "dist/**",
836
+ "**/build/**",
837
+ "build/**",
838
+ "**/node_modules/**"
839
+ ],
840
+ scope: "file",
841
+ // An ANCHORED regex shaped like an email (`^<class>+@<class>+\.`) is a validator, and an
842
+ // agent writes a fresh one per form instead of reusing the project's. The usual shape,
843
+ // /^[^\s@]+@[^\s@]+\.[^\s@]+$/, accepts "user@example.com," - a real report: a form
844
+ // validated its own copy while the rest of the project had a proper check. The anchor is
845
+ // what separates validation from extraction and redaction (PII masks, linkifiers, log
846
+ // scrubbers are unanchored and legitimate). MEASURED over 128669 code files of real
847
+ // repositories on the author's machine: 114 hits, every one a hand-rolled email-shaped
848
+ // validator (one project carried 20+ copies of the same line); the only non-email ones
849
+ // were email-SHAPED formats (NIP-05, Lightning addresses), which is what the marker is for.
850
+ // Git URLs, IRC prefixes and chat JIDs (`[^@/]+@github\.com`, `(\d+)@c\.us`) do not match:
851
+ // the domain part must itself be a quantified class followed by an escaped dot.
852
+ pattern: "\\^\\(?(?:\\[[^\\]\\n]*\\]|\\\\[Sw]|[^\\s\\\\])[+*]\\)?@\\(?(?:\\[[^\\]\\n]*\\]|\\\\[Sw]|[^\\s\\\\])[+*]\\)?\\\\\\.",
853
+ absent: "enigma:allow-email-regex",
854
+ // DIFF stage: the corpus is full of these, so only a validator the agent just wrote fires.
855
+ stage: "diff",
856
+ message: "Email validated with a hand-written regex. Reuse the project's existing email validation (its shared schema or helper - search for it before writing one) or the schema library's own check (`z.string().email()` / `z.email()`, Pydantic `EmailStr`), normalized first (trim, lowercase). The common shape /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/ accepts \"user@example.com,\" and a copy per form drifts from the rest. If this IS the one shared validator, or the format is only email-shaped (NIP-05, a Lightning address), mark the line `enigma:allow-email-regex` (validation-policy).",
857
+ severity: "block",
858
+ skill: "validation-policy"
859
+ },
824
860
  {
825
861
  id: "fe-skeleton-loading",
826
862
  label: "Skeletons over blank/spinner loading",
package/dist/post-edit.js CHANGED
@@ -3237,6 +3237,42 @@ var init_guardrails = __esm({
3237
3237
  severity: "block",
3238
3238
  skill: "frontend-policy"
3239
3239
  },
3240
+ {
3241
+ id: "val-email-regex-hand-rolled",
3242
+ label: "Email validated by a hand-written regex",
3243
+ files: ["*.tsx", "*.jsx", "*.ts", "*.js", "*.mts", "*.cts", "*.mjs", "*.vue", "*.svelte", "*.astro"],
3244
+ excludeFiles: [
3245
+ "*.test.*",
3246
+ "*.spec.*",
3247
+ "*.stories.*",
3248
+ "**/tests/**",
3249
+ "**/__tests__/**",
3250
+ "**/dist/**",
3251
+ "dist/**",
3252
+ "**/build/**",
3253
+ "build/**",
3254
+ "**/node_modules/**"
3255
+ ],
3256
+ scope: "file",
3257
+ // An ANCHORED regex shaped like an email (`^<class>+@<class>+\.`) is a validator, and an
3258
+ // agent writes a fresh one per form instead of reusing the project's. The usual shape,
3259
+ // /^[^\s@]+@[^\s@]+\.[^\s@]+$/, accepts "user@example.com," - a real report: a form
3260
+ // validated its own copy while the rest of the project had a proper check. The anchor is
3261
+ // what separates validation from extraction and redaction (PII masks, linkifiers, log
3262
+ // scrubbers are unanchored and legitimate). MEASURED over 128669 code files of real
3263
+ // repositories on the author's machine: 114 hits, every one a hand-rolled email-shaped
3264
+ // validator (one project carried 20+ copies of the same line); the only non-email ones
3265
+ // were email-SHAPED formats (NIP-05, Lightning addresses), which is what the marker is for.
3266
+ // Git URLs, IRC prefixes and chat JIDs (`[^@/]+@github\.com`, `(\d+)@c\.us`) do not match:
3267
+ // the domain part must itself be a quantified class followed by an escaped dot.
3268
+ pattern: "\\^\\(?(?:\\[[^\\]\\n]*\\]|\\\\[Sw]|[^\\s\\\\])[+*]\\)?@\\(?(?:\\[[^\\]\\n]*\\]|\\\\[Sw]|[^\\s\\\\])[+*]\\)?\\\\\\.",
3269
+ absent: "enigma:allow-email-regex",
3270
+ // DIFF stage: the corpus is full of these, so only a validator the agent just wrote fires.
3271
+ stage: "diff",
3272
+ message: "Email validated with a hand-written regex. Reuse the project's existing email validation (its shared schema or helper - search for it before writing one) or the schema library's own check (`z.string().email()` / `z.email()`, Pydantic `EmailStr`), normalized first (trim, lowercase). The common shape /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/ accepts \"user@example.com,\" and a copy per form drifts from the rest. If this IS the one shared validator, or the format is only email-shaped (NIP-05, a Lightning address), mark the line `enigma:allow-email-regex` (validation-policy).",
3273
+ severity: "block",
3274
+ skill: "validation-policy"
3275
+ },
3240
3276
  {
3241
3277
  id: "fe-skeleton-loading",
3242
3278
  label: "Skeletons over blank/spinner loading",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enigma-cli",
3
- "version": "1.57.0",
3
+ "version": "1.57.2",
4
4
  "description": "Everything you need to work with a coding agent: install shared policy skills for Claude Code, OpenAI Codex and opencode, and set up portable git security hooks.",
5
5
  "type": "module",
6
6
  "bin": {