mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-18 09:06:53 +03:00
15 lines
7.5 KiB
JSON
15 lines
7.5 KiB
JSON
{
|
|
"stdout": "{\n \"projectRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"isMonorepo\": false,\n \"productPath\": \"PRODUCT.md\",\n \"designPath\": \"DESIGN.md\",\n \"platform\": \"web\",\n \"ruleRegistryAvailable\": true,\n \"findings\": [\n {\n \"id\": \"product-deprecated-register\",\n \"artifact\": \"PRODUCT.md\",\n \"path\": \"PRODUCT.md\",\n \"severity\": \"mention\",\n \"summary\": \"PRODUCT.md still carries a `## Register` section. v4 replaced the brand/product register axis with the four visitor modes (Persuade, Operate, Read, Experience), which are chosen per surface and persisted in that surface's brief. Nothing reads `## Register` any more.\",\n \"fix\": \"Treat `## Register` as absent for every decision this session. Offer to delete the section; do not let its value influence the work either way.\"\n },\n {\n \"id\": \"product-schema-legacy\",\n \"artifact\": \"PRODUCT.md\",\n \"path\": \"PRODUCT.md\",\n \"severity\": \"route\",\n \"summary\": \"PRODUCT.md has no schema stamp and none of the sections the current record adds (Positioning, Operating Context, Evidence on Hand, Product Principles), so it predates this version of the product record.\",\n \"fix\": \"Offer `init`, which preserves confirmed answers and fills the gaps by interview. Do not rewrite the file from inference.\"\n },\n {\n \"id\": \"design-sidecar-legacy-path\",\n \"artifact\": \"design.json\",\n \"path\": \"DESIGN.json\",\n \"severity\": \"auto\",\n \"summary\": \"The design sidecar sits at DESIGN.json, a location kept only for backward compatibility.\",\n \"fix\": \"Move it to .impeccable/design.json the next time the sidecar is written. No user decision is needed.\"\n },\n {\n \"id\": \"design-sidecar-schema-outdated\",\n \"artifact\": \"design.json\",\n \"path\": \"DESIGN.json\",\n \"severity\": \"route\",\n \"summary\": \"DESIGN.json is schemaVersion 1; the current sidecar is 2. Token primitives moved to the DESIGN.md frontmatter, so the old shape carries values that are now read from two places.\",\n \"fix\": \"Offer `document` to regenerate the sidecar. It reads the existing DESIGN.md, so no interview is needed.\"\n },\n {\n \"id\": \"design-sidecar-stale\",\n \"artifact\": \"design.json\",\n \"path\": \"DESIGN.json\",\n \"severity\": \"mention\",\n \"summary\": \"DESIGN.md was edited after DESIGN.json was generated, so the sidecar's ramps, shadows, motion tokens, and component snippets may contradict it.\",\n \"fix\": \"Offer `document` to refresh the sidecar, preserving DESIGN.md.\"\n },\n {\n \"id\": \"design-md-coverage\",\n \"artifact\": \"DESIGN.md\",\n \"path\": \"DESIGN.md\",\n \"severity\": \"mention\",\n \"summary\": \"DESIGN.md has no components section. Agents generating new screens get no normative guidance for those, and the live design panel renders generic approximations in their place.\",\n \"fix\": \"Ask whether the section never applied or was never written. `document` fills it from the code if the project has the answer in its CSS.\"\n },\n {\n \"id\": \"config-unknown-keys\",\n \"artifact\": \"config.json\",\n \"path\": \".impeccable/config.json\",\n \"severity\": \"mention\",\n \"summary\": \".impeccable/config.json has top-level key(s) nothing reads: `theme`. Recognized keys are `hook`, `detector`, `updateCheck`, `stalenessCheck`, `projectRoots`, `buildPath`, `$schema`, `version`.\",\n \"fix\": \"Report the exact keys to the user. A near-miss of a real key is a setting that has never applied.\"\n },\n {\n \"id\": \"config-invalid-build-path\",\n \"artifact\": \"config.json\",\n \"path\": \".impeccable/config.json\",\n \"severity\": \"mention\",\n \"summary\": \".impeccable/config.json sets `buildPath` to \\\"fast\\\", which nothing reads. The values are `comp` and `code`.\",\n \"fix\": \"Report the value. An unread `buildPath` does not fall back to the other path; it falls back to the default, so a project meaning `code` has been building comp-led.\"\n },\n {\n \"id\": \"config-unknown-detector-keys\",\n \"artifact\": \"config.json\",\n \"path\": \".impeccable/config.json\",\n \"severity\": \"mention\",\n \"summary\": \".impeccable/config.json has `detector` key(s) nothing reads: `mode`. Recognized keys are `ignoreRules`, `ignoreFiles`, `ignoreValues`, `designSystem`, `extensions`.\",\n \"fix\": \"Report the exact keys. `ignoreRule` for `ignoreRules` is the common one, and it silences nothing.\"\n },\n {\n \"id\": \"detector-ignore-rules-unknown\",\n \"artifact\": \"config.json\",\n \"path\": \".impeccable/config.json\",\n \"severity\": \"mention\",\n \"summary\": \".impeccable/config.json ignores rule id(s) the detector does not have: `not-a-real-rule`. Either the rule was renamed or removed, or the id was mistyped and has never suppressed anything.\",\n \"fix\": \"Report the exact ids. Removing them is safe; keeping a dead ignore hides that the rule is gone.\"\n },\n {\n \"id\": \"detector-ignore-files-missing\",\n \"artifact\": \"config.json\",\n \"path\": \".impeccable/config.json\",\n \"severity\": \"mention\",\n \"summary\": \".impeccable/config.json ignores file path(s) that no longer exist: `src/vendor/missing.css`.\",\n \"fix\": \"Ask whether the file moved (repoint the entry) or was deleted (drop it). A stale entry silently stops covering the file that replaced it.\"\n },\n {\n \"id\": \"surface-brief-orphaned\",\n \"artifact\": \"surface brief\",\n \"path\": \".impeccable/surfaces/src-old-astro.md\",\n \"severity\": \"mention\",\n \"summary\": \"1 persisted surface brief(s) name a primary target that no longer exists: .impeccable/surfaces/src-old-astro.md → src/old.astro.\",\n \"fix\": \"Ask whether the surface moved (repoint the brief) or was removed (delete the brief). Until then the brief is authority for a file that is gone.\"\n },\n {\n \"id\": \"legacy-live-state\",\n \"artifact\": \"live state\",\n \"path\": \".impeccable-live.json\",\n \"severity\": \"auto\",\n \"summary\": \"Live-mode state sits in retired location(s): `.impeccable-live.json`. Current live mode writes under `.impeccable/live/`.\",\n \"fix\": \"These are read only through backward-compatible fallbacks and are safe to delete once no live session is running. No user decision is needed.\"\n }\n ],\n \"workspaces\": []\n}\n",
|
|
"stderr": "",
|
|
"exit": 0,
|
|
"signal": null,
|
|
"files": {
|
|
".impeccable-live.json": "{\n \"port\": 4310,\n \"sessions\": []\n}\n",
|
|
".impeccable/config.json": "{\n \"buildPath\": \"fast\",\n \"theme\": \"dark\",\n \"detector\": {\n \"ignoreRules\": [\n \"gradient-text\",\n \"not-a-real-rule\"\n ],\n \"ignoreFiles\": [\n \"src/vendor/missing.css\"\n ],\n \"mode\": \"strict\"\n }\n}\n",
|
|
".impeccable/surfaces/src-old-astro.md": "---\nversion: 1\nslug: \"src-old-astro\"\nprimary_target: \"src/old.astro\"\nrelated_targets: []\n---\n\n# Surface brief: Old\n\nRetired page.\n",
|
|
"DESIGN.json": "{\n \"schemaVersion\": 1,\n \"colors\": {\n \"ink\": \"#111\"\n }\n}\n",
|
|
"DESIGN.md": "---\nname: Legacy\n---\n# Design System: Legacy\n\n## Colors\n- **Ink** (#111): Text.\n\n## Typography\n**Body Font:** Inter\n",
|
|
"PRODUCT.md": "# Legacy Product\n\n## Register\n\nbrand\n\n## Users\nDesigners who ship.\n\n## Platform\n\nweb\n"
|
|
}
|
|
}
|