Skip to content

Carry workspace comparisons across releases - #2852

Merged
Chris0Jeky merged 11 commits into
mainfrom
codex/2808-retained-comparisons
Sep 10, 2026
Merged

Carry workspace comparisons across releases#2852
Chris0Jeky merged 11 commits into
mainfrom
codex/2808-retained-comparisons

Conversation

@Chris0Jeky

Copy link
Copy Markdown
Owner

Comparison notes can now be carried into a new session or release through validated version2/3 files. Imports retain build attribution, skip exact duplicates, reject conflicting IDs and validate the whole batch before accepting any observations. The results table groups identical scenario, experience, presentation, theme and build conditions, with explicit completed/blocked counts and optional ratings. Notes remain manually retained files; no server telemetry or automatic assignment is added.

Production builds embed a SHA256 fingerprint of frontend inputs and public build configuration, distinct from the backend version. Development and older exports retain unknown frontend attribution. This identifies build inputs, not signed release artifacts. The four selectable experiences and Grove themes remain available.

Validation:

  • 6,282 frontend tests passed, 3 existing skips (399 files), after integration with mainb6cb08c79.
  • 13 targeted import/store/component tests and one standalone Node fingerprint check passed.
  • Typecheck, production build, scoped lint, doc links and governance passed; the compiled fingerprint was inspected in the built bundle.
  • Chromium: export, reload, import, duplicate skipping, four experiences at1440/768/375px, Grove themes and new tableaxe checks passed against a synthetic database. The mobile screenshot was saved and inspected.
  • Initial Node/Vitest test-discovery failures were corrected by keeping the standalone Node check outside Vitest's filename pattern; the successful full rerun is recorded separately. Backend runtime is unchanged; no new backend full-suite claim is made.

Refs #2808

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-10T00:05:25.240486Z 8f2e868 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Chris0Jeky Chris0Jeky moved this from Pending to Review in Taskdeck Execution Sep 9, 2026

@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: 5a3f339a81

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

const build = typeof trial.build === 'string' && trial.build.trim() ? trial.build.trim().slice(0, 256) : null
trials.value.push({ ...trial, build, ease, note: trial.note.slice(0, 2000), recordedAt: new Date().toISOString() })
if (typeof trial.theme !== 'string' || !trial.theme || trial.theme.length > 64 || typeof trial.note !== 'string') return false
trials.value.push({ ...trial, id: crypto.randomUUID(), frontendBuild: frontendBuildIdentity, build, ease, note: trial.note.slice(0, 2000), recordedAt: new Date().toISOString() })

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 Fall back when randomUUID is unavailable

When Taskdeck is opened through the documented plain-HTTP LAN path, the origin is not a secure context; docs/platform/LAN_DEVICE_ACCESS_GUIDE.md:290-294 already identifies an unguarded crypto.randomUUID() call as a hard failure in that environment. This newly added call therefore throws before the observation is appended, and the submit path has no error state, leaving the user without a saved observation or recovery message. Guard this call with an ID-generation fallback and cover the supported LAN mode.

AGENTS.md reference: frontend/AGENTS.md:L5-L5

Useful? React with 👍 / 👎.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Independent Luna review found one HIGH: clearing observations while a selected file was being read could allow that import to restore the cleared notes. Fixed in 2fb2a4a: Clear changes the store reset version, synchronously cancels the component read generation, and invalidates pending store imports. Both file-read and legacy-hash cancellation regressions pass (15 targeted tests); production build passes. Bounded exact-fix review is CLEAN with no new HIGH/CRITICAL.

Current head ba3c56a also integrates main856172dfa's unrelated Paper Review focus fix. Independent interaction review is clean; seven focus/context tests and sixteen focus/private-source tests passed in the stacked overhaul integrations. New hosted CI must finish before merge. The preceding comparison full frontend run passed 6,282 tests with three existing skips; final Chromium comparison journey and mobile table accessibility check passed before this narrow cancellation fix. No statistical A/B or deployment assertion is made.

@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: ba3c56a3ad

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +87 to +88
const bytes = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(value)))
value.id = `legacy-${Array.from(new Uint8Array(bytes), x => x.toString(16).padStart(2, '0')).join('')}`

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 Avoid Web Crypto for version-2 imports over LAN

On the documented plain-HTTP LAN origin, crypto.subtle is unavailable because SubtleCrypto requires a secure context, so importing any supported version-2 export throws here instead of carrying the observations forward. Beyond the already reported randomUUID() failure, this is a separate new Web Crypto dependency in the legacy-import path; fixing ID generation alone will therefore leave version-2 imports broken in that supported environment.

Useful? React with 👍 / 👎.

const env = loadEnv(mode, process.cwd(), 'VITE_')

return {
define: { __TASKDECK_FRONTEND_BUILD__: JSON.stringify(command === 'build' ? fingerprintFrontend(process.cwd(), mode, env) : null) },

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 Include CLI build options in the frontend fingerprint

The fingerprint only receives mode and loaded VITE_ values, so Vite CLI options that alter the generated frontend are omitted. In particular, .github/workflows/pages-frontend.yml:49 builds with --base /Taskdeck/ while the release workflows use the default base, yet both builds receive the same identity when their source, environment, and Node version match; imported observations can consequently be grouped as the same frontend build even though their generated asset URLs and routing differ. Derive the identity from the resolved build configuration or otherwise include these output-affecting options.

Useful? React with 👍 / 👎.

@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Retained comparison follow-through for #2808, triaged once from automatic review of PR #2852:

  • MEDIUM 3973228410: browser crypto.randomUUID is unavailable on the documented plain-HTTP LAN origin; provide a compatible observation-ID fallback and direct coverage.
  • MEDIUM 3973310044: legacy v2 import hashing needs a secure-context-independent path on that same supported origin. ID fallback alone does not address it.
  • MEDIUM 3973310047: include resolved output-affecting build configuration (including the Pages --base /Taskdeck/ option) in frontend attribution; current fingerprint identifies declared source/config/public inputs, not a signed artifact.

These remain concrete follow-up work under the umbrella. The current PR's independent HIGH clear/import race is fixed and its bounded fix review is clean. No further review-fix cascade is added to that PR; no claim that the whole overhaul is complete.

…omparisons

# Conflicts:
#	docs/IMPLEMENTATION_MASTERPLAN.md

@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: 98302b4bd6

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

const groups = computed(() => {
const result = new Map<string, { key: string; trial: WorkspaceTrial; count: number; completed: number; blocked: number; rated: number; easeTotal: number }>()
for (const trial of trials.value) {
const key = JSON.stringify([trial.scenario, trial.experience, trial.presentation, trial.theme, trial.build, trial.frontendBuild])

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 Separate auto-theme trials by resolved appearance

When the user records multiple trials with the auto theme while the OS color scheme changes, every observation retains theme === 'auto', so this key merges light and night trials into one aggregate even though paperThemeStore.ts:65-66 renders them differently. This makes the newly added completion and ease statistics combine non-comparable visual conditions; record the resolved appearance with each trial or otherwise include it in the grouping identity.

Useful? React with 👍 / 👎.

@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: d66d98427f

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

else throw new Error(`Unsupported frontend input: ${name}`)
}
}
for (const folder of ['src', 'public', 'build']) directory(folder)

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 Exclude non-production files from the build identity

Restrict the fingerprint to output-affecting frontend inputs. Recursing over all of src and build also hashes src/tests/** and build/frontendIdentity.node-check.mjs, neither of which is included in the production bundle. A rebuild after a test-only change therefore receives a new frontendBuild, and workspaceExperimentStore.ts:108 separates its observations into a different group even though users are running the same frontend behavior.

Useful? React with 👍 / 👎.

@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: feaf5a0800

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +179 to +180
Comparison exports now use version3 with stable observation IDs and frontend input fingerprints.
The comparison page imports version2/3 files locally, validates the full batch before accepting it,

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 Update the canonical comparison map to version 3

This changes the documented contract to version-3 files with import support, but docs/product/WORKSPACE_OVERHAUL.md:59 still describes the comparison as session-only and version 2, while its walkthrough at line 85 only tells users to export before reloading. That file presents itself as the complete resource/feature map, so leaving it unchanged gives contributors and users contradictory guidance about the supported format and recovery flow; update the map and walkthrough alongside this new claim.

Useful? React with 👍 / 👎.

…omparisons

# Conflicts:
#	docs/STATUS.md
#	docs/product/WORKSPACE_OVERHAUL_VALIDATION.md
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Latest automatic comparison comments are triaged once as MEDIUM follow-through under #2808. The UUID/SubtleCrypto LAN compatibility and resolved Vite configuration findings are implemented in child PR #2856. Remaining comparison improvements are to retain resolved light/night appearance when the selected theme is Auto, exclude test-only inputs from the production build fingerprint, and align the canonical feature-map/export walkthrough with version3 import behavior. These affect descriptive grouping precision/documentation, not account privacy or stored observation retention; no randomized/statistical A/B claim is made. They remain in the comparison continuation queue, without a fix cascade on the already reviewed parent.

@Chris0Jeky
Chris0Jeky merged commit a85b1c1 into main Sep 10, 2026
35 checks passed
@github-project-automation github-project-automation Bot moved this from Review to Done in Taskdeck Execution Sep 10, 2026
@Chris0Jeky
Chris0Jeky deleted the codex/2808-retained-comparisons branch September 10, 2026 07:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant