diff --git a/README.md b/README.md index a3170b6..bebac1a 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ It is not a beautifier, generic design-system linter, prompt library, schema bro ## Product Thesis -AI-generated UI fails when the implementation model becomes the user experience. Tables become screens, schemas become forms, tool calls become buttons, and internal prompts become product vocabulary. +Implementation details can obscure the user’s work when record labels replace domain language, forms expose irrelevant fields, or controls name tool commands instead of the user’s actions. Technical detail remains useful for setup, debugging, auditing, and integration. -JudgmentKit catches when AI-generated UI turns implementation mechanics into UX, then gives the agent repair instructions before the work ships. +JudgmentKit gives the agent interaction guidance, checks declared interface requirements against supplied evidence, and returns repair instructions. The caller’s agent implements changes and resubmits; unresolved required verification remains visible. -The shippable value path is the public `/value/` page: it shows what JudgmentKit prevents with concrete before/after cases for implementation-language leakage, unsafe approval boundaries, and missing accessibility evidence. Eval reports remain supporting evidence for audit and reproduction, not the primary product story. +The public `/value/` page shows selected checks and curated repair examples for implementation-language leakage, approval boundaries, and missing accessibility evidence. Eval reports remain supporting evidence for audit and reproduction, with their original versions and conditions. JudgmentKit gives the agent a better order of operations: diff --git a/docs/site-homepage-art-provenance.json b/docs/site-homepage-art-provenance.json new file mode 100644 index 0000000..8d1cba7 --- /dev/null +++ b/docs/site-homepage-art-provenance.json @@ -0,0 +1,37 @@ +{ + "date": "2026-10-16", + "role": "JudgmentKit public homepage environmental background", + "asset": "site/assets/judgment-lens-environment-v2.webp", + "sha256": "4604767e61b39228ea0b0c079828d905cffd65de7ae2d467047b1ccb7e26979b", + "bytes": 154502, + "dimensions": [ + 1983, + 793 + ], + "generator": "built-in image_gen", + "mode": "reference-based generation and composition", + "prompt": "Use case: compositing. Asset type: full-width website hero background. Image 1 is the EDIT TARGET: JudgmentKit's existing portrait artwork of rough stone fragments passing through a teal glass lens and emerging as an ordered curved path. Image 2 is a STYLE/COMPOSITION REFERENCE ONLY: the Surfaces architectural slab environment. Recompose and extend Image 1 into a very wide 2.5:1 landscape (approximately 2400x960) suitable for a full-bleed homepage hero behind live HTML text. Preserve the recognizable teal glass lens, stone fragments, ordered path, premium realistic materials and quiet lighting. Place the lens and ordered path predominantly in the right half to right third. Extend a spacious, dim Ink/Graphite studio environment across the left 50 percent so white text can be placed there. The artwork must fill the frame naturally with no visible card/container boundary. Use the restrained environmental depth, tonal balance and architectural scale of Image 2 without adding its slabs to this scene. Lens must remain recognizably the same subject, not become a logo, eye or portal to another world. No text, no typography, no logos, no UI, no border, no rounded frame, no watermark. Do not bake a dark gradient text overlay into the bitmap; the left environment should be naturally quiet and dark. Single final landscape image.", + "editSource": { + "path": "site/assets/judgment-lens-hero.webp", + "sha256": "becef95f1088efd5f0e01263bff7d5d74868fd523ba267da347ce722284e81f8", + "preserved": true + }, + "styleAndCompositionReference": "https://www.surfaces.systems/", + "sharedLayoutContract": { + "path": "specs/website-family-layout.md", + "sha256": "ce279d508bb304f80a5c95bb8df3be1bc8e8ffe631254412cb3d10df2d57b007", + "source": "SurfacesBrand/specs/website-family-layout.md", + "observedViewports": [ + [ + 1280, + 720 + ], + [ + 390, + 844 + ] + ] + }, + "artworkReview": "Root visually accepted the wide artwork before browser composition review. Final page acceptance remains separate.", + "preservation": "Canonical marks, lockups, favicon geometry and social artwork are unchanged. No text or UI is baked into this asset." +} diff --git a/scripts/verify-public-release.mjs b/scripts/verify-public-release.mjs index 30dea62..93b9acd 100644 --- a/scripts/verify-public-release.mjs +++ b/scripts/verify-public-release.mjs @@ -466,9 +466,10 @@ export function assertValueAppearanceContract(valueHtml, siteCss) { [ '', '', + '', 'class="value-findings"', "Baseline failure", - "JudgmentKit catches", + "JudgmentKit checks", "Repaired outcome", ], "value", @@ -492,6 +493,11 @@ export function assertValueAppearanceContract(valueHtml, siteCss) { ["background: var(--soft-surface);"], "value finding card rule", ); + const familyDarkRoot = siteCss.match( + /@media \(prefers-color-scheme: dark\) \{\s*\.site-presentation\s*\{([^}]*)\}/, + )?.[1]; + assert.ok(familyDarkRoot, "site CSS should include the scoped website dark appearance root"); + assertIncludes(familyDarkRoot, ["--bg: #0B0D0E;", "--ink: #F7F6F2;", "--soft-surface: #24282b;"], "website CSS dark appearance root"); } function evalRunTitle(run) { @@ -1144,8 +1150,7 @@ export function assertReleaseFooter(html, expectedPackageVersion, label) { [ '