Skip to content

[APO-120] Add visual design memory#9

Merged
hudsonaikins merged 17 commits into
mainfrom
codex/permitgraph-design-memory
Jul 17, 2026
Merged

[APO-120] Add visual design memory#9
hudsonaikins merged 17 commits into
mainfrom
codex/permitgraph-design-memory

Conversation

@hudsonaikins

@hudsonaikins hudsonaikins commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add PermitGraph product design memory and deterministic dashboard capture matrix
  • preserve real policy labels and prove mocked live snapshot rendering
  • capture from a fresh production preview
  • retain hidden visual evidence with artifact URIs matching the uploaded artifact
  • isolate the validator from candidate scanning and pin merged Tabellio c4789837

Validation

  • exact head fc1506d4bb88472bcc13f70ae01c08ea35623029
  • remote CI passed
  • remote PermitGraph suite passed
  • remote exact-head product validation passed
  • local tests: 17/17 passed
  • production dashboard build passed
  • production-preview visual capture matrix: 4/4 passed
  • cost telemetry complete: $0
  • evidence artifact digest: sha256:6e1d2a814e0fd54a74b4461108643dcc3c392291ee9bde4d090c37e1fb60a707
  • current visual baseline approved by product owner on 2026-07-16
  • all actionable review threads resolved

Rollout boundary

Merge authorized. Production deployment remains separately gated.

@makeplane

makeplane Bot commented Jul 17, 2026

Copy link
Copy Markdown

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

@hudsonaikins
hudsonaikins marked this pull request as ready for review July 17, 2026 02:34

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8406b2aa3c

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/product-validation.yml
Comment thread dashboard/playwright.design.config.ts Outdated
Comment thread dashboard/playwright.design.config.ts Outdated
Comment thread .github/workflows/product-validation.yml
Comment thread .github/workflows/product-validation.yml

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a5795bc505

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/product-validation.yml Outdated
Comment thread dashboard/tests/e2e/design-memory.capture.ts

Copy link
Copy Markdown
Collaborator Author

@codex review

Copy link
Copy Markdown
Collaborator Author

@codex review

@hudsonaikins
hudsonaikins marked this pull request as draft July 17, 2026 02:58
@hudsonaikins
hudsonaikins marked this pull request as ready for review July 17, 2026 02:58
@hudsonaikins
hudsonaikins merged commit 4d89b77 into main Jul 17, 2026
3 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fc1506d4bb

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

"sourceCommit": null,
"approvedAt": null,
"approvedBy": null,
"captures": []

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Record the approved visual baseline

On subsequent dashboard changes, this empty, still-proposed manifest provides no approved captures or digests against which to detect a visual regression. The visual profile only checks that four screenshots were produced (.tabellio/validators.json:35-36), so a materially altered UI can pass while merely generating a new candidate; persist the human-approved captures and source commit in this manifest so the design memory is actually durable.

Useful? React with 👍 / 👎.

Comment thread .gitignore
@@ -1,5 +1,6 @@
.DS_Store
.agent-permit/
.artifacts/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Ignore generated validation references

The new product-validation workflow uploads generated evidence from refs/tabellio/validations/, but this ignore change covers only .artifacts/. Consequently, running the required tabellio-validate gate locally leaves the validation references as untracked files, contrary to the new AGENTS.md instruction not to commit generated evidence and making potentially sensitive proof data easy to include with git add -A; ignore the generated refs directory as well.

Useful? React with 👍 / 👎.

Comment on lines +80 to +81
const output = resolve(repoRoot, ".artifacts/tabellio/visual-captures");
mkdirSync(output, { recursive: true });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Clear stale screenshots before each capture run

When design:capture is rerun in a working tree after a surface, viewport, theme, or state ID has been removed or renamed, this only creates the output directory and leaves old PNGs in place. The finalizer then scans the whole directory, so its capture count and baseline candidate can include evidence produced by an earlier commit rather than the current matrix; remove and recreate the capture directory before generating screenshots.

Useful? React with 👍 / 👎.

document.documentElement.classList.add(selectedTheme);
document.documentElement.style.colorScheme = selectedTheme;
}, theme);
await page.addStyleTag({ content: "*,*::before,*::after{animation:none!important;transition:none!important;caret-color:transparent!important}" });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Verify reduced motion before suppressing animations

If a dashboard component ignores prefers-reduced-motion, this injected rule still forcibly disables every animation and transition, so the visual gate passes despite the profile explicitly requiring reduced-motion behavior and forbidding motion without it. Keep deterministic screenshots, but first verify the application itself has suppressed or suitably reduced motion under the emulated media preference rather than masking violations with test CSS.

Useful? React with 👍 / 👎.

Comment on lines +9 to +12
use: {
...baseConfig.use,
screenshot: "off",
trace: "off",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Pin locale and timezone for deterministic captures

When this capture configuration runs on a host with a different locale or timezone, identical commits render different visible dates and times because the dashboard calls toLocaleDateString(undefined) and toLocaleTimeString(undefined) (liveApiProjection.ts:425 and QueueStatusPanels.tsx:315). Since this context does not set locale or timezoneId, baseline candidates can differ solely by runner environment; pin both options in the design configuration.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant