Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"ai",
"cli",
"code-generation",
"code-generator",
"design-system",
"design-systems",
"nextjs",
"react",
"shadcn-ui",
"tailwindcss"
],
"is_fork": false,
"size_kb": 33569,
"has_wiki": true,
"homepage": "https://getcoherent.design",
"languages": {
"HTML": 8200,
"Blade": 1381,
"Shell": 14273,
"JavaScript": 47120,
"TypeScript": 3787073
},
"pushed_at": "2026-07-23T22:12:21Z",
"created_at": "2026-01-26T21:16:29Z",
"owner_type": "User",
"updated_at": "2026-07-23T22:12:24Z",
"description": "AI-powered design system generator — once designed, consistent UI everywhere.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": null,
"name": "Sergei Kovtun",
"type": "User",
"login": "skovtun",
"company": null,
"location": null,
"followers": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/56520472?v=4",
"created_at": "2019-10-13T21:03:48Z",
"is_verified": null,
"public_repos": 2,
"account_age_days": 2485
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.17.1",
"kind": "patch",
"published_at": "2026-04-29T22:16:09Z"
},
{
"tag": "v0.17.0",
"kind": "minor",
"published_at": "2026-04-29T21:14:13Z"
},
{
"tag": "v0.16.1",
"kind": "patch",
"published_at": "2026-04-29T20:51:37Z"
},
{
"tag": "v0.16.0",
"kind": "minor",
"published_at": "2026-04-29T20:32:06Z"
},
{
"tag": "v0.15.5",
"kind": "patch",
"published_at": "2026-04-29T19:11:57Z"
},
{
"tag": "v0.15.4",
"kind": "patch",
"published_at": "2026-04-29T18:53:45Z"
},
{
"tag": "v0.15.3",
"kind": "patch",
"published_at": "2026-04-29T18:25:26Z"
},
{
"tag": "v0.15.2",
"kind": "patch",
"published_at": "2026-04-29T18:07:58Z"
},
{
"tag": "v0.15.1",
"kind": "patch",
"published_at": "2026-04-29T17:51:58Z"
},
{
"tag": "v0.15.0",
"kind": "minor",
"published_at": "2026-04-29T17:03:50Z"
},
{
"tag": "v0.14.4",
"kind": "patch",
"published_at": "2026-04-29T00:47:01Z"
},
{
"tag": "v0.14.3",
"kind": "patch",
"published_at": "2026-04-28T21:55:14Z"
},
{
"tag": "v0.14.2",
"kind": "patch",
"published_at": "2026-04-28T21:45:23Z"
},
{
"tag": "v0.14.1",
"kind": "patch",
"published_at": "2026-04-28T21:24:58Z"
},
{
"tag": "v0.14.0",
"kind": "minor",
"published_at": "2026-04-28T20:52:24Z"
},
{
"tag": "v0.13.10",
"kind": "patch",
"published_at": "2026-04-28T06:49:17Z"
},
{
"tag": "v0.13.9",
"kind": "patch",
"published_at": "2026-04-28T05:52:30Z"
},
{
"tag": "v0.13.8",
"kind": "patch",
"published_at": "2026-04-28T05:31:38Z"
},
{
"tag": "v0.13.7",
"kind": "patch",
"published_at": "2026-04-28T05:11:07Z"
},
{
"tag": "v0.13.6",
"kind": "patch",
"published_at": "2026-04-28T04:35:46Z"
},
{
"tag": "v0.13.5",
"kind": "patch",
"published_at": "2026-04-28T01:16:04Z"
},
{
"tag": "v0.13.4",
"kind": "patch",
"published_at": "2026-04-28T00:44:07Z"
},
{
"tag": "v0.13.3",
"kind": "patch",
"published_at": "2026-04-27T23:57:33Z"
},
{
"tag": "v0.13.2",
"kind": "patch",
"published_at": "2026-04-27T19:47:57Z"
},
{
"tag": "v0.13.1",
"kind": "patch",
"published_at": "2026-04-27T15:41:33Z"
},
{
"tag": "v0.13.0",
"kind": "minor",
"published_at": "2026-04-27T15:26:33Z"
},
{
"tag": "v0.13.0-rc.1",
"kind": "prerelease",
"published_at": "2026-04-27T06:46:39Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2026-04-27T03:52:20Z"
},
{
"tag": "v0.11.5",
"kind": "patch",
"published_at": "2026-04-26T04:44:59Z"
},
{
"tag": "v0.11.4",
"kind": "patch",
"published_at": "2026-04-26T04:20:36Z"
},
{
"tag": "v0.11.3",
"kind": "patch",
"published_at": "2026-04-25T19:30:13Z"
},
{
"tag": "v0.11.2",
"kind": "patch",
"published_at": "2026-04-25T18:50:56Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2026-04-25T18:41:29Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2026-04-25T07:33:44Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2026-04-25T03:05:29Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2026-04-25T02:39:40Z"
},
{
"tag": "v0.7.15",
"kind": "patch",
"published_at": "2026-04-20T06:47:05Z"
}
],
"recent_commits": [
{
"oid": "3b7decbded989b70842cf2026dad7a097be8fdc3",
"body": "…(#153)\n\nThe extractor captured 20 categories in its schema but populated 6-7 on\nreal sites: shadows/gradients/borders/z-index/glassmorphism came back\nempty and the type scale collapsed to 2 steps. Root cause: the sampler\nread ONE element per semantic role (<h1>, <section>, [class*=\"card\"]),\nand Str\n[…]\n16 new tests, 2587\ntotal. tsc/prettier/build/wiki clean.\n\n\nClaude-Session: https://claude.ai/code/session_01D27AXafYzbxx1QTnanA8fj\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.26.0 feat(extract): broad DOM harvest for real-site token breadth …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-23T22:12:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9d73c8f989a7f8e28149c4bc51fb7474d4c1dfd0",
"body": "… (#152)\n\nThe DTCG output from v0.23.8 used bare-string value forms\n($value: \"#3b82f6\", $value: \"1rem\"). Those are NOT conformant to the\nnow-stable 2025.10 spec (published 2025-10-28), which makes both `color`\nand `dimension` normative MUST-be-object types. Style Dictionary v5,\nTokens Studio and Fig\n[…]\new unit tests. 2571 pass. tsc/prettier/build/wiki clean.\n\n\nClaude-Session: https://claude.ai/code/session_01D27AXafYzbxx1QTnanA8fj\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.25.0 feat(export): conformant W3C DTCG 2025.10 object-value tokens…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-23T14:37:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1cd2efc8a88f1990c65fb6a203430f72aecfdd2d",
"body": "…8 spec assessment (#151)\n\n* v0.24.1 test: coherent_extract coverage + capture-timing parity\n\n`coherent_extract` was the only MCP tool with no in-process coverage: it\nlaunches headless Chromium, so v0.24.0 shipped it on manual e2e alone. A\nregression in the SSRF gate or the driver lifecycle would ha\n[…]\ne Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01D27AXafYzbxx1QTnanA8fj\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.24.1 — coherent_extract coverage, capture-timing parity, 2026-07-2…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-22T20:13:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f4b027824fa90d148cec8d6ba97d438e0b767b6c",
"body": "* refactor: extract pure builders from prompt/manifest/extract for CLI+MCP reuse\n\nbuildPromptPayload (prompt.ts), buildManifestDoc (manifest.ts), and\ncaptureExtraction (extract.ts) are now the single source of truth shared by\nthe CLI command actions and the upcoming MCP tools. CLI behavior is unchan\n[…]\ne Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011GEpWX96vh7dp3LPBcC4ba\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.24.0 feat: coherent mcp — MCP server (agent-contract P3) (#150)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-22T06:36:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a8b3a9a0a377df3c8f111a4e9fca22adbbf33790",
"body": "One command → a single machine-readable design contract as JSON, so an AI agent\nhas a contract instead of guessing (the \"agent-ready\" pattern Meta astryx\npopularized; P2 of the agent-contract strategy, after export-tokens --format dtcg):\n\n- tokens: the project's design system in W3C DTCG format.\n- d\n[…]\n (agent-friendly), --out writes a file. Composes existing\nexports only (no design-constraints.ts touch). 1 test; suite 2516 green.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: v0.23.9 — `coherent manifest` (agent-contract surface) (#149)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-21T19:58:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fb1226d09732e68e24a99669da9e0c714bfff472",
"body": "`coherent export tokens --format dtcg` → design-system.tokens.json in the W3C\nDesign Tokens Community Group format (first stable spec 2025.10; consumed by\nFigma, Style Dictionary, Tokens Studio, Framer). Nested groups; each leaf is\n{ $type, $value } — color→hex, spacing/radius/fontSize→dimension,\nfo\n[…]\nstem's formats so a Coherent-extracted system drops\ninto any DTCG-aware tool. 5 new tests; suite 2515 green; tsc + prettier clean.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(export): v0.23.8 — W3C DTCG token format (`--format dtcg`) (#148)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-21T18:23:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "da1bd30b4f88afa722754b2cc88d3526641d860f",
"body": "…thesis)\n\nIsolates the constraint layer: both arms are the same model + same task, a\nsingle self-contained page, differing ONLY in whether the `coherent prompt`\nbundle is the system prompt. Any delta is Coherent's effect, not model noise.\n\n- Experiment 1 (slop index): deterministic count of the exac\n[…]\nlenged. Not wired into CI (costs ~$1.35 + a few min). Standalone:\nANTHROPIC_API_KEY=... node scripts/differentiation-benchmark.mjs\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(bench): differentiation benchmark harness (puts a number on the …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-20T21:42:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "af1a4a642aa54c0c7097eec53f515607c1c87ce1",
"body": "Per-command flag audit vs the live CLI. Added the user-facing flags a user\nwouldn't otherwise discover:\n- init --skill-mode / --api-mode / --both (setup rail selection)\n- check --page / --shared / --pages / --json (scope the quality check)\n- fix --dry-run (preview fixes without writing)\n- export --k\n[…]\n, cluster --eval-judge, baseline --compare, undo --list, update\n--patch-globals. Sync flags + env vars were already fully covered.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: document high-value command flags in QUICK_REFERENCE",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-20T21:06:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e8521becd6d741834750f2133a77bf6fbc363acb",
"body": "Command-tree audit vs the live CLI found two user-facing commands missing from\nthe reference:\n- `prefs set|show|clear` — persistent design preferences (design.style|density|\n avoid|notes) injected into every chat run. Real user feature, was undocumented.\n- `ds regenerate` — regenerate the Design Sy\n[…]\nnt-chat rail, not user-typed. No phantom commands found in either\ndirection; hidden `wiki`/`baseline` remain correctly documented.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: document `coherent prefs` + `ds regenerate` in QUICK_REFERENCE",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-20T19:25:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d099b3c1ec5de0f7242ea92b6a5b6b013a19d92b",
"body": "- CLAUDE.md dev-workflow: \"Run all 2276 tests\" → \"Run the full test suite\"\n (drift-proof; canonical count stays on the Tests: line, updated per release).\n- codes.ts header comment: error-code range \"through E020\" → \"E010\" (actual\n max defined; error-codes.md already documents E001–E010 correctly).\n\nDoc/comment only — no behavior change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: fix two stale counts in always-read files",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-20T18:01:18Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f8136b2c19b6b988f337d7f574455a39101d5689",
"body": "…pam (#147)\n\ncoherent extract deduped spacing but never sorted/outlier-filtered it, and had\nno breakpoint normalizer — so real computed CSS yielded a thin/noisy DESIGN.md:\na lone 208px hero margin in an otherwise 4–40px ramp, and a 23-row breakpoints\ntable dumping every declared media-query width (i\n[…]\ndth, sort. 23 rows -> sm/md/lg/xl. Wired into normalizeTokens.\n\nSuite 2510 green; tsc + prettier + wiki audit clean. Wiki: PJ-019.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(extract): v0.23.7 — drop spacing outliers + collapse breakpoint s…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-20T14:40:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3aa6440bca40bde51f4b4ea1cbdcf16388d8067a",
"body": "…ng badge (#146)\n\nTwo rendering bugs found dogfooding the DESIGN.md gallery showcase; both made\na correct import/generation *look* broken.\n\n1. import design silently overridden on Tailwind v4. The scaffold leaves an\n inline <style> critical-theme block (default palette) in app/layout.tsx; in\n <h\n[…]\nge at\n the top of the highlighted CardHeader.\n\nWiki: PJ-017 (badge), PJ-018 (v4 import). Suite 2503 green; tsc + prettier clean.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(import,constraints): v0.23.6 — v4 import override + clipped prici…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-20T04:56:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5f8f1b14c2d1ae5b7122fd51f7d448b50e381f00",
"body": "COHERENT_PLAN_MODEL (e.g. claude-haiku-4-5) routes ONLY the Phase 2\narchitecture-grouping call to a cheaper/faster model. Phase 2 groups\nalready-decided pages by layout — a structural, low-creativity step. Page code\ngeneration (Phase 3/6) and page planning (Phase 1, which decides which pages\nexist) \n[…]\nNCE env-var table (timeout default was stale at 180s,\nnow 300s since v0.22.8; documented COHERENT_NO_CACHE + COHERENT_PLAN_MODEL).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(chat): experimental model tiering for architecture planning (#145)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-19T07:43:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8871c9f6922e3fe6d28847af5ce0616efdfce6db",
"body": "Extends the import round-trip (after radius + weight in v0.23.1):\n- parse.ts: parseBodyFontSize (## Typography `body` row) + parsePxScale\n (## Spacing) → RawImport.bodyFontSizePx / spacingPx. Deduped parseRadiusScale\n into parsePxScale.\n- adapter.ts: body size → fontSize.base (px→rem via pxToRem);\n[…]\n maps fontSize.base ← 16px and the full spacing\nscale alongside brand colors + heavy headings. 4 new unit tests. Suite 2502 green.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(import): carry body font size + spacing rhythm (#144)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-19T07:24:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d725506972750b2e21d1a77b89713a9ae4e654c3",
"body": "…ource (#143)\n\ncheck's link scanner used a `href=` regex with no left boundary, so it matched\n`-href=\"/x\"` inside `data-stale-href=\"/x\"` — the auto-fixer's marker for an\nALREADY-repaired dead link (live href is \"#\"). Every repaired link was\ndouble-counted as broken, so a page whose dead links were a\n[…]\nrified: a project reporting 7 broken links now reports 0 (score 90); another\n3 → 0 (score 80). 3 new unit tests. Suite 2498 green.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(check): stop counting repaired links as broken; align fix route s…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-19T07:18:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b0b2a31b8e928b7d03940ec8ae25aca69d5c6e49",
"body": "… app (#142)\n\ncoherent check charged 15 points per broken link with no cap, so ~7 links to\nroutes that failed to generate dropped a 7/7-clean-page project to 0/100\n\"Critical\". A misleading zero on a good app erodes trust. The console and --json\npaths also used different weights (JSON lacked a dead-r\n[…]\nscored 0/100 (6 broken links, full\npages) now scores 80/100. 6 new unit tests lock the calibration + regression.\nSuite 2495 green.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(check): honest quality score — broken links no longer zero a good…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-19T07:04:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b45c1f81e838d2b6d5c6c2745938afbe8a95e697",
"body": "…ve) (#141)\n\nThe absence of an automated dogfood is why the v0.22.2 Sonnet 5 migration\nsilently broke `coherent chat` for a month (PJ-016). This adds both tiers:\n\n- Tier 1 (deterministic, every CI run, no API cost):\n generation-canary.test.ts feeds every real Sonnet 5 response shape (flattened\n re\n[…]\ncanary run reported\nhealthy (13 page files, score 100/100).\n\nNo runtime change to the published packages — tests + dev infra only.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(quality): add the generation quality canary (deterministic + li…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-19T06:59:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "84792a6fe5134ae9f791faf982789ec896952f31",
"body": "coherent import design was lossy — an extracted DESIGN.md captures 12 sections\nbut only colors + font family were applied. A site's corner style and heading\nweight (both strong identity signals) were captured then dropped.\n\n- parse.ts: parseRadiusScale (## Radius) + parseWeightColumn (## Typography\n\n[…]\not just the brand blue.\n\n- 10 new unit tests (parse scale + adapter mapping); suite 2480 green\n- tsc + prettier + wiki audit clean\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(import): carry radius + heading weight through import design (#140)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-19T06:33:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e659a04c427b2d5ea4f73f91119739b14023b31c",
"body": "Every page-generation call re-sent the same ~19K-token invariant constraint\npreamble (DESIGN_THINKING + CORE_CONSTRAINTS + per-type design quality +\nVISUAL_DEPTH + INTERACTION_PATTERNS). It's byte-stable per page type across a\nrun, so it now goes out once as an Anthropic prompt-cache system block\n(c\n[…]\nent in the cache-off run too.\n\n- 3 new unit tests (constraint-caching split); suite 2473 green\n- tsc + prettier + wiki audit clean\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf(chat): prompt caching for the design-constraint preamble (#139)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-18T08:15:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c989a684036a9312c470531986ba176bb0dcc1a0",
"body": "…ons (#138)\n\nFollow-up to the v0.22.8 fenced-TSX migration. The parser was too strict and\ndropped valid pages to empty templates when the model deviated slightly.\n\n- parseFencedTsxResponse: find the fence anywhere (not anchored start/end),\n accept jsx/typescript/javascript/ts/js fence tags, tolerat\n[…]\nse\nfailure) — template fallback + regenerate cover those.\n\n- 6 new unit tests; suite 2470 green; tsc + prettier + wiki audit clean\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(chat): harden response parsing — tolerate Sonnet 5 output variati…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-18T07:45:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "87b52e0eacc9feec3db7442bc294dc2e6709924e",
"body": "…y pages (v0.22.8) (#137)\n\n* fix(chat): raise max_tokens so Sonnet 5 adaptive-thinking can't truncate full-file gens\n\nP0 regression from the v0.22.2 Sonnet 5 migration: every fresh multi-page\n`coherent chat` produced empty pages. Sonnet 5 runs adaptive thinking ON when\nthe `thinking` field is omitte\n[…]\nage `coherent chat` after the Sonnet 5 migration.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: repair Sonnet 5 generation — fresh multi-page chat produced empt…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-18T07:01:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c42d4ce0333c87d3d6f2561baf360eba944851e",
"body": "…2.7) (#136)\n\nAudit finding: `coherent check` built validRoutes from config, so a route whose\npage generation was dropped (a double-failed page still gets a config + nav\nentry) passed link validation — and links to it looked valid — despite no\npage.tsx, shipping a runtime 404. The diagnostic couldn'\n[…]\nem in the score, and fails the exit code.\nVerified live: an orphaned route drops score 90→75. fileToRoute unit-tested.\n2457 tests.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(check): detect dead routes — config route with no page file (v0.2…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-18T01:32:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0222262eb9f3658b6e3d6b9e6cd1452b797f211c",
"body": "…(#135)\n\nAudit efficiency finding: split-generator injected getDesignQualityForType(pageType)\ninto each page prompt, and buildModificationPrompt — which the same prompt flows\nthrough — injected it again (~1.5K tokens/page duplicated; marketing/auth pages\ncould get the wrong second copy since the two\n[…]\nate careful\nchange — it needs prompt reordering + content-block restructuring + live\ncache-hit verification, not a rushed bolt-on.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf(chat): stop double-injecting the design-quality block (v0.22.6) …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-18T01:23:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0aa918d335c81777c2ca0065a5b1187a17aca5ad",
"body": "…unified send() (v0.22.5) (#134)\n\nFrom the 2026-07-17 platform audit (docs/reviews/2026-07-17-platform-audit.md).\nAll three are live-API behaviors the 2455 unit tests never exercised.\n\n- Unified `send()` helper (utils/claude.ts): every Anthropic call now routes\n through one path that applies withMo\n[…]\nmanual' control.\n2455 tests, tsc + prettier clean. Efficiency findings (prompt caching, double\nconstraint injection) tracked next.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: audit P1 cluster — truncation guard, SSRF redirect, no-swallow, …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-17T22:53:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2de97fd11ee78cf748682d49dd7ba2642b442c06",
"body": "…0.22.4) (#133)\n\nextract --semantic computed color roles but they were discarded, and the brand\ndefinition was frequency-based — so a site's signature color (e.g. Stripe's\nindigo #533afd) got labeled `background` (it appears in CSS as a link-hover\nfill) and a high-frequency neutral got `brand`. Impo\n[…]\ndesign chain now yields a\nfaithful palette. Unblocks the M1 gallery (E1): brand color was the blocker, not\ngeneration. 2453 tests.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(extract): --semantic now correctly identifies the brand color (v…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-17T20:38:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3b7fe0280e4d37e63bf0fe13a47b48ca2d4cc30a",
"body": "…3) (#132)\n\nThe semantic LLM pass read response.content[0] as the text block. Under adaptive\nthinking (Sonnet 5 / Fable 5 emit a thinking block first when `thinking` is\nomitted — the default), the text is at index 1+, so the call threw \"no text\nblock\", the fail-soft wrapper caught it, and the run de\n[…]\nmantic completes the LLM pass and writes inferred\nvoice/density. Found dogfooding E1 (needed correct color roles for the gallery).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(extract): --semantic silently produced no semantic output (v0.22.…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-17T18:13:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4c8615391eb1b40038ea66784aced7a2fdd94379",
"body": "…odel) (v0.22.2) (#131)\n\n`coherent chat` and `extract --semantic` hardcoded claude-sonnet-4-20250514.\nAnthropic retired it on 2026-06-15 on the published schedule, so every\ngeneration on the API rail returned 404 not_found_error unless the user had set\nCLAUDE_MODEL by hand — for about a month. It hi\n[…]\nning thinking:disabled\n(which 400s on Fable 5).\n\nVerified end-to-end: coherent chat runs a real live generation again. 2452 tests.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(model): coherent chat was 404ing on every API-rail run (retired m…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-17T16:12:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d4dea925fadb853c22690bbcd378ba553ca53f79",
"body": "… (v0.22.1) (#130)\n\n`coherent extract` could not extract stripe.com or figma.com AT ALL.\n\nNavigation used page.goto(url, { waitUntil: 'networkidle' }) with no fallback\n(browser-capture.ts:608). A site with persistent background chatter (analytics\nbeacons, websockets, polling) never reaches networkid\n[…]\ngo); linear.app still settles in 3.7s with no flag — no\nregression. Regression test locks the never-settles path. 2434 tests pass.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(extract): sites whose network never settles are extractable again…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-17T01:09:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "21db9c687c7dd268860f559dceaeb23df3f8e603",
"body": "…ady files (E3/T5, v0.22.0) (#129)\n\nPromotes the internal E3 gallery artifact generator to a public command (TODOS\nT5). Any user exports THEIR design system to files that drop into any stack.\n\n`coherent export tokens [--format css|tailwind|json] [--out <dir>]` emits, all\nderived from the project's n\n[…]\nit tests + e2e verified (all formats, --format/--out, bad-format refusal,\n`coherent export` parent still intact). 2442 tests pass.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(export): coherent export tokens — one token model → framework-re…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-16T20:47:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4d02ff4a5d0f4f28d6a7312775a7ba52cc32ccd9",
"body": "….0) (#128)\n\nNew command `coherent import design <file>`: parse an external DESIGN.md into a\nproject's tokens. Closes the loop v0.18/ADR-0008 left open (DESIGN.md was\noutput-only; input was URL-only via `coherent extract`).\n\n- Two grammars, priority-ordered: Coherent extract (Atmosphere) first (gall\n[…]\n + full e2e on all three grammars against a live project. Adversarially\nreviewed (no P1; 9 P2/P3 findings fixed). 2424 tests pass.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(import): coherent import design — DESIGN.md as INPUT (F14, v0.21…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-16T16:25:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5d9fbc4ce6d0ea959468454ccdfba8b1da275333",
"body": "…(#127)\n\nBundles the full B-2c → R10-R12 → F13 arc landed on main today:\n- B-2c conservative DRIFT-REPORT.md + ADR-0009 (scan subsystem)\n- R10 eval v2 (split gate, must_be_generic, authoring cards)\n- R11/R11.1 run observability (provider errors surfaced, scaled\n max_tokens, truncation detect)\n- R12\n[…]\ncost-banner range\n\nPilot eval gate PASSES (26/28, hard 3/3); --llm labeling validated,\nstays opt-in. Both packages 0.19.0 -> 0.20.0. 2366 tests.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: v0.20.0 — Tool 2 (coherent scan/cluster) + eval gate closed …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-16T02:01:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d6795e78eb8d647355dadf321d6c24291dad738a",
"body": "The --llm banner quoted a single number that was really the clean-pass\nFLOOR (e.g. $2.29). Real runs cost 2.6-3x that ($6.08): the repair ladder\nre-calls dropped-id chunks and every re-call re-sends the full DESIGN.md.\nThe banner now shows $2.31-$6.93 (clean pass -> with repair retries) + a\nnote tha\n[…]\nrisks the\nlabel quality we just got past the R10 gate; separate task with its own\neval.\n\n1 new banner test (range floor->ceiling). 2366 passing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scan): cost banner shows an honest floor-to-ceiling range (#126)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-15T21:38:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "412b97c792c075d358c05df15e45e97798b1dd03",
"body": "…luster-hash + dimensional tokens) (#125)\n\nThe default no-LLM label was '<token>-cluster-<hash>'\n(lb-label-cluster-1f1e1d12) -- redundant noise, since the stable id\nalready prints on its own line in COHERENT-DESIGN.md. It is now the\ncluster's clean class signature with pure spacing/sizing utilities\n\n[…]\nministic-label.test.ts + salientTokens/isDimensional unit tests;\nserialize/cluster tests updated off the old -cluster-hash format. 2365\npassing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): free deterministic label = clean class signature (drop -c…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-15T19:24:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3749cc64d65635656bd3aa0b8137344fb4ad94aa",
"body": "…e label (#124)\n\nRoot cause behind the stubborn grid-cols-a1a fallback and ~100 other\nsilent fallbacks in the labeler-v4 run. A single-cluster diagnostic\nshowed the model returned a PERFECT label:\n\n human_label: 'Label Dotted Value Row' (exactly what we want)\n suggested_role: 'layout.label-va\n[…]\n\n\n4 reconcile tests updated/added (drop kebab role, drop Title-Case role,\ndrop 5+ segment role, required-field still invalidates). 2354 passing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scan): R12.2 — malformed optional role drops, does not discard th…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-15T18:56:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9912aa735ff2fbadea457733a505030c690d72e9",
"body": "The labeler-v4 validation run (2026-07-15) passed the representative eval\nsuite at 12% major but stayed gate-BLOCKED on ONE hard case: grid\ngrid-cols-a1a kept falling back to a deterministic label (raw cluster id\n-> judge 'wrong'). Not a labeling error: chunk poisoning. A couple of\njunk-token cluste\n[…]\ncheap).\n\n2 new tests (singleton rescue, singleton-also-fails -> fallback), provider-\nerror count test updated for the extra calls. 2352 passing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scan): R12.1 — singleton retry defeats chunk poisoning (#123)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-15T18:21:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f1bf511e601b0140b627b3f8dbfde6d7299fbd55",
"body": "…read (#122)\n\nThe R12 judge confirmed the remaining gate failures were real labeler\nover-specialization and pointed at the root cause: #120's high_spread\nflag keys off occurrence/file COUNTS, which cannot separate a widespread\ngeneric utility from a widespread structural recipe. Both pilot hard\ncase\n[…]\n\ntests), 2350 passing. No paid run in this PR — deterministic flag proven\noffline; the paid labeler-obeys-flag validation is a separate ~$6 run.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scan): F13.2 — token-nature generic_utility flag replaces high_sp…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-15T15:21:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a345fa5e7c819094e9af17f1113a323a7afd7780",
"body": "After three rounds of string-matcher patching still failed correct labels\non wording, added a judge that grades MEANING against the human\nacceptable_labels, looking at the same code samples the labeler saw.\n\nReverses the 2026-07-13 codex 'no judge' verdict — but on evidence, and\nkeeping its bias con\n[…]\npage). The remaining gap is in the\nLABELER, not the ruler — do not loosen the eval.\n\n12 new tests, 2344 passing. No paid relabel run in this PR.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): R12 — eval LLM-judge lane (rescue-only, --eval-judge) (#121)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T23:13:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "69f69cb9e4e380e6703947b5ba7d71e16b1e5b6e",
"body": "… truncation detect (#120)\n\nPostmortem of the labeler-v2 validation run (2026-07-14, full corpus).\n\nWHAT WORKED: the headline F13 case is fixed. The 47x/25-file subtle-text\ntoken now labels 'Subtle Text', not 'Breadcrumb Separator'.\n\nWHAT DIDN'T:\n1. v2 asked the model to compare occurrences/distinct\n[…]\nen the block was absent. FIX: LabelChunkResult.truncated\n -> recorded as a provider error.\n\n7 new tests, 2327 passing. No paid run in this PR.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scan): F13.1 — deterministic high_spread flag + plural stemming +…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T19:19:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d45cfd794a9505818f859002862f7ec035b2fc8e",
"body": "…nct_files + scope rule) (#119)\n\nThe 2026-07-14 eval run (first on the fixed R10/R11 harness) isolated the\nlabeler's one systematic error: all 3 remaining failures were high-spread\ngeneric utilities named after the single usage visible in samples\n('Breadcrumb Separator' on a 47x/25-file subtle-text \n[…]\nl cache invalidation\n\n6 new tests, 2326 passing. Validation run (~$2.5, full corpus) pending —\nflip --llm default only if both eval suites pass.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): F13 — spread-aware labeler prompt v2 (occurrences + disti…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T18:10:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "00c348af74b174688a379deae17ddbab3d54d4f3",
"body": "…alize eval matching (#118)\n\n2026-07-13 pilot run postmortem: 533/1077 clusters silently fell back\nafter chunks 12-22 failed ALL ladder attempts — catch {} at\nllm-label.ts:256 swallowed every provider error, making a mid-run API\noutage indistinguishable from bad model output.\n\n- llm-label: providerE\n[…]\nkoff/circuit-breaker deliberately deferred until the next run shows\nthe actual error class (evidence over guessing).\n\n6 new tests, 2321 passing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scan): R11 — surface provider errors, scale max_tokens, dash-norm…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T15:16:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6d08de515d22862c562c42a6ccb71ab9a48962d7",
"body": "…s (codex-consulted) (#117)\n\nCodex consult 2026-07-13 (6 verdicts, 3 P1s):\n- Split gate: representative percentage gate + zero-tolerance hard-case\n suite; a combined 25-case gate could pass with every known-hard case\n failing.\n- must_be_generic: asymmetric matching so F13-class over-specialization\n[…]\nVersioned pilot gate: meta {corpus, eval_version, seed} echoed in report.\n\nBackward-compatible expected.json schema. 25 new tests, 2315 passing.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): R10 eval v2 — split gate, must_be_generic, authoring card…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T05:49:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4c24574b7c5115027cbd3288fe9c3e39ee2d2fe1",
"body": "… ADR-0009 (#116)\n\nCodex Q6 verdict (locked 2026-05-11): NO auto semantic matching against\nfree-form DESIGN.md in v0. Report states the detected DESIGN.md path,\nlists top-20 clusters by occurrence, and defers comparison to manual\nreview. No-false-confidence is a tested invariant.\n\nAlso: ADR-0009 (sc\n[…]\narc, adapter contract, schema\nversioning, stable IDs), CHANGELOG B-2c section, QUICK_REFERENCE cluster\nlines refreshed from stale B-2a-era text.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): Tool 2 v0 (B-2c) — conservative DRIFT-REPORT.md emitter +…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T04:56:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3749ce4d7933fb6c401c1e985a7956a360b382dd",
"body": "…erred, gated on F4 + M1 signal)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: T5 backlog entry — public 'coherent export tokens' command (def…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-14T04:11:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "585f493794f3e19b133664600e2d295c8d48d317",
"body": "…ategy) + T3/T4 platform-play deferrals (#115)\n\n- F14: parser grammar priority (Coherent extract format first, Stitch second),\n contrast repair policy DECIDED (accept-with-warning, recommendations in DS output),\n Stitch superset strategy (valid core + Coherent extensions, spec-watch).\n- TODOS: T3 \n[…]\nbuilt-with-Coherent badge (E6, bundled into OQ6 trust review).\n- Source: office-hours + CEO review 2026-07-12/13, decision records in ~/.gstack.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: F14 amendments (grammar priority, contrast policy, superset str…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-13T14:06:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "97a3367862b3aca675bc5f0ab3da048ffed93235",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: gitignore .context/ (codex session state)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-12T22:08:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bb2a56fcd4a9f29cebd649cf1d0a1ef114407e0f",
"body": "…ted scope + R9 corpus-economics update (#114)\n\n- New F14 entry: coherent import design <file> --dry-run, colors+font-family\n only, dedicated ImportedDesignSeed schema, mapping/repair report.\n Codex GO-WITH-CHANGES verdict encoded (session 019f585a, 2026-07-12):\n no chat --design in v1 (Atmospher\n[…]\n R9 annotated: voltagent/awesome-design-md (101k stars, MIT, 73 files)\n changes reference-corpus economics; F14 = R9-lite via user-picked seed.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(wiki): F14 — DESIGN.md as input (Stitch-format import), codex-ga…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-12T22:08:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f557a500f99bcdcfc24e8b26595b609ccbd96389",
"body": "…ladder (#113)\n\n* feat(scan/cluster): foundation — constants + LabelProvider interface\n\nPinned MODEL_ID/PROMPT_VERSION/TEMPERATURE + per-chunk + per-cluster caps\nper codex consult 2026-05-11 (Q3/Q7/Q8). LabelProvider seam keeps SDK\ncalls out of CLI orchestration (Q9).\n\nCo-Authored-By: Claude Opus 4.\n[…]\nked until ground truth is context-authored (R10).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): Tool 2 v0 (B-2b) — Sonnet LLM labeler + 3-attempt repair …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-07-12T02:18:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d474c1599d04f4f6a9054ad5e368090a205d0e5",
"body": "…ENT-DESIGN.md (#112)\n\nNew `coherent cluster <evidence.json> --no-llm` command. Reads B-1 scan\nevidence, groups by exact normalized class-token signature, assigns stable\nsha256-derived cluster IDs (8-char hex), and serializes a DRAFT\nCOHERENT-DESIGN.md grouped by anti-pattern kind. LLM labeler ships\n[…]\n0).\n\nTests: +27 in scan/cluster + commands/cluster (precluster, signature\nnormalization, serializer determinism, CLI error gates).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): Tool 2 v0 (B-2a) — deterministic clustering + DRAFT COHER…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-11T21:34:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fe8ec4249939188173c5992fab204bdba0d1935e",
"body": "… (#111)\n\n`coherent scan [dir]` walks .blade.php files and emits B1-EVIDENCE.json\nwith 6 anti-pattern kinds (raw_button_tag, include_partial,\nx_component_usage, at_class_directive, conditional_class_array,\ninline_classes). Vendor / node_modules / storage / bootstrap excluded.\n\nPhase B-1 of the brown\n[…]\n\n\nMeasured on logbaza/source: 104 files, 2855 rows, 18 ms (62× under the\n30 s gate budget).\n\n16 unit tests; full suite 2150 green.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(scan): Tool 2 v0 (B-1) — Blade L1 grep extractor + JSON evidence…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-11T19:06:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b57f38db98aa6d7160516da52e44660ee3add059",
"body": "…(#110)\n\nThe regex `type:\\s*['\"]...['\"][\\s,\\n]+message:` in generate-rules-map.mjs\nsilently dropped any rule with an inline comment between type and message.\nCaught on PR #106 pre-merge — three rules vanished because comments\nrationalising a severity bump landed inline.\n\nReplace with TypeScript AST \n[…]\nests in generate-rules-map.test.mjs cover regression case +\nbasic shapes. Same 41 validator types reported on real validator code.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(wiki): M18 — AST-based validator-rule extraction for RULES_MAP …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T14:42:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "98b05c45eb8c284b026cbb0064d3da78b5c71e02",
"body": "…guard (#109)\n\nCumulative release covering Week 1 of the URL-extract initiative\n(PRs #90 → #102) plus four post-#102 ships (#104-#108) since v0.18.0.\n\nHighlights:\n- coherent extract <url> ships as beta (Tool 1)\n- F11 BUTTON_NO_DISABLED_ON_MUTATING validator (state-design HARD RULE)\n- multi-page rail\n[…]\nfor animation-heavy sites\n- Wiki: PJ-013, PJ-014, PJ-015 + R7/R8/R9 + F11/F12/M18\n\nTest count: 2078 → 2124 (+46). All gates green.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(release): v0.19.0 — coherent extract (Tool 1 beta) + F11 click-…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T08:03:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "39717a5f7379137ae9ce44130ed244c2c34e06df",
"body": "…rd rule (#108)\n\nEmpirical: 2026-05-06 stratified n=3 benchmark scan found 0 instances of\ndisabled={...} across 171 .tsx files in 3 generated apps. Every form/action\nshipped without click-guard, so users double-submit on every demo run.\n\nNew validator rule fires error severity (gen-time AI fix loop \n[…]\n1 unit tests cover both signals + each skip case. Suite 2113 → 2124.\nPJ-015 + IDEAS_BACKLOG F11 marked resolved + RULES_MAP regen.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(validator): F11 BUTTON_NO_DISABLED_ON_MUTATING + state-design ha…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T07:54:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "767f13479268bdef07d709c999a5f549f21d7ec3",
"body": "…#107)\n\nSession 2026-05-06 ran a stratified anti-slop benchmark to test whether\npeer recommendations (font/icon swap, anchor-as-string field, anti-AI\nlanding pivot) are real leverage. Codex consult + codex challenge mode\ndemolished n=1 conclusions and surfaced two real bugs.\n\nPATTERNS_JOURNAL additi\n[…]\nnames JSX text leak fix\n- #105: multi-page domain detection fix\n- #106: NO_EMPTY_STATE/NO_H1/STUCK_ON_SELECTION severity promotion\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(wiki): capture 2026-05-06 anti-slop benchmark session findings (…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T07:33:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "eb5ecdb0b7de5ea82d356913fa8ac6ce3980003f",
"body": "…o errors (#106)\n\nThree high-confidence quality rules were emitting at warning severity, so\nthe gen-time AI quality-fix retry loop (modification-handler.ts:742) skipped\nthem. Validator caught the issue, generation shipped it anyway. Confirmed\nempirically via benchmark scan on a fresh 20-page logisti\n[…]\nt\nnew validator infrastructure.\n\n3 new tests pin severity contract per type. Validator suite: 273 → 276\npassing. Full suite green.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(validator): promote NO_EMPTY_STATE / NO_H1 / STUCK_ON_SELECTION t…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T07:33:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "673447279b35abf495c5026aa272d3085a40005a",
"body": "`isMultiPageRequest` was too narrow on two axes — both confirmed via\nbenchmark pilot 2026-05-06:\n\n1. BROAD_APP_INTENT_RE noun catalog was generic-SaaS-only. Prompts like\n \"Build a B2B logistics dispatcher\" or \"Build a clinic scheduler\"\n missed the trigger because \"dispatcher\" / \"scheduler\" / \"tr\n[…]\ns.\n\n15 new tests pin the fix vs 4 stratified benchmark prompts and 4 trivial\nmodification controls. Full suite: 2095 → 2110 (+15).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(chat): route domain-specific app prompts to multi-page rail (#105)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T07:33:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "89dbe9c8aca70c899c54caf2f657b2222bd838af",
"body": "…trings (#104)\n\n* feat(url-extract): --settle-ms flag for late-firing animations\n\nLarevoltosa.es and similar Lottie/fade-in heavy sites kick off opacity:0→1\ntransitions AFTER `networkidle`. captureSnapshot's hero detection lands inside\nthe transition window and picks footer copyright (16px) instead \n[…]\nplaceholder list. Validator suite\ngoes 273 → 277.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(validator): catch banned placeholder names in JSX text + longer s…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-07T07:33:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fc80f1fc5c58d176b937e61720ebee97546e18c2",
"body": "…al) (#102)\n\n* feat(url-extract): DOM-depth penalty for Tier 2 hero scoring (#96)\n\nCloses the awwwards-style \"project showcase IS above-the-fold AND largest\"\ncase left open by PR #99. The page hero is rarely deeply nested; widget\ncontent (carousels, project tiles, drawers) usually sits 6-12 elements\n[…]\nn the path. Same scoring math, real coverage now.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): DOM-depth penalty for Tier 2 hero scoring (#96 fin…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T17:25:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7b6940cc3d1ca0af7302d99b4e389db31ed26d01",
"body": "…101)\n\n* feat(url-extract): drop heading scale entries that match body size (#98)\n\nextractTypography took the FIRST occurrence of each heading role as the\ncanonical scale step. On h1-less / portfolio sites, the first <h2> on the\npage is often a tiny nav label or eyebrow — awwwards.com surfaced\nh2=14\n[…]\new test covers\nthe CSS-reset shape codex flagged.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): drop heading scale entries that match body size (#…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T17:01:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "57f0f7bb78939f9e8842d4e7bc9aab28730df220",
"body": "* feat(url-extract): synthesize z-N labels for non-layer roles (#97)\n\nThe deterministic z-index extractor used `ComputedStyleSample.role` verbatim\nas the layer name. For bare-tag roles (`a`, `p`, `h1`, `body`, `icon`, …)\nthat produces meaningless labels in DESIGN.md \"Z-index scale\" — awwwards.com\nsh\n[…]\nAuthored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n* chore: prettier fix for negative-z-index test (CI)\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): synthesize z-N labels for non-layer roles (#100)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T16:38:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bd9a062add7f9a7eb9b4a6a72dc6e3196a039c77",
"body": "* feat(url-extract): hero topmost bias for Tier 2 detection (#96)\n\nTier 2 (largest-visible-text) previously ranked candidates by font-size\nalone. On sites with below-fold project showcases or promotional overlays\nlarger than the actual page hero, the rank picked the wrong text. The hero\nalmost alway\n[…]\nt covers\nthe phantom-above case. 2074 tests pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): hero topmost bias for Tier 2 detection (#99)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T07:08:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b24aed5a609e61f0e3901c1b0dc99e1ff4ed0528",
"body": "…k1 #6) (#95)\n\n* feat(url-extract): UX polish — --out - to stdout + hero truncation (Wk1 #6)\n\nTwo scriptability + readability fixes for `coherent extract`:\n\n1. **`--out -` writes the artifact to stdout.** No spinner pollution (ora\n already streams to stderr), no success line. Honors the same .md/.\n[…]\n\nshouldSkipUpdateCheck stdout-sink). 2068 passed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): UX polish — --out - to stdout + hero truncation (W…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T04:31:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f11d91c3f12aea366e785fd653482d4093dbefd2",
"body": "…ce/density (#94)\n\n* feat(url-extract): semantic inference — single LLM pass for roles/voice/density (Wk1 #2)\n\nNew SDK-free `semantic-inference.ts` in @getcoherent/core: builds prompt,\nzod-validates LLM output (`SemanticLlmOutputSchema`), retries once on schema\nfailure, propagates network errors imm\n[…]\nte unit + 2 serializer integration). 2037 passed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): semantic inference — Wk1 #2 LLM pass for roles/voi…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T01:43:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0016c7dfb898fa45b0802b07e2430e1f8f355cc8",
"body": "Per design doc constraint: \"honor target-site robots.txt before extraction\n(skip if disallowed)\". RFC 9309-compliant parser, fail-open on fetch\nfailure (no robots.txt published = allowed; blocking on unavailability\nwould let any flaky origin DoS extraction).\n\nNew module: packages/core/src/url-extrac\n[…]\novering parser/matcher edge cases + 4 captureSnapshot wire-in tests\n(allow path, block path, opt-out, default-on with stub fetch).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): honor robots.txt before navigation (Wk1 #3) (#93)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T00:51:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "305cfa18d9c39afc5295443c41dfc6a7de95ac91",
"body": "… (#92)\n\nWk1 #4 of Tool 1. Locks regression coverage for the deterministic extraction\nlayer using brand-representative HTML fixtures rather than raw site captures.\n\nFixtures (packages/core/src/url-extract/__fixtures__/):\n- stripe-like.html — Stripe purple #635BFF + ink #0a2540 + sohne-var\n- linear-l\n[…]\ntegration testing remains a separate concern handled by\n`coherent extract <url>` against live URLs (browser-capture + Playwright).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): hand-crafted HTML fixtures for regression coverage…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T00:51:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8b6bddb7c701ca6b93628130a63775f2d165ef88",
"body": "…lization (#91)\n\n* feat(url-extract): token-normalizer — OKLCH ΔE merge + px/ms canonicalization\n\nWk1 #1 of Tool 1 deterministic layer. Refines extracted tokens before\nDESIGN.md serialization:\n\n- Color clustering: hand-rolled OKLCH conversion + ΔE merge at threshold 2.0\n (just-noticeable). Centroid\n[…]\n background remap test + 3 background edge cases.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(url-extract): token-normalizer — OKLCH ΔE merge + px/ms canonica…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-06T00:51:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f4afaede880ae534e1fc61a0102ac51e5187b5b8",
"body": "feat(url-extract): Tool 1 deterministic layer + DESIGN.md serializer",
"is_bot": false,
"headline": "Merge pull request #90 from skovtun/feat/url-extract-bootstrap",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T16:36:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2df696db6052c074ab12861031b5bde54a463458",
"body": "…dual\n\nP2 — Hidden h1 with non-zero rect. The basic display/visibility/opacity\ncheck missed sr-only patterns that have positive box dimensions but are\noff-screen (position:absolute; left:-9999px) or clipped (clip:rect(0,0,0,0)\non 1px×1px). Detection now requires the h1's viewport-clamped intersectio\n[…]\nk 2 hosted-service hardening per Tool 1 design doc.\nInline comment in captureSnapshot's interception block names the limit.\n\nTests: +2 (off-screen position:-9999px h1, 1×1px clipped h1). 1929 passing.",
"is_bot": false,
"headline": "fix(url-extract): codex iter-5 — clip/off-screen h1 + doc rebind resi…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T16:23:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e710f63281e794686887859fd2c3bbeb448c72ac",
"body": "P1 — IPv4 SSRF blocklist was incomplete. Pre-fix only covered RFC1918 +\nloopback + 169.254. Codex flagged that Alibaba metadata at 100.100.100.200\n(in CGNAT 100.64/10) and benchmarking 198.18/15 still passed, so a\nmalicious URL on those networks could probe internal services. Expanded\nassertNotPriva\n[…]\nllow-list cases (100.0/8 public,\n198.0/8 public public-side of benchmarking) + 3 hidden-h1 fallthrough cases\n(display:none, visibility:hidden, opacity:0). 1927 passing.\n\nSmoke on linear.app unchanged.",
"is_bot": false,
"headline": "fix(url-extract): codex iter-4 — IPv4 special ranges + h1 visibility",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T16:16:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bcc869fae47342406f182d39f0edc60066bcdfc0",
"body": "…ules\n\nP1 — DNS rebinding via Chromium's separate resolver. Node's defaultSsrfGuard\nvalidates a hostname's A/AAAA records, then route.continue() lets Chromium\ndo its OWN fresh lookup before connecting. A short-TTL attacker domain can\nreturn a public IP to Node and 169.254.169.254 to Chromium millise\n[…]\nrvice hardening.\n\nTests: +7 (SsrfGuardResult shape for hostname/v4-literal/v6-literal,\nbuildHostResolverRules for v4 single, v4 multi, v6 brackets, empty).\n1909 passing. Smoke on linear.app unchanged.",
"is_bot": false,
"headline": "fix(url-extract): codex iter-3 — pin Chromium DNS via host-resolver-r…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T16:06:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b239677806d9a639674ef0ed6d28f87860126157",
"body": "…de + meta\n\nFour findings from /codex review on 172fceb. Two more P1s + two P2s.\n\nP1 — IPv4-mapped IPv6 literal bypass. WHATWG URL canonicalizes\n[::ffff:127.0.0.1] to [::ffff:7f00:1] (compressed hex). Original v4-mapped\nregex only caught the dotted form, so the canonical hex form passed and a\nlitera\n[…]\ning contains no TS-only constructs.\n\nTests: +11 cases (v4-mapped literal+hex, subresource block + happy-path,\ntransparent-bg variants, meta description extraction + script-purity check).\n1902 passing.",
"is_bot": false,
"headline": "fix(url-extract): codex iter-2 — v4-mapped IPv6, subresource SSRF, mo…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T06:13:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "172fceb6ddac421d27e14d51d09a55c3f48bc826",
"body": "Two P1 SSRF holes + one P3 dead-flag flagged by /codex review on PR #90.\n\nP1 #1 — DNS-resolved private IPs bypassed the guard. defaultSsrfGuard only\nchecked the literal hostname string, so `internal.example` resolving to 10.x\nor 169.254.x passed and Playwright fetched the private-network address.\nde\n[…]\nulti-A-record\npoisoning, v4-mapped v6, lookup failure, empty resolution) + 2 redirect\ninterception cases (abort on private-IP hop, happy path). 1891 passing.\n\nCodex re-review recommended before merge.",
"is_bot": false,
"headline": "fix(url-extract): codex P1 SSRF + P3 headless flag",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T05:59:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f83646f9c89f16ba833f4f5456eb17fa475ad4c8",
"body": "Turns the JSON dump into the user-facing artifact: `coherent extract <url>\n--out linear-DESIGN.md` writes a clean markdown file that drops straight\ninto Claude Code / Cursor / v0 / Lovable as a design seed. This is the\n\"tech-demo → real tool\" milestone from the Tool 1 design doc.\n\n- packages/core/sr\n[…]\nS + prettier clean.\nPending: token-normalizer (color clustering + role inference),\nsemantic LLM pass, robots.txt, 3 HTML fixtures.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(core+cli): design-md-serializer — pasteable DESIGN.md artifact",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T03:32:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "43fd734a3565422dd1716f9ede48b9fa0748f1a7",
"body": "Closes the gradients/patterns/breakpoints holes left by computed-style-extractor.\nPure module, no DOM, no LLM. ExtractDesignTokensOptions accepts mediaQueries\ncaptured by extractMediaQueriesInPage; CLI passes them through.\n\n- parseBreakpoints(mediaQueries[]) → { strategy, values[] }\n - mobile-first\n[…]\n→ 1871 tests (+20). Build + TS + prettier clean.\nPending: token-normalizer (color clustering), semantic LLM, design-md serializer.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(core): stylesheet-parser fills the 3 deterministic stubs",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T03:18:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5229799d795f088e92bbf4a98160236f27b9033c",
"body": "Wires Playwright into the url-extract chain. `coherent extract <url>` now\ncaptures, samples, and prints a deterministic atmosphere summary in one\ncommand. Smoke-tested on example.com: 1831ms total, Tier 1 hero (h1\n\"Example Domain\" 24px), 3 colors, 3 type families, body+h1 scale, spacing\nscale, radiu\n[…]\nng (no regression). Note: no unit test for\nplaywright-driver — mocking Playwright provides no signal; smoke test\nis the real gate.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(cli): coherent extract — first end-to-end smoke pass",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T03:06:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "361cd5baaa46ba4d873b087fb7fe5606e0db456e",
"body": "…ctor\n\nContinuation of bootstrap. Two scoped additions atop 3-tier hero detection.\n\n1. happy-dom in core devDeps + hero-detection.test.ts (8 tests, env directive\n per-file). Proves Tier 2 works on the awwwards/larevoltosa-shaped DOM\n that broke Tier 1 in the 5-site dogfood (h1 missing, custom di\n[…]\nzier(...) commas.\nBoth fixed; splitTopLevelComma is paren-depth-aware.\n\nNet: 1806 → 1851 tests (+45). Build + TS + prettier clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(core): url-extract — happy-dom hero tests + computed-style-extra…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T02:40:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cd8da59c0f9aad4d1949c99575263c3ca10bf8b0",
"body": "First Week 1 module of Tool 1 (URL → DESIGN.md). Highest-risk piece per\n2026-05-04 5-site dogfood: 2/5 admired sites had `<h1>` null (custom\ndiv/SVG hero). Detection pivots to 3-tier — semantic h1 → largest visible\ntext → multimodal LLM stub.\n\n- types.ts: ExtractedAtmosphere Zod schema covering 20 c\n[…]\nxtractor, stylesheet-parser, token-normalizer, semantic LLM\npass, design-md serializer extension, CLI command + Playwright wiring.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(core): bootstrap url-extract package — 3-tier hero + Zod schema",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-05T02:33:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "09321cc2e5e6c427ee8ea2567f79a9f79dae2e02",
"body": "Two competitive-positioning gaps closed (per CEO review vs Aura.build + Refero\nStyles, 2026-05-03). Both reuse existing infrastructure.\n\nDESIGN.md output:\n- buildDesignMarkdown serializer (pure function, snapshot-stable)\n- Best-effort write at end of chatCommand — never blocks chat\n- Sections: atmos\n[…]\n in ADR-0008: visual editor, community marketplace,\nmulti-model SDK, multi-editor adapter parity. URL import deferred to TODOS T9.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.18.0 — DESIGN.md output artifact + @-syntax for shared components",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-05-03T18:02:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "56158189342b5175d6bd8276a405335796726f3b",
"body": "User feedback: proportional bars looked wrong. Show bars at literal px\nwidth matching the value (xs=4px, 3xl=64px) so the visualization is\n1:1 with the spec.",
"is_bot": false,
"headline": "v0.17.19 — spacing bars literal px width",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T08:25:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bef2d2e388a6991fc92af9f71084c1895e5ecb99",
"body": "Bars on /design-system/tokens/spacing weren't visible because each was\nsized to the literal token value (0.25rem-4rem = 4-64px), with bg-primary/70\nbeing too faint against the dark surface. Replaced with proportional bars\nscaled to the largest spacing value (max = 100% of column), solid bg-primary,\nplus a px-equivalent column for designer reference.",
"is_bot": false,
"headline": "v0.17.18 — spacing tokens scaled bars",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T08:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7749a78f0679aeb526425e24745ff7690e03ab4d",
"body": "…tail (#89)\n\nUser feedback: v0.17.16 'At a glance' showed dev-oriented info (LoC,\nexports, hooks, imports, Props interface) — the audience here is\ndesigners, not engineers. Designers care about visual + token usage,\nnot TypeScript metadata.\n\nReplace API-extracted meta with designer-relevant signals:\n[…]\nmuted-foreground colors, p-4 / gap-3 spacing, text-sm / font-medium\ntypography, has 2 buttons, 1 icon, and one interactive state.'\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.17 — designer-relevant meta on shared component de…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T08:00:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9acdc4631ccc3b759c68a0436967f64bbf46e59a",
"body": "…source meta (#88)\n\nUser feedback: the v0.17.15 'see it live' card had identical generic\nboilerplate text for every shared component — useless. Replace with\nper-component truthful info extracted from the actual source code.\n\nAPI enhancement (/api/design-system/shared-components/[id]):\n- Returns new \n[…]\nhful representation\n\nEach component now shows unique info — LandingNav has different LoC,\nhooks, dependencies than CopyableInline.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.16 — replace generic 'see it live' with extracted …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:51:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b06f838fc635f4245a201a3311001988684cf1cb",
"body": "…A (#87)\n\nIframe-based 'preview · in context' showed the entire host page for\neach shared component. When multiple shared components live on the\nsame page (e.g., landing has 5), every preview looked identical and\nmisled users into thinking the components weren't rendering.\n\nReplace with a metadata-r\n[…]\n/Footer/etc.), explain\nwhy any route is a valid preview surface.\n\nSource code remains the truthful representation of the component.\nFuture-ready for isolated render via previewProps in manifest entry.",
"is_bot": false,
"headline": "fix(viewer): v0.17.15 — drop iframe preview, replace with link-out CT…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:35:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "35c84c12238d20e3d3796f9be897a31b97948245",
"body": "…l API (#86)\n\nCoherent-generated next.config.js now includes outputFileTracingIncludes\nfor the design-system API routes. Vercel's automatic file tracing skips\nraw .tsx source files (they're imported as compiled JS, not text), so\nthe /api/design-system/shared-components/[id] route returns 404 in\nprod\n[…]\n for shared component detail pages — already patched on landing\nin a separate commit. This propagates the fix to all new projects.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(scaffold): v0.17.14 — bundle DS manifest + .tsx sources for Verce…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:25:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6a207d954ffe4d56ca6c6783cf2143263472c236",
"body": "…nt.design (#85)",
"is_bot": false,
"headline": "fix(viewer): v0.17.13 — Coherent Design Method clickable to getcohere…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:10:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90fcf97596d2e0e9210d2294eb38ff48b3e0f17c",
"body": "…e dist) (#84)",
"is_bot": false,
"headline": "fix(viewer): v0.17.12 — republish LinkedIn URL fix (v0.17.11 had stal…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:07:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96d449f15b2c8a87d1633051573161300abc3795",
"body": null,
"is_bot": false,
"headline": "fix(viewer): v0.17.11 — author link → LinkedIn (#83)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:04:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18bf9ec572a9cfc0606f851decc4a5dd635acc3e",
"body": null,
"is_bot": false,
"headline": "fix(viewer): v0.17.10 — attribution pb-4 (1rem bottom padding) (#82)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T07:02:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "59a1941c812221a75844b1ab30bacb16e72d3646",
"body": "User feedback: pb-4 lg:pb-5 still leaves visible empty space below\nthe attribution row. Drop bottom padding entirely so the row sits\nflush against the viewport edge.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.9 — drop attribution footer bottom padding (#81)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T06:57:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "15dd582ee8e73aaec3606140dcd34b570a21ff67",
"body": "…(#80)\n\nPreviously coherent update bailed early with 'already up to date' when\nproject version matched CLI version. Templates change between patch\npublishes within the same SemVer (e.g., v0.17.5 → v0.17.6 → v0.17.7) —\nusers had no way to pull template fixes without manually editing the\nversion field\n[…]\nreshed at vX'\n\nVerified: landing regenerated end-to-end (20 overlay files), layout\ncorrectly applied v0.17.7 centered attribution.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(cli): v0.17.8 — update force-regenerates overlay on same version …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T06:55:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d33ff52fbe7c89400c640e4de1a1ac328fa37e0",
"body": "User feedback on v0.17.6: too much bottom padding, justify-between\nspread author and GitHub chip too far apart, attribution should be\ncentered with chip inline next to author name.\n\nChanges:\n- pb-8 lg:pb-10 → pb-4 lg:pb-5\n- pt-5 → pt-4\n- justify-between → justify-center, single centered row\n- GitHub chip smaller (px-2 py-1, 12px Octicon)\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.7 — tighten attribution footer, center inline (#79)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T06:45:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fb38fa11c84bdb65c2f1a399b6e87ced5eb92a6e",
"body": "…r (#78)\n\nUser feedback: v0.17.5 placed Coherent Design Method · by Sergei Kovtun +\nGitHub chip in the sidebar footer below version/generated, where they\ncompeted for space and felt cramped.\n\nMoved to the bottom of the main content column — horizontal layout\nbelow children, with top-border separator\n[…]\n the GitHub chip with a proper Octicon SVG + external-link\narrow.\n\nSidebar footer back to clean version + generated metadata only.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.6 — move attribution from sidebar to content foote…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T06:35:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c7900708e2fe4d2c6a83c18c5d486fa334e792a",
"body": "…(#77)\n\n4 user-feedback fixes:\n\n1. Footer attribution restored (was in older versions, dropped in v0.17.0)\n — \"Coherent Design Method · by Sergei Kovtun\" + linked GitHub chip in\n sidebar footer below version/generated metadata.\n\n2. Shared Components table — Name primary clickable (font-medium\n \n[…]\nopen-in-new-tab link.\n\nVerified: 1746 tests pass, typecheck clean, smoke regen 200 on all DS\nroutes including shared detail pages.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.5 — footer attribution + shared components polish …",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T06:06:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d5c2bdd05b24d654b685f97275cbfb1c01489a25",
"body": "…s rewrite (#76)\n\n3 user-feedback fixes:\n\n1. Color page dark column wrapped in .dark bg-background so it visually\n reads as the dark theme (not just light card with dark swatches)\n\n2. Sidebar:\n - Subtle bg-muted/30 surface (was bg-background — same as content)\n - Icons on all 6 main groups (Lu\n[…]\nly only the\nregenerate-docs subcommand did this).\n\nVerified: 1746 tests pass, typecheck clean, smoke regen 200 on all 6 DS\nroutes.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.4 — color dark surface + sidebar polish + docs/rec…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T04:07:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1052a5d4794d5389dd964f4bb3c4a0a5d18caf90",
"body": "Bugs:\n- isGroupActive checks child link paths so Foundations expands on Voice\n- linkActive is exact match — \"All components\" no longer always selected\n- Drop overflow-hidden on Preview/Variants/Sizes blocks so dropdowns\n break out without being clipped (rounded corners preserved via\n rounded-t-md \n[…]\n hints (\"Surface — backgrounds and content layers\")\n\nVerified: 1746 tests pass, typecheck clean, smoke regen 200 on all DS\nroutes.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.3 — bugs + UX consistency + polish (8 feedback) (#75)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-30T00:11:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "799c9ef1cf3ed66c16862e92959d3c40ebe76c30",
"body": "Four user-feedback fixes after v0.17.1 ship:\n\n1. Sidebar header reordered — brand block top, Back to App below\n2. IA flat (no numbering) — Foundations contains Color/Typography/Spacing/\n Voice; Base Components + Shared Components renamed; Sitemap/Docs/\n Recommendations as flat tail below soft di\n[…]\noverrides. Cleaner, theme-correct\nautomatically.\n\nVerified: 1746 tests pass, typecheck clean, smoke regenerated all DS\nroutes 200.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.2 — IA restructure + sidebar color rethink (#74)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-29T23:20:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b81a4fa4ce1c4d4705a099c303b57f9a796dbd93",
"body": "User reviewed v0.17.0 live, surfaced 7 issues. All addressed.\n\n1. Two-level navigation. Top-level groups (01 Foundations, 02\n Components, 03 Patterns, 04 Voice) clickable to overview, with\n active group auto-expanding to show children. Components and\n Shared blocks fetched dynamically + alphab\n[…]\nconsult ratified plan. Known limitation: dynamic home\n+ tokens pages still mono-heavy — deferred to v0.17.2.\n\nTests: 1746 passing.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(viewer): v0.17.1 — 7 user-feedback fixes after v0.17.0 ship (#73)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-29T22:15:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3f5af57b032a986baed9156f84055aacb979cefe",
"body": "Foundational redesign of the /design-system/ viewer in every generated\nproject. Per direction doc at\n~/.gstack/projects/skovtun-coherent-design-method/design-system-viewer-direction-2026-04-29.md\n(Primer + Atlassian + Geist references).\n\nLayout (design-system-layout.ts rewritten):\n- Permanent left s\n[…]\n- Existing dynamic home preserved for runtime data fetching\n\nTests: 1746 passing (template content, validated via build + review).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(viewer): v0.17.0 — design-system viewer redesign (#72)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-29T21:11:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a2e77dadc25b91873b87afed0979f62fae9de512",
"body": "… (#71)\n\nSidecar tokenUsage.colors mapping tells AI WHERE each token belongs:\n\n tokenUsage: {\n colors: {\n primary: \"Primary actions, active nav, focus rings\",\n muted: \"Subtle section backgrounds, inactive states\",\n }\n }\n\nSurfaces:\n- Modification prompt: COLOR USAGE block appended a\n[…]\n/prompt-builders/modification.ts: render\n COLOR USAGE block\n- harness-context.test.ts: 4 new tests\n\nTests: 1746 passing (+4 new).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(tokens): v0.16.1 — semantic color usage notes (Rollur borrow #2)…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-29T20:51:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "63d162959af6731bb6d5b108a25f22da65dbf0da",
"body": "…aint (#70)\n\nAdds VoiceProfileSchema parallel to atmosphere. Where atmosphere shapes\nvisual, voice shapes COPY: tone, ctaStyle, copyRules, avoidWords,\ntransparencyRules.\n\nInjected into modification prompt as ## VOICE DIRECTIVE block between\nCORE_CONSTRAINTS and design-quality rules. Empty/absent voi\n[…]\ni/src/phase-engine/prompt-builders/modification.ts: inject\n- voice-directive.test.ts: 11 new tests\n\nTests: 1742 passing (+11 new).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(voice): v0.16.0 — voice profile as first-class generation constr…",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-29T19:48:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a92a1ce49672194c36c4f35507005ec30df37aba",
"body": "After verifying agentskills.io spec literally, codex was correct on\nall three deferred issues.\n\n1. metadata flat-string compliance. Spec literally: \"A map from\n string keys to string values.\" v0.15.2's nested shape violated\n that. Flattened to:\n metadata:\n coherent_phase_engine_protoco\n[…]\nall\n design.* keys, renders strings and string arrays. Forward-compat\n for fields we add later.\n\nTests: 1731 passing (+5 new).\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: v0.15.5 — three deferred codex findings (#69)",
"author_name": "Sergei Kovtun",
"author_login": "skovtun",
"committed_at": "2026-04-29T19:11:23Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 37,
"commits_last_year": 693,
"latest_release_at": "2026-04-29T22:16:09Z",
"latest_release_tag": "v0.17.1",
"releases_from_tags": false,
"days_since_last_push": 10,
"active_weeks_last_year": 13,
"days_since_latest_release": 95,
"mean_days_between_releases": 0
},
"artifacts": {
"collected": true,
"structure": [],
"declarations": [
{
"name": null,
"path": "package.json",
"tokens": [
"npm.private"
],
"ecosystem": "npm"
},
{
"name": "@getcoherent/cli",
"path": "packages/cli/package.json",
"tokens": [
"npm.bin",
"npm.entry",
"npm.peer_dependencies"
],
"ecosystem": "npm"
},
{
"name": "@getcoherent/core",
"path": "packages/core/package.json",
"tokens": [
"npm.entry"
],
"ecosystem": "npm"
}
]
},
"community": {
"has_readme": true,
"has_license": true,
"readme_badges": {
"hosts": [
"shields.io"
],
"total": 4,
"header": 4,
"collected": true,
"has_inspect_badge": false
},
"has_description": true,
"has_contributing": true,
"health_percentage": 57,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@getcoherent/cli",
"exists": true,
"license": "MIT",
"keywords": [
"design-system",
"cli",
"frontend",
"ai",
"code-generation",
"nextjs",
"react",
"coherent"
],
"ecosystem": "npm",
"categories": [],
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@getcoherent/cli",
"declared_type": null,
"is_deprecated": false,
"latest_version": "0.26.0",
"repository_url": "https://github.com/skovtun/coherent-design-method",
"versions_count": 245,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 5350,
"first_published_at": "2026-03-10T05:51:50.761000Z",
"latest_published_at": "2026-07-23T22:12:34.372000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 10
},
{
"name": "@getcoherent/core",
"exists": true,
"license": "MIT",
"keywords": [
"design-system",
"frontend",
"ai",
"code-generation",
"coherent"
],
"ecosystem": "npm",
"categories": [],
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@getcoherent/core",
"declared_type": null,
"is_deprecated": false,
"latest_version": "0.26.0",
"repository_url": "https://github.com/skovtun/coherent-design-method",
"versions_count": 244,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 5669,
"first_published_at": "2026-03-10T05:51:44.152000Z",
"latest_published_at": "2026-07-23T22:12:31.846000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 10
}
]
},
"popularity": {
"forks": 1,
"stars": 22,
"watchers": 0,
"fork_history": {
"days": [
{
"date": "2026-06-26",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_forks": 1
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"packages/cli/tsconfig.json",
"packages/core/tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 125127,
"source_files_sampled": 456,
"oversized_source_files": 5,
"agent_instruction_files": [
".cursor/rules/safe-file-transforms.mdc",
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 15048
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 162,
"malicious_count": 0,
"assessed_package": "npm:@getcoherent/cli@0.26.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@anthropic-ai/sdk",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^0.32.0"
},
{
"name": "@getcoherent/core",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "workspace:*"
},
{
"name": "@modelcontextprotocol/sdk",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^1.29.0"
},
{
"name": "chalk",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^5.3.0"
},
{
"name": "chokidar",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.1"
},
{
"name": "commander",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^11.1.0"
},
{
"name": "dotenv",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^16.4.5"
},
{
"name": "open",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^10.1.0"
},
{
"name": "ora",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^7.0.1"
},
{
"name": "prompts",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^2.4.2"
},
{
"name": "zod",
"manifest": "packages/cli/package.json",
"ecosystem": "npm",
"version_constraint": "^3.22.4"
},
{
"name": "zod",
"manifest": "packages/core/package.json",
"ecosystem": "npm",
"version_constraint": "^3.22.4"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 148,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 3,
"closed_unmerged_prs": 2
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "skovtun",
"commits": 693,
"avatar_url": "https://avatars.githubusercontent.com/u/56520472?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"publish.yml",
"quality-canary.yml"
],
"has_docs_dir": true,
"linter_configs": [
"eslint.config.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"pnpm-lock.yaml"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "23 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "3b7decbded989b70842cf2026dad7a097be8fdc3",
"ran_at": "2026-08-03T02:39:47Z",
"aggregate_score": 3.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"recent_prs": {
"merged_7d": 0,
"decided_7d": 0,
"merged_30d": 41,
"authors_30d": 1,
"decided_30d": 41,
"sample_size": 60,
"window_days": 30,
"sample_exhausted": false,
"authors_probed_30d": 1,
"newcomer_merged_30d": 0,
"bot_prs_excluded_30d": 0,
"newcomer_authors_30d": 0,
"newcomer_decided_30d": 0
},
"ci_last_run_at": "2026-08-02T08:29:51Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-23T22:12:19Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/skovtun/coherent-design-method",
"host": "github.com",
"name": "coherent-design-method",
"owner": "skovtun"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": "The weighted overall 65 is calibrated to 75 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 65,
"calibrated": 75,
"calibration": "2026-08-02"
}
}
],
"value": 75,
"inputs": {
"security": 49,
"vitality": 76,
"community": 50,
"governance": 54,
"calibration": "2026-08-02",
"engineering": 90,
"ai_readiness": 69,
"weighted_overall_raw": 65
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 76,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"commits_last_year": 693,
"human_commit_share": 1,
"days_since_last_push": 10,
"active_weeks_last_year": 13
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 10 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 10
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "13/52 weeks with commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 13
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "693 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 693
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 90,
"inputs": {
"releases_count": 37,
"latest_release_tag": "v0.17.1",
"releases_from_tags": false,
"days_since_latest_release": 95,
"mean_days_between_releases": 0
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "37 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 37
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 95 days ago",
"points": 27,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 95
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~0 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 10,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 10 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 10
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 50,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 21,
"inputs": {
"forks": 1,
"stars": 22,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "22 stars",
"points": 21.4,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 22
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "1 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 1
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": 4,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [
"shields.io"
],
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "good",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 67,
"inputs": {
"packages": [
"@getcoherent/cli",
"@getcoherent/core"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 11019
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "11,019 downloads/month across npm",
"points": 53.9,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 11019,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 54,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"newcomer_pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 82,
"inputs": {
"merged_prs": 148,
"open_issues": 0,
"closed_issues": 3,
"prs_merged_7d": 0,
"prs_decided_7d": 0,
"prs_merged_30d": 41,
"prs_decided_30d": 41,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 2,
"first_time_authors_30d": 0,
"first_time_prs_merged_30d": 0,
"first_time_prs_decided_30d": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 42,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "148/150 decided PRs merged",
"points": 29.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 148,
"decided": 150
}
}
],
"max_points": 30
},
{
"key": "newcomer_pr_acceptance",
"name": "Newcomer PR acceptance",
"detail": "no first-time contributor's PR decided in 30d",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_newcomer_prs",
"params": {
"days": 30
}
}
],
"max_points": 13
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "weak",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 40,
"inputs": {
"followers": 7,
"owner_type": "User",
"is_verified": null,
"owner_login": "skovtun",
"public_repos": 2,
"account_age_days": 2485
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "7 followers of skovtun",
"points": 6.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 7,
"login": "skovtun"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "2 public repos, account ~6 yr old",
"points": 15.5,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 2
}
},
{
"code": "account_age_years",
"params": {
"years": 6
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@getcoherent/cli",
"@getcoherent/core"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 10
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "2 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 2,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 10 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 10
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "245 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 245
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "excellent",
"name": "Engineering Quality",
"value": 90,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "exceptional",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"ai",
"cli",
"code-generation",
"code-generator",
"design-system",
"design-systems",
"nextjs",
"react",
"shadcn-ui",
"tailwindcss"
],
"has_wiki": true,
"homepage": "https://getcoherent.design",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://getcoherent.design",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "10 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 10
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "weak",
"name": "Security",
"value": 49,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 36,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "26 out of 26 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "23 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@getcoherent/cli@0.26.0 runtime dependency closure — what installing the published package pulls in — 162 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "npm:@getcoherent/cli@0.26.0",
"assessed": 162
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 162,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 162,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 69,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
".cursor/rules/safe-file-transforms.mdc",
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 15048
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": ".cursor/rules/safe-file-transforms.mdc, AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".cursor/rules/safe-file-transforms.mdc, AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"pnpm-lock.yaml"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"packages/cli/tsconfig.json",
"packages/core/tsconfig.json"
],
"agent_commit_share": 0.87,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "packages/cli/tsconfig.json, packages/core/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "packages/cli/tsconfig.json, packages/core/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "87 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 87,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "exceptional",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 125127,
"source_files_sampled": 456,
"oversized_source_files": 5
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "5/456 source files over 60KB",
"points": 54.4,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 456,
"oversized": 5
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"example_dirs": [],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
}
],
"classification": {
"labels": [
"cli",
"mcp-server",
"library"
],
"scores": {
"cli": 12,
"library": 6.6,
"mcp-server": 7
},
"primary": "cli",
"evidence": [
{
"tier": "declared",
"label": "cli",
"source": "npm.bin",
"weight": 6
},
{
"tier": "declared",
"label": "library",
"source": "npm.private",
"weight": -6
},
{
"tier": "distribution",
"label": "library",
"source": "registry:npm",
"weight": 6
},
{
"tier": "declared",
"label": "library",
"source": "npm.entry",
"weight": 4.8
},
{
"tier": "dependencies",
"label": "cli",
"source": "dep:commander",
"weight": 4
},
{
"tier": "dependencies",
"label": "mcp-server",
"source": "dep:@modelcontextprotocol/sdk",
"weight": 4
},
{
"tier": "structure",
"label": "mcp-server",
"source": "mcp_signal",
"weight": 3
},
{
"tier": "tags",
"label": "cli",
"source": "tag:cli",
"weight": 2
},
{
"tier": "declared",
"label": "library",
"source": "npm.peer_dependencies",
"weight": 1.8
}
],
"artifacts": [
{
"path": "package.json",
"labels": [],
"ecosystem": "npm"
},
{
"path": "packages/cli/package.json",
"labels": [
"library",
"cli"
],
"ecosystem": "npm"
},
{
"path": "packages/core/package.json",
"labels": [
"library"
],
"ecosystem": "npm"
}
],
"confidence": "high",
"host_extension": false,
"runs_as_process": true,
"consumed_by_code": true
},
"metrics_version": "2.3.1"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-08-03T02:40:03.471877Z",
"schema_version": "0.30.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/skovtun/coherent-design-method.svg",
"full_name": "skovtun/coherent-design-method",
"license_state": "standard",
"license_spdx": "MIT"
}