Repository navigation
feat(platform): expand SEIS Agency Kit and Apple readiness foundation - #125
emirhankudun-ux wants to merge 78 commits into
Conversation
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
Important Review skippedToo many files! This PR contains 356 files, which is 206 over the limit of 150. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (356)
You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughAdds a browser-local "Agency Kit" creative production workflow to the SEIS Design product page (data model, rendering, field collection, markdown pack generation, IndexedDB export to SEIS Code), backed by content JSON, CSS, documentation, backlog/status updates, and two new validation/smoke-test scripts. ChangesSEIS Design Agency Kit Feature
Repository Status and Backlog Governance Updates
Estimated code review effort: 4 (Complex) | ~75 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant ProductPage as SEIS Design Page
participant LocalStorage
participant IndexedDB as SEIS Code Workspace (IndexedDB)
participant BroadcastChannel
User->>ProductPage: Edit agency kit fields
User->>ProductPage: Click "Build agency pack"
ProductPage->>ProductPage: collectAgencyBriefFields()
ProductPage->>ProductPage: calculateAgencyDefense()
ProductPage->>ProductPage: formatAgencyPack()
ProductPage-->>User: Render markdown pack preview
User->>ProductPage: Click "Copy" or "Export"
alt Copy
ProductPage->>LocalStorage: Save pack (fallback if clipboard unavailable)
else Export to SEIS Code
ProductPage->>ProductPage: createAgencyHandoffManifest()
ProductPage->>IndexedDB: openCodeWorkspaceDatabase()
ProductPage->>IndexedDB: putCodeWorkspaceEntry(handoff path)
ProductPage->>BroadcastChannel: workspace-file-created event
end
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b2be2bddd8
ℹ️ 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".
| "npm run check:seis-design-agency-kit", | ||
| "npm run check:seis-design-agency-kit-browser-smoke" |
There was a problem hiding this comment.
Register the advertised npm checks
These newly declared validation commands are not present in package.json, so following the Agency Kit's own validationCommands fails with missing npm scripts before the new checker or browser smoke can run. This also makes scripts/check-seis-design-agency-kit.mjs reject every deliverable that references these commands, so add the scripts (or change the declarations to existing commands) before publishing this validation surface.
Useful? React with 👍 / 👎.
| "output": "A compact handoff with source paths, validation commands, accessibility notes, and next actions.", | ||
| "evidence": [ | ||
| "docs/design-system/seis-design-agency-kit.md", | ||
| "docs/PUBLIC_READINESS.md" |
There was a problem hiding this comment.
Point handoff evidence at an existing document
The repository does not contain docs/PUBLIC_READINESS.md, but the new checker calls ensureRelativeExistingPath for workflow evidence paths. As soon as the Agency Kit check is run, this handoff workflow fails on the missing evidence file, so either create the document or point this entry at the existing public-readiness evidence path.
Useful? React with 👍 / 👎.
| await waitFor(client, "Boolean(window.__SEIS_CODE__)", 18000); | ||
| await waitFor(client, `window.__SEIS_CODE__.filePaths().includes(${JSON.stringify(HANDOFF_PATH)})`, 8000); | ||
|
|
||
| await clickSelector(client, "[data-view-button=\"design\"]"); |
There was a problem hiding this comment.
Align the smoke with implemented SEIS Code controls
The cross-route smoke now clicks a SEIS Code Design Handoff activity, but apps/web/seis-code.* has no [data-view-button="design"] control or the later open-design-handoff / create-design-review-note actions. After exporting the pack and opening SEIS Code, this selector wait will time out, so the smoke cannot pass until that review surface is implemented or the test is reduced to the existing explorer/editor flow.
Useful? React with 👍 / 👎.
| <button type="button" data-export-agency-pack>Export to SEIS Code</button> | ||
| <button type="button" data-copy-agency-pack>Copy pack</button> | ||
| </div> | ||
| <pre data-agency-pack-output aria-live="polite">Press Build agency pack to create a local Markdown brief.</pre> |
There was a problem hiding this comment.
Wrap the generated pack preview
After Build/Export, this <pre> receives a very long Markdown pack, and product-page.css has no rule that constrains or wraps data-agency-pack-output. Because <pre> defaults to preserving long lines, the SEIS Design page will horizontally overflow on narrow viewports instead of satisfying the added mobile overflow smoke; add wrapping/max-width/overflow styling for this preview.
Useful? React with 👍 / 👎.
| return localStorage.getItem(storageKey) || | ||
| formatAgencyPack(title, agencyKit, collectAgencyBriefFields(agencyKit)); |
There was a problem hiding this comment.
Stop exporting stale saved packs
When a user has an older pack in localStorage, edits the brief fields, and then clicks Copy or Export without pressing Build first, this branch returns the saved pack instead of formatting the current field values. That can hand off a previous client's/audience's content even though the visible form has been updated, so prefer the current editable fields whenever the preview still contains the placeholder.
Useful? React with 👍 / 👎.
| try { | ||
| await putCodeWorkspaceEntry(database, createCodeWorkspaceEntry("/workspace", "", "folder")); | ||
| await putCodeWorkspaceEntry(database, createCodeWorkspaceEntry(dirname(filePath), "", "folder")); | ||
| await putCodeWorkspaceEntry(database, createCodeWorkspaceEntry(filePath, content, "file")); |
There was a problem hiding this comment.
Avoid overwriting existing handoff files
If /workspace/Design/seis-design-agency-pack.md already exists in the SEIS Code IndexedDB workspace, Export to SEIS Code always writes a fresh entry with put, replacing any edits or review notes a user made to that virtual file. Because this fixed path is reused on every export, add a conflict check, versioned path, or explicit overwrite confirmation before replacing existing workspace content.
Useful? React with 👍 / 👎.
| this.nextId = 1; | ||
| this.pending = new Map(); | ||
| this.events = []; | ||
| this.ws = new WebSocket(wsUrl); |
There was a problem hiding this comment.
Use a Node 20-compatible CDP transport
The repository workflow currently runs scripts under Node 20, but this new browser smoke constructs the global WebSocket client directly; Node 20 runners do not provide that global by default, so the smoke will fail before any browser assertions in that environment once it is exposed through npm/CI. Use a compatible WebSocket client or update the runner requirement alongside the new script.
Useful? React with 👍 / 👎.
| <button type="button" data-export-agency-pack>Export to SEIS Code</button> | ||
| <button type="button" data-copy-agency-pack>Copy pack</button> | ||
| </div> | ||
| <pre data-agency-pack-output aria-live="polite">Press Build agency pack to create a local Markdown brief.</pre> |
There was a problem hiding this comment.
Keep the full pack out of the live region
For screen-reader users, clicking Build replaces this aria-live="polite" region with the entire generated Markdown pack, so assistive tech can start announcing a very large client handoff instead of just the completion status. Keep the preview static and announce only the short status message in a dedicated live region.
Useful? React with 👍 / 👎.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 440b04d80c
ℹ️ 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".
| ensure(websiteRuntimeText.includes(kit.browserWorkflow?.storageKey), "website runtime must use the declared agency storage key"); | ||
| ensure(websiteRuntimeText.includes(kit.browserWorkflow?.handoffStorageKey), "website runtime must use the declared handoff storage key"); | ||
| ensure(websiteRuntimeText.includes(kit.browserWorkflow?.handoffPath), "website runtime must use the declared SEIS Code handoff path"); | ||
| ensure(websiteCssText.includes(".agency-kit-section"), "website CSS must style agency kit section"); |
There was a problem hiding this comment.
Add the agency kit CSS that the checker now requires
When I run the new checker against this commit, it reports the agency-kit CSS assertions here as failures because apps/web/website/product-page.css was not updated and contains none of the required selectors such as .agency-kit-section, .agency-workflow-column, .agency-field-grid, or [data-agency-pack-output]. As a result node scripts/check-seis-design-agency-kit.mjs cannot pass even after the npm scripts are registered, so add the corresponding styles or remove these assertions.
Useful? React with 👍 / 👎.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 60e0a3ae9c
ℹ️ 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".
| | `npm run check:video-hero-performance-budget` | Passed | Validates remote video provenance, no committed video binaries, metadata-first loading, intent-based next-video preload, reduced-motion fallback, and minimum accessibility/loading markers. | | ||
| | `npm run check:mythic-gacha` | Passed | Validates the Mythic Gacha route, 60 creature markers, IndexedDB persistence hooks, draw controls, interaction-safety markers, filters, pity marker, local atlas, SEIS Code export bridge, and route/cache/sitemap bindings. | | ||
| | `npm run check:design-component-inventory` | Passed | Validates 12 component records, source files, selector evidence, accessibility notes, motion policies, and validation commands. | | ||
| | `npm run check:seis-design-agency-kit` | Passed | Validates the no-key agency kit JSON, required non-claims, workflow steps, deliverables including client discovery intake, brand and offer naming, brand strategy workshop, landing page blueprint, agency cost control, design sprint timeline, proposal scope, agency quote comparison, competitive positioning matrix, brand voice messaging matrix, typography hierarchy matrix, color system accessibility matrix, print production readiness matrix, brand rationale deck, visual reference moodboard, creative asset shot list matrix, logo concept evaluation matrix, brand usage guideline, creative director QA, revision round, client feedback triage board, case study layout board, visual QA evidence, production manifest, asset size specs, client approval packet, client-ready export index, brand audit, launch asset, social content calendar, social variant, and presentation workboards, editable browser-local Design page fields, SEIS Code handoff export markers, SEIS Code review surface markers, evidence paths, validation commands, security boundary, and documentation phrases. | |
There was a problem hiding this comment.
Mark the agency-kit check as failing
In this commit, node scripts/check-seis-design-agency-kit.mjs exits 1 (for example it reports the missing docs/PUBLIC_READINESS.md, missing package scripts, missing agency-kit CSS, and absent SEIS Code Design Handoff markers), so recording npm run check:seis-design-agency-kit as Passed makes the status evidence incorrect and can mislead release/public-readiness triage. Please mark this row blocked/failed unless the checker actually passes in the same change.
Useful? React with 👍 / 👎.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 70582474d2
ℹ️ 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".
| "apps/web/case-studies/case-study.css" | ||
| ], | ||
| "validationCommands": [ | ||
| "npm run check:seo" |
There was a problem hiding this comment.
Register the SEO validation command
When the new Agency Kit checker runs, commandExists validates every deliverable validationCommands entry against package.json; this new case-study deliverable declares npm run check:seo, but package.json has no check:seo script. After the already-flagged Agency Kit scripts are added, node scripts/check-seis-design-agency-kit.mjs still exits 1 on this deliverable, so point it at an existing command or add the npm script.
Useful? React with 👍 / 👎.
| | `npm run check:branch-policy-reconciliation` | Passed | Validates the active `main` branch policy surfaces and classifies UIXAppTTR-era branch records as legacy/archive material. | | ||
| | `npm run check:master-backlog` | Passed | Validates unique backlog IDs across the summary and detailed next-work tables, table shape, and SEIS-BL-037 PR queue coverage. | | ||
| | `npm run check:release-artifact-policy` | Passed | Validates retained release zip/manifest pairs, `releases/latest.json`, checksum alignment, and approval-gated migration policy. | |
There was a problem hiding this comment.
Remove passed rows for undefined checks
These newly added validation rows cannot have passed in this tree: package.json defines none of check:branch-policy-reconciliation, check:master-backlog, or check:release-artifact-policy, and npm run check:branch-policy-reconciliation exits with a missing-script error. Keeping them marked Passed makes release/public-readiness evidence point at commands reviewers cannot run, so either add the scripts or mark these rows pending/blocked.
Useful? React with 👍 / 👎.
| | `npm run check:motion-evidence` | Passed | Existing motion evidence check passed. | | ||
| | `npm run check:mobile-ergonomics` | Passed | Existing mobile ergonomics check passed. | | ||
| | `npm run audit:ai-providers` | Passed | Redacted static provider/credential audit generated Markdown and JSON without live provider calls. | | ||
| | `npm run check:git-secret-history` | Passed | Local redacted Git history scan inspected reachable text-like tracked blobs without printing values. | |
There was a problem hiding this comment.
Stop marking the missing secret-history check passed
This new evidence row says npm run check:git-secret-history passed, but package.json does not define that script, so the command fails before doing any scan. Because the same status page now relies on that scan for public-readiness evidence, this should be changed to a real validation command or marked blocked/pending until it can actually run.
Useful? React with 👍 / 👎.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4637d99839
ℹ️ 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".
| | Public readiness | Not ready | Worktree is dirty, local redacted Git history scan passes, pre-production noindex/SEO metadata policy is validator-backed, and external secret scanner/provider-log review plus browser QA are incomplete. | Resolve blockers before public preparation. | | ||
| | Release readiness | Not ready | Static build passed, but no release dry-run, tag, deployment, or rollback drill was performed. | Defer release work until review. | | ||
| | GitHub Actions | Needs alignment | `.github/workflows/foundation-check.yml` references `npm run check:js` and `npm run package:server`, which are not declared in `package.json`. | Align CI scripts in a dedicated CI PR without weakening checks. | | ||
| | GitHub Actions | Locally aligned, remote-unverified | `.github/workflows/foundation-check.yml` uses declared local scripts including canonical-source `npm run check:js`; `package:server` remains obsolete and is not used by the workflow. | Verify remote Actions state before public readiness claims. | |
There was a problem hiding this comment.
Correct the CI alignment evidence
This status row now claims .github/workflows/foundation-check.yml uses a declared npm run check:js, but the workflow's lightweight-checks block does not run check:js, and package.json does not define that script (npm run check:js exits with a missing-script error). For public-readiness or CI triage, this records local Actions alignment that is not actually present and hides the still-missing JS validation command.
Useful? React with 👍 / 👎.
| | `npm run check:design-component-inventory` | Passed | Validates 12 component records, source files, selector evidence, accessibility notes, motion policies, and validation commands. | | ||
| | `npm run check:seis-design-agency-kit` | Passed | Validates the no-key agency kit JSON, required non-claims, workflow steps, deliverables including client discovery intake, brand and offer naming, brand strategy workshop, landing page blueprint, agency cost control, agency cost defense, design sprint timeline, proposal scope, agency quote comparison, competitive positioning matrix, brand voice messaging matrix, typography hierarchy matrix, color system accessibility matrix, print production readiness matrix, brand rationale deck, visual reference moodboard, creative asset shot list matrix, logo concept evaluation matrix, brand usage guideline, creative director QA, design review decision, approval state transition, revision round, client feedback triage board, case study layout board, visual QA evidence, production manifest, asset size specs, client approval packet, client-ready export index, brand audit, launch asset, social content calendar, social variant, and presentation workboards, editable browser-local Design page fields, SEIS Code handoff export markers, SEIS Code review surface markers, evidence paths, validation commands, security boundary, and documentation phrases. | | ||
| | `npm run check:seis-design-agency-kit-browser-smoke` | Blocked in this local environment | Script exists, but this run found no Chrome/Chromium executable. Set `CHROME_PATH` to run the SEIS Design page smoke for local pack generation, localStorage persistence, SEIS Code IndexedDB handoff export, cross-route SEIS Code review note creation, copy status, screenshots, and no horizontal overflow. | | ||
| | `swift test --package-path packages/seis_platform_swift` | Passed | Compiles the Apple SwiftPM package and native shell target, including the plan-only AI scale roadmap surface, and runs 48 Swift Testing checks plus the XCTest smoke test without live provider, SSH, deployment, or credential claims. | |
There was a problem hiding this comment.
Scope the Swift test evidence to platforms where it passes
On the Linux Swift toolchain used here, this exact command fails before running tests because packages/seis_platform_swift/Sources/SeisPlatformKit/SeisAppleShellTelemetry.swift:2 imports OSLog (no such module 'OSLog'). Recording it as unqualified Passed can mislead validation triage unless the evidence is marked macOS-only or the package is made portable for the documented command.
Useful? React with 👍 / 👎.
| const pack = currentAgencyPack(pageData.title, pageData.agencyKit, agencyOutput, agencyStorageKey); | ||
| const manifest = createAgencyHandoffManifest(pageData.title, pageData.agencyKit, pack); | ||
| agencyOutput.textContent = pack; | ||
| localStorage.setItem(agencyStorageKey, pack); |
There was a problem hiding this comment.
Let IndexedDB export run without localStorage
When browser storage is restricted or the quota is exhausted, localStorage.setItem can throw here before the try that writes the pack into the SEIS Code IndexedDB workspace. In that environment Export to SEIS Code aborts without attempting the /workspace/Design/seis-design-agency-pack.md handoff even though IndexedDB may still be available, so guard these localStorage updates separately from the workspace write.
Useful? React with 👍 / 👎.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a768f2dcb0
ℹ️ 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".
| | `npm run check:seis-fullstack-no-server-fallback-smoke` | Passed | Starts a static-only local server that returns 404 for `/_server/*`, opens Chrome through DevTools, verifies Linux Replica boot/login/launcher targets/67 functional apps/terminal, Desktop boot/50+ apps/12+ commands, Website hub rendering, no horizontal overflow, no forbidden `/_server/*` requests, and no relevant browser errors. | | ||
| | `npm run check:seis-ultimate-demo` | Passed | Verifies V17 demo coverage across Desktop OS, AI Core, Search, Code IDE, Design Studio, Cloud, Store, Music, Launchpad, Files, Terminal/SSH Center, Website, Agents, Plugin System, Command Center, eight SEIS Search tabs, nine website pages, mock/real/planned labels, Local Demo/no-key boundaries, service-worker website precache, docs coverage, responsive CSS, reduced-motion support, and safe diagnostics. | | ||
| | `npm run check:seis-code` | Passed | Validates SEIS Code route, runtime script, Monaco hook, 8 top menus, 5 activity views, bottom panels, IndexedDB, 25 language modes, terminal commands, Local Demo REPL slash commands, workspace path-boundary marker, route/cache/sitemap bindings. | | ||
| | `npm run check:seis-code` | Passed | Validates SEIS Code route, runtime script, Monaco hook, 8 top menus, 6 activity views including Design Handoff, bottom panels, IndexedDB, 25 language modes, terminal commands, Local Demo REPL slash commands, Design Agency Kit pack opening, browser-local review note creation, workspace path-boundary marker, route/cache/sitemap bindings. | |
There was a problem hiding this comment.
Align SEIS Code evidence with the actual check
Fresh evidence: scripts/check-seis-code.mjs still validates the existing five required activity views, and the current SEIS Code HTML exposes only explorer/search/source/run/extensions buttons, while npm run -s check:seis-code passes without any Design Handoff controls. When release or public-readiness triage relies on this status row, it records Design Handoff opening and review-note creation as covered by a command that does not actually check those paths, so either keep the row scoped to the existing five-view validation or add the SEIS Code surface plus validator coverage.
Useful? React with 👍 / 👎.
| .filter((event) => { | ||
| if (event.method === "Log.entryAdded") return event.params?.entry?.level === "error"; | ||
| if (event.method === "Network.loadingFailed") return !String(event.params?.errorText || "").includes("net::ERR_ABORTED"); | ||
| return false; |
There was a problem hiding this comment.
Classify browser smoke issues consistently
When the cross-route smoke opens SEIS Code in an offline or CDN-blocked runner, the Monaco loader can emit a Network.loadingFailed even though setupMonaco intentionally falls back to the local editor; this collector treats that expected fallback as fatal while also dropping Runtime.exceptionThrown events entirely. That can both fail valid no-key/offline runs and miss real JS crashes, so mirror the existing product smoke's Monaco allowlist and include runtime exceptions before relying on this check.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/web/website/product-page.css (1)
567-597: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd reduced-motion and print coverage for the new responsive agency layout.
This breakpoint now controls
.agency-kit-shell,.agency-output-list, and.agency-builder, but the CSS change does not add the required reduced-motion/print media coverage. Add companion rules for low-motion and print behavior so this passes the CSS media-query audit. As per coding guidelines, “All CSS media queries must include prefers-reduced-motion and print query conditions.”🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/website/product-page.css` around lines 567 - 597, The responsive breakpoint in product-page.css adds layout changes for .agency-kit-shell, .agency-output-list, and .agency-builder, but it is missing the required companion media coverage. Update the same responsive ruleset to include prefers-reduced-motion and print handling alongside the existing max-width behavior, ensuring the agency layout still works without motion and prints cleanly. Use the existing `@media` block for .site-header, .agency-kit-shell, .agency-output-list, and .agency-builder as the anchor when adding the additional media-query conditions.Source: Coding guidelines
🧹 Nitpick comments (1)
scripts/check-seis-design-agency-kit.mjs (1)
440-544: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winConsolidate the repeated single-item
notClaimsassertions.Roughly 20 separate
ensureIncludesAll(kit.browserWorkflow?.notClaims, [...], "browserWorkflow.notClaims")calls each check one or a few claims that could all live in the single combined array already used at lines 440-444, cutting this block from ~100 lines to a handful.♻️ Proposed consolidation
ensureIncludesAll( kit.browserWorkflow?.notClaims, - ["not automatic publication", "not client approval", "not binding quote", "not endless revision loop", "not live provider generation", "not guaranteed cost saving", "not fabricated evidence", "not a persuasion guarantee", "not downloadable archive"], + [ + "not automatic publication", "not client approval", "not binding quote", "not endless revision loop", + "not live provider generation", "not guaranteed cost saving", "not fabricated evidence", "not a persuasion guarantee", + "not downloadable archive", "not market research", "not a business strategy guarantee", "not a conversion guarantee", + "not procurement advice", "not financial advice", "not a delivery date guarantee", "not a client contract", + "not a brand name clearance", "not creative director approval", "not automatic signoff", "not legal copy approval", + "not social media scheduling", "not model release approval", "not a font license", "not accessibility certification", + "not print proof approval", "not trademark license", "not stakeholder consensus guarantee", "not verified customer case study", + "not licensed asset approval", "not final logo approval", "not host filesystem write", "not Git commit", "not deployment", + ], "browserWorkflow.notClaims", ); - ensureIncludesAll(kit.browserWorkflow?.notClaims, ["not market research"], "browserWorkflow.notClaims"); - ... (remove the rest of the single-item calls)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/check-seis-design-agency-kit.mjs` around lines 440 - 544, The browserWorkflow.notClaims checks are split into many repeated ensureIncludesAll calls that each assert one or a few items; consolidate them into the existing combined array check in the same validation block. Update the logic around ensureIncludesAll in check-seis-design-agency-kit.mjs so all notClaims strings are validated in one place, keeping the browserWorkflow.notClaims symbol as the target.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/website/product-page.js`:
- Around line 646-654: The catch block in the handoff save flow uses an unused
`_error` binding, which trips the lint rule. Update the try/catch around
saveAgencyPackToCodeWorkspace in product-page.js to use an optional catch
binding, matching the other catch blocks in this function, and keep the existing
fallback localStorage and setStatus behavior unchanged.
In `@content/development/seis-design-agency-kit.json`:
- Around line 50-390: Update the stale references in the `workflow` entries of
`seis-design-agency-kit` by removing or replacing the missing
`docs/PUBLIC_READINESS.md` evidence and any script mentions that are not defined
in `package.json`. Keep the `handoff`, `export-index`, and related items aligned
with existing docs/scripts already used elsewhere in the JSON so validation no
longer points to nonexistent assets or commands.
In `@docs/roadmap/NEXT_PR_QUEUE.md`:
- Line 15: Row 5 references a validation command that does not exist, so update
the roadmap entry to match the actual available scripts. In the NEXT_PR_QUEUE
entry, either add a matching check:seis-public-readiness script to the relevant
package.json and ensure it is wired to a real validator, or remove that command
from the validation list if no such script is intended. Keep the rest of the row
intact and make sure the command names in the checklist match what npm can
actually run.
In `@scripts/check-seis-design-agency-kit-browser-smoke.mjs`:
- Around line 229-238: The WebSocket response handler in the CDP client leaves
the per-request timeout active after a response is received, so successful
`send()` calls still keep the process alive. Update the message handling logic
around `this.ws.addEventListener("message", ...)` and the pending request
bookkeeping in `send()` to store each timeout handle alongside
`resolvePending`/`rejectPending`, then `clearTimeout()` it before calling either
resolver or rejector. Make sure this cleanup happens for both success and error
paths using the existing `pending` map and request `id` flow.
- Around line 157-166: The path containment check in the static server is too
loose because `startsWith(WEB_ROOT)` can match sibling prefixes after
normalization. Update the `request` handling logic in
`check-seis-design-agency-kit-browser-smoke.mjs` to resolve both the computed
`filePath` and `WEB_ROOT`, then only allow the request when the resolved path is
exactly the root or begins with the root plus a path separator. Keep the check
near the `decodeURIComponent`, `normalize`, and `join` flow so the security gate
in the server response path remains in `requestUrl`/`filePath` handling.
- Line 220: The smoke script’s WebSocket connection setup relies on the
experimental global WebSocket, which can fail under the Node 20 runtime used by
CI. Update the smoke runtime so WebSocket support is available before `new
WebSocket(wsUrl)` runs, either by enabling the Node experimental WebSocket flag
in the CI command or by switching `this.ws` in the smoke script to a dedicated
WebSocket client dependency.
In `@scripts/check-seis-design-agency-kit.mjs`:
- Around line 336-352: The sensitive-pattern sweep in
check-seis-design-agency-kit.mjs reads several files but does not scan them,
leaving gaps in the coverage. Update the scan block that currently calls
scanSensitiveText for kitText, docText, designPageText, and websiteRuntimeText
so it also includes websiteCssText, browserSmokeText, seisCodeHtmlText,
seisCodeRuntimeText, and seisCodeCssText using their existing
path.relative(ROOT, ...) identifiers.
---
Outside diff comments:
In `@apps/web/website/product-page.css`:
- Around line 567-597: The responsive breakpoint in product-page.css adds layout
changes for .agency-kit-shell, .agency-output-list, and .agency-builder, but it
is missing the required companion media coverage. Update the same responsive
ruleset to include prefers-reduced-motion and print handling alongside the
existing max-width behavior, ensuring the agency layout still works without
motion and prints cleanly. Use the existing `@media` block for .site-header,
.agency-kit-shell, .agency-output-list, and .agency-builder as the anchor when
adding the additional media-query conditions.
---
Nitpick comments:
In `@scripts/check-seis-design-agency-kit.mjs`:
- Around line 440-544: The browserWorkflow.notClaims checks are split into many
repeated ensureIncludesAll calls that each assert one or a few items;
consolidate them into the existing combined array check in the same validation
block. Update the logic around ensureIncludesAll in
check-seis-design-agency-kit.mjs so all notClaims strings are validated in one
place, keeping the browserWorkflow.notClaims symbol as the target.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: da0f978e-2fd0-4ffe-8901-a1f741152614
📒 Files selected for processing (10)
apps/web/website/product-page.cssapps/web/website/product-page.jscontent/development/seis-design-agency-kit.jsondocs/STATUS.mddocs/design-system/seis-design-agency-kit.mddocs/design-system/seis-design-foundation.mddocs/roadmap/MASTER_BACKLOG.mddocs/roadmap/NEXT_PR_QUEUE.mdscripts/check-seis-design-agency-kit-browser-smoke.mjsscripts/check-seis-design-agency-kit.mjs
| try { | ||
| await saveAgencyPackToCodeWorkspace(manifest.path, pack); | ||
| localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "indexeddb" }, null, 2)); | ||
| setStatus(status, "SEIS Code handoff saved locally."); | ||
| } catch (_error) { | ||
| localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "unavailable" }, null, 2)); | ||
| setStatus(status, "Handoff manifest saved locally; SEIS Code workspace unavailable."); | ||
| } | ||
| }); |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Unused catch binding fails lint (CI blocker). ESLint flags _error as no-unused-vars at Line 650, which will fail the pipeline. The other catch blocks in this function (Lines 605, 632) already use the optional catch binding; match that here.
🔧 Proposed fix
- } catch (_error) {
+ } catch {
localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "unavailable" }, null, 2));
setStatus(status, "Handoff manifest saved locally; SEIS Code workspace unavailable.");
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| try { | |
| await saveAgencyPackToCodeWorkspace(manifest.path, pack); | |
| localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "indexeddb" }, null, 2)); | |
| setStatus(status, "SEIS Code handoff saved locally."); | |
| } catch (_error) { | |
| localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "unavailable" }, null, 2)); | |
| setStatus(status, "Handoff manifest saved locally; SEIS Code workspace unavailable."); | |
| } | |
| }); | |
| try { | |
| await saveAgencyPackToCodeWorkspace(manifest.path, pack); | |
| localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "indexeddb" }, null, 2)); | |
| setStatus(status, "SEIS Code handoff saved locally."); | |
| } catch { | |
| localStorage.setItem(agencyHandoffKey, JSON.stringify({ ...manifest, workspaceWrite: "unavailable" }, null, 2)); | |
| setStatus(status, "Handoff manifest saved locally; SEIS Code workspace unavailable."); | |
| } | |
| }); |
🧰 Tools
🪛 ast-grep (0.44.0)
[warning] 648-648: Avoid using the initial state variable in setState
Context: setStatus(status, "SEIS Code handoff saved locally.")
Note: [CWE-710] Improper Adherence to Coding Standards. Security best practice.
(setstate-same-var)
[warning] 651-651: Avoid using the initial state variable in setState
Context: setStatus(status, "Handoff manifest saved locally; SEIS Code workspace unavailable.")
Note: [CWE-710] Improper Adherence to Coding Standards. Security best practice.
(setstate-same-var)
🪛 ESLint
[error] 650-650: '_error' is defined but never used.
(@typescript-eslint/no-unused-vars)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/website/product-page.js` around lines 646 - 654, The catch block in
the handoff save flow uses an unused `_error` binding, which trips the lint
rule. Update the try/catch around saveAgencyPackToCodeWorkspace in
product-page.js to use an optional catch binding, matching the other catch
blocks in this function, and keep the existing fallback localStorage and
setStatus behavior unchanged.
Source: Linters/SAST tools
| const requestUrl = new URL(request.url || "/", `http://${HOST}`); | ||
| const decodedPath = decodeURIComponent(requestUrl.pathname); | ||
| const relativePath = decodedPath === "/" ? "/index.html" : decodedPath; | ||
| const filePath = normalize(join(WEB_ROOT, relativePath)); | ||
|
|
||
| if (!filePath.startsWith(WEB_ROOT)) { | ||
| response.writeHead(403); | ||
| response.end("Forbidden"); | ||
| return; | ||
| } |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Harden the static-server path containment check.
startsWith(WEB_ROOT) accepts sibling prefixes such as apps/web-fixture after .. normalization. Resolve both paths and require either the root itself or a path under WEB_ROOT + sep.
Proposed fix
-import { join, normalize, resolve } from "node:path";
+import { join, resolve, sep } from "node:path";
...
- const filePath = normalize(join(WEB_ROOT, relativePath));
+ const filePath = resolve(WEB_ROOT, relativePath.replace(/^\/+/, ""));
- if (!filePath.startsWith(WEB_ROOT)) {
+ if (filePath !== WEB_ROOT && !filePath.startsWith(`${WEB_ROOT}${sep}`)) {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const requestUrl = new URL(request.url || "/", `http://${HOST}`); | |
| const decodedPath = decodeURIComponent(requestUrl.pathname); | |
| const relativePath = decodedPath === "/" ? "/index.html" : decodedPath; | |
| const filePath = normalize(join(WEB_ROOT, relativePath)); | |
| if (!filePath.startsWith(WEB_ROOT)) { | |
| response.writeHead(403); | |
| response.end("Forbidden"); | |
| return; | |
| } | |
| const requestUrl = new URL(request.url || "/", `http://${HOST}`); | |
| const decodedPath = decodeURIComponent(requestUrl.pathname); | |
| const relativePath = decodedPath === "/" ? "/index.html" : decodedPath; | |
| const filePath = resolve(WEB_ROOT, relativePath.replace(/^\/+/, "")); | |
| if (filePath !== WEB_ROOT && !filePath.startsWith(`${WEB_ROOT}${sep}`)) { | |
| response.writeHead(403); | |
| response.end("Forbidden"); | |
| return; | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/check-seis-design-agency-kit-browser-smoke.mjs` around lines 157 -
166, The path containment check in the static server is too loose because
`startsWith(WEB_ROOT)` can match sibling prefixes after normalization. Update
the `request` handling logic in `check-seis-design-agency-kit-browser-smoke.mjs`
to resolve both the computed `filePath` and `WEB_ROOT`, then only allow the
request when the resolved path is exactly the root or begins with the root plus
a path separator. Keep the check near the `decodeURIComponent`, `normalize`, and
`join` flow so the security gate in the server response path remains in
`requestUrl`/`filePath` handling.
| this.nextId = 1; | ||
| this.pending = new Map(); | ||
| this.events = []; | ||
| this.ws = new WebSocket(wsUrl); |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify declared Node versions and CI images before relying on global WebSocket.
fd -i '^(package\.json|\.nvmrc|\.node-version|Dockerfile|.*\.ya?ml)$' . \
| xargs -r rg -n 'engines|node-version|node:|CHROME_PATH|WebSocket'Repository: emirhankudun-ux/SEIS
Length of output: 262
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '== Node/runtime declarations =='
fd -i '^(package\.json|\.nvmrc|\.node-version|Dockerfile|.*\.ya?ml)$' . | sort
echo
echo '== package.json engines / package manager =='
for f in $(git ls-files '**/package.json'); do
echo "--- $f"
rg -n '"engines"|"node"|packageManager' "$f" || true
done
echo
echo '== CI / workflow references to Node / Docker image =='
for f in $(git ls-files '.github/**/*.yml' '.github/**/*.yaml' 'server/docker/Dockerfile' 'SEIST/server/docker/Dockerfile'); do
echo "--- $f"
rg -n 'node:|actions/setup-node|node-version|WebSocket|CHROME_PATH' "$f" || true
done
echo
echo '== smoke script context =='
sed -n '180,245p' scripts/check-seis-design-agency-kit-browser-smoke.mjsRepository: emirhankudun-ux/SEIS
Length of output: 18381
🌐 Web query:
Node.js 20 global WebSocket availability and version introduced
💡 Result:
In Node.js 20, the WebSocket API is available as a global, but it remains experimental and requires the --experimental-websocket CLI flag to be enabled [1][2][3]. It was introduced in Node.js version 20.10.0 [1][4]. Key details regarding WebSocket support in Node.js 20: - Global Availability: The WebSocket class is available globally when enabled [1][5]. It is a browser-compatible implementation based on the WHATWG specification [4][6]. - Experimental Status: Throughout the Node.js 20 release line, the API has maintained its experimental (Stability 1) status [1][2]. - Flag Requirement: You must start your Node.js application with the --experimental-websocket flag to access the global WebSocket object [1][3]. - Client Only: The native implementation provided by Node.js is a client-side WebSocket implementation [7]. It does not include a native WebSocket server; for server-side functionality, developers typically use third-party libraries like 'ws' [7][8]. While later versions of Node.js (such as v21.0.0 and beyond) eventually made the API available by default without the experimental flag [4][9], the Node.js 20 LTS branch continues to require the flag to use this feature [1][2][3].
Citations:
- 1: https://nodejs.org/docs/latest-v20.x/api/globals.html
- 2: https://nodejs.org/dist/latest-v20.x/docs/api/globals.html
- 3: https://nodejs.org/docs/v20.12.1/api/globals.html
- 4: https://nodejs.org/docs/latest-v23.x/api/globals.html
- 5: http: expose websocket in nodehttp nodejs/node#53721
- 6: lib: add WebSocket nodejs/node#49830
- 7: https://nodejs.org/learn/getting-started/websocket
- 8: https://www.npmjs.com/package/ws
- 9: nodejs/node@c975384264
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '== usages of the smoke script =='
rg -n --hidden --glob '!node_modules/**' 'check-seis-design-agency-kit-browser-smoke\.mjs|experimental-websocket|WebSocket' .github scripts SEIST/package.json package.json
echo
echo '== CI workflow around the smoke step =='
sed -n '1,220p' .github/workflows/ci.ymlRepository: emirhankudun-ux/SEIS
Length of output: 6450
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n --hidden --glob '!node_modules/**' 'experimental-websocket|NODE_OPTIONS|WebSocket\(' . .
echo
for f in $(git ls-files '**/package.json' '.github/**/*.yml' '.github/**/*.yaml'); do
echo "--- $f"
rg -n 'NODE_OPTIONS|experimental-websocket|node-version|setup-node|quality:governance|browser-smoke' "$f" || true
doneRepository: emirhankudun-ux/SEIS
Length of output: 9947
Enable WebSocket in the Node 20 smoke runtime. actions/setup-node uses Node 20 here, but this script relies on the experimental global WebSocket, so new WebSocket(wsUrl) can fail before the CDP connection opens. Add --experimental-websocket in CI or import a client dependency instead.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/check-seis-design-agency-kit-browser-smoke.mjs` at line 220, The
smoke script’s WebSocket connection setup relies on the experimental global
WebSocket, which can fail under the Node 20 runtime used by CI. Update the smoke
runtime so WebSocket support is available before `new WebSocket(wsUrl)` runs,
either by enabling the Node experimental WebSocket flag in the CI command or by
switching `this.ws` in the smoke script to a dedicated WebSocket client
dependency.
| this.ws.addEventListener("message", (event) => { | ||
| const message = JSON.parse(event.data); | ||
| if (message.id && this.pending.has(message.id)) { | ||
| const { resolvePending, rejectPending } = this.pending.get(message.id); | ||
| this.pending.delete(message.id); | ||
| if (message.error) { | ||
| rejectPending(new Error(`${message.error.message}: ${message.error.data || ""}`)); | ||
| } else { | ||
| resolvePending(message.result || {}); | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
sed -n '200,280p' scripts/check-seis-design-agency-kit-browser-smoke.mjs | cat -nRepository: emirhankudun-ux/SEIS
Length of output: 3211
Clear the CDP timeout when a response arrives. Every send() leaves a live timer behind, so successful smoke-test runs wait for the last 8–30s timeout before the Node process can exit. Store the handle and clearTimeout() it before resolving/rejecting.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/check-seis-design-agency-kit-browser-smoke.mjs` around lines 229 -
238, The WebSocket response handler in the CDP client leaves the per-request
timeout active after a response is received, so successful `send()` calls still
keep the process alive. Update the message handling logic around
`this.ws.addEventListener("message", ...)` and the pending request bookkeeping
in `send()` to store each timeout handle alongside
`resolvePending`/`rejectPending`, then `clearTimeout()` it before calling either
resolver or rejector. Make sure this cleanup happens for both success and error
paths using the existing `pending` map and request `id` flow.
| const kitText = readText(KIT_FILE); | ||
| const docText = readText(DOC_FILE); | ||
| const designPageText = readText(DESIGN_PAGE_FILE); | ||
| const websiteRuntimeText = readText(WEBSITE_RUNTIME_FILE); | ||
| const websiteCssText = readText(WEBSITE_CSS_FILE); | ||
| const browserSmokeText = readText(BROWSER_SMOKE_FILE); | ||
| const seisCodeHtmlText = readText(SEIS_CODE_HTML_FILE); | ||
| const seisCodeRuntimeText = readText(SEIS_CODE_RUNTIME_FILE); | ||
| const seisCodeCssText = readText(SEIS_CODE_CSS_FILE); | ||
| const packageJson = readJson(PACKAGE_FILE); | ||
| const kit = readJson(KIT_FILE); | ||
| const packageScripts = new Set(Object.keys(packageJson?.scripts || {})); | ||
|
|
||
| if (kitText) scanSensitiveText(path.relative(ROOT, KIT_FILE), kitText); | ||
| if (docText) scanSensitiveText(path.relative(ROOT, DOC_FILE), docText); | ||
| if (designPageText) scanSensitiveText(path.relative(ROOT, DESIGN_PAGE_FILE), designPageText); | ||
| if (websiteRuntimeText) scanSensitiveText(path.relative(ROOT, WEBSITE_RUNTIME_FILE), websiteRuntimeText); |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win
Sensitive-pattern scan skips several newly-read files.
websiteCssText, browserSmokeText, seisCodeHtmlText, seisCodeRuntimeText, and seisCodeCssText are read but never passed to scanSensitiveText, so secrets accidentally committed to the SEIS Code runtime/CSS/HTML or the browser smoke script would go undetected by this check.
🛡️ Proposed fix to close the scan gap
if (kitText) scanSensitiveText(path.relative(ROOT, KIT_FILE), kitText);
if (docText) scanSensitiveText(path.relative(ROOT, DOC_FILE), docText);
if (designPageText) scanSensitiveText(path.relative(ROOT, DESIGN_PAGE_FILE), designPageText);
if (websiteRuntimeText) scanSensitiveText(path.relative(ROOT, WEBSITE_RUNTIME_FILE), websiteRuntimeText);
+if (websiteCssText) scanSensitiveText(path.relative(ROOT, WEBSITE_CSS_FILE), websiteCssText);
+if (browserSmokeText) scanSensitiveText(path.relative(ROOT, BROWSER_SMOKE_FILE), browserSmokeText);
+if (seisCodeHtmlText) scanSensitiveText(path.relative(ROOT, SEIS_CODE_HTML_FILE), seisCodeHtmlText);
+if (seisCodeRuntimeText) scanSensitiveText(path.relative(ROOT, SEIS_CODE_RUNTIME_FILE), seisCodeRuntimeText);
+if (seisCodeCssText) scanSensitiveText(path.relative(ROOT, SEIS_CODE_CSS_FILE), seisCodeCssText);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const kitText = readText(KIT_FILE); | |
| const docText = readText(DOC_FILE); | |
| const designPageText = readText(DESIGN_PAGE_FILE); | |
| const websiteRuntimeText = readText(WEBSITE_RUNTIME_FILE); | |
| const websiteCssText = readText(WEBSITE_CSS_FILE); | |
| const browserSmokeText = readText(BROWSER_SMOKE_FILE); | |
| const seisCodeHtmlText = readText(SEIS_CODE_HTML_FILE); | |
| const seisCodeRuntimeText = readText(SEIS_CODE_RUNTIME_FILE); | |
| const seisCodeCssText = readText(SEIS_CODE_CSS_FILE); | |
| const packageJson = readJson(PACKAGE_FILE); | |
| const kit = readJson(KIT_FILE); | |
| const packageScripts = new Set(Object.keys(packageJson?.scripts || {})); | |
| if (kitText) scanSensitiveText(path.relative(ROOT, KIT_FILE), kitText); | |
| if (docText) scanSensitiveText(path.relative(ROOT, DOC_FILE), docText); | |
| if (designPageText) scanSensitiveText(path.relative(ROOT, DESIGN_PAGE_FILE), designPageText); | |
| if (websiteRuntimeText) scanSensitiveText(path.relative(ROOT, WEBSITE_RUNTIME_FILE), websiteRuntimeText); | |
| const kitText = readText(KIT_FILE); | |
| const docText = readText(DOC_FILE); | |
| const designPageText = readText(DESIGN_PAGE_FILE); | |
| const websiteRuntimeText = readText(WEBSITE_RUNTIME_FILE); | |
| const websiteCssText = readText(WEBSITE_CSS_FILE); | |
| const browserSmokeText = readText(BROWSER_SMOKE_FILE); | |
| const seisCodeHtmlText = readText(SEIS_CODE_HTML_FILE); | |
| const seisCodeRuntimeText = readText(SEIS_CODE_RUNTIME_FILE); | |
| const seisCodeCssText = readText(SEIS_CODE_CSS_FILE); | |
| const packageJson = readJson(PACKAGE_FILE); | |
| const kit = readJson(KIT_FILE); | |
| const packageScripts = new Set(Object.keys(packageJson?.scripts || {})); | |
| if (kitText) scanSensitiveText(path.relative(ROOT, KIT_FILE), kitText); | |
| if (docText) scanSensitiveText(path.relative(ROOT, DOC_FILE), docText); | |
| if (designPageText) scanSensitiveText(path.relative(ROOT, DESIGN_PAGE_FILE), designPageText); | |
| if (websiteRuntimeText) scanSensitiveText(path.relative(ROOT, WEBSITE_RUNTIME_FILE), websiteRuntimeText); | |
| if (websiteCssText) scanSensitiveText(path.relative(ROOT, WEBSITE_CSS_FILE), websiteCssText); | |
| if (browserSmokeText) scanSensitiveText(path.relative(ROOT, BROWSER_SMOKE_FILE), browserSmokeText); | |
| if (seisCodeHtmlText) scanSensitiveText(path.relative(ROOT, SEIS_CODE_HTML_FILE), seisCodeHtmlText); | |
| if (seisCodeRuntimeText) scanSensitiveText(path.relative(ROOT, SEIS_CODE_RUNTIME_FILE), seisCodeRuntimeText); | |
| if (seisCodeCssText) scanSensitiveText(path.relative(ROOT, SEIS_CODE_CSS_FILE), seisCodeCssText); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/check-seis-design-agency-kit.mjs` around lines 336 - 352, The
sensitive-pattern sweep in check-seis-design-agency-kit.mjs reads several files
but does not scan them, leaving gaps in the coverage. Update the scan block that
currently calls scanSensitiveText for kitText, docText, designPageText, and
websiteRuntimeText so it also includes websiteCssText, browserSmokeText,
seisCodeHtmlText, seisCodeRuntimeText, and seisCodeCssText using their existing
path.relative(ROOT, ...) identifiers.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85885ce3e9
ℹ️ 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".
| id: "apple-swift", | ||
| label: "Apple Swift Native", | ||
| surface: "SwiftPM package", | ||
| status: "Validated", |
There was a problem hiding this comment.
Scope the Swift lane status to macOS-only validation
Fresh evidence: this new Development Lanes bridge now advertises the Apple Swift lane as Validated while listing swift test --package-path packages/seis_platform_swift as the validator, but on the Linux Swift toolchain used here that command fails before tests run because SeisAppleShellTelemetry.swift imports unavailable OSLog. In Linux review/CI contexts this makes the desktop evidence and exported lane bridge report a passed Swift lane that users cannot reproduce, so mark it macOS-only or blocked unless the package is made portable.
Useful? React with 👍 / 👎.
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8f48e18a4b
ℹ️ 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".
| "check:seis-public-readiness-script-file-wiring": "node scripts/check-seis-public-readiness-script-file-wiring.mjs", | ||
| "check:seo": "node scripts/check-seo-metadata.mjs", | ||
| "check:seis-env-example": "node scripts/check-seis-env-example.mjs", | ||
| "check:ai-provider-audit": "node scripts/audit-ai-providers.mjs --check", |
There was a problem hiding this comment.
Regenerate the AI provider audit evidence
This newly exposed check is currently red: running npm run -s check:ai-provider-audit exits 1 because docs/audits/ai-provider-audit.json and docs/audits/AI_PROVIDER_AND_CREDENTIAL_AUDIT.md are out of date. Since the command is now advertised as a public-readiness/security gate, users will hit a failing validation path until the audit artifacts are regenerated or the script is left unregistered until it can pass.
Useful? React with 👍 / 👎.
| } | ||
|
|
||
| function shouldIgnoreLine(line) { | ||
| return /intentionally omitted|value intentionally omitted|redacted|placeholder|example|process\.env|os\.environ|getenv\(|envValue\(/i.test(line) |
There was a problem hiding this comment.
Check for secrets before broad placeholder suppression
Because shouldIgnoreLine runs before the sensitive-pattern and assignment checks, any real credential on a line that also contains words like example or redacted is skipped entirely; for example, a filled OPENAI_API_KEY=sk-... # example from provider line would not be reported. That lets this public-readiness sensitive scan claim a clean result while changed docs/configs still contain a secret, so restrict the suppression to known placeholder values or apply it after token detection.
Useful? React with 👍 / 👎.
| @@ -600,7 +633,7 @@ async function runRuntimeSmoke(html, js) { | |||
| ensure(window.document.querySelector("[data-mcp-runtime-contract]"), "Installed AI Systems must render the MCP runtime contract."); | |||
| ensure(window.document.querySelectorAll("[data-mcp-runtime-surface]").length === 4, "MCP Runtime Contract must render four runtime surfaces."); | |||
| ensure(window.document.querySelector("[data-mcp-runtime-contract]")?.textContent.includes("stdio JSON-RPC"), "MCP Runtime Contract must show the stdio JSON-RPC transport."); | |||
| ensure(window.document.querySelector("[data-mcp-runtime-contract]")?.textContent.includes("26"), "MCP Runtime Contract must show the 26-resource registry count."); | |||
| ensure(window.document.querySelector("[data-mcp-runtime-contract]")?.textContent.includes("32"), "MCP Runtime Contract must show the 32-resource registry count."); | |||
There was a problem hiding this comment.
Align the MCP resource registry count
The canonical MCP runtime contract and smoke diagnostics now report 33 resources, but this browser smoke assertion still requires the rendered Desktop contract to include 32. If the Desktop UI is corrected to show the same 33-resource registry row as content/development/seis-ai-core-mcp-runtime-contract.json, npm run check:desktop-os will fail, so this validator currently locks in stale public evidence.
Useful? React with 👍 / 👎.
| const file = app.files.get(DESIGN_HANDOFF_PATH); | ||
| const manifest = readJsonLocalStorage(DESIGN_HANDOFF_STORAGE_KEY); | ||
| const storedPack = readTextLocalStorage(DESIGN_PACK_STORAGE_KEY); | ||
| const content = file?.content || manifest?.content || storedPack || ""; |
There was a problem hiding this comment.
Prefer the newer handoff manifest over stale workspace files
When an older /workspace/Design/seis-design-agency-pack.md file already exists and a later SEIS Design export only reaches localStorage, for example because the IndexedDB put fails or quota is exhausted, this always chooses the old workspace file before the fresh manifest content. SEIS Code can then show the new manifest metadata while previewing and generating review notes from the previous pack, with Import disabled because hasWorkspaceFile is true; prefer the newer manifest or allow re-import in this state.
Useful? React with 👍 / 👎.
Summary
Expands PR #125 from the no-key SEIS Design Agency Kit into a broader public-readiness package: agency-replacement design workflows, Apple-first native readiness docs and Swift surfaces, SEIS Brain context packs, SEIS-SSH public-safe planning, installed AI tooling metadata, and stabilized audit gates.
What Changed
apps/apple/README.md, Swift package readiness models, App Library/native demo lane wiring, development lane bridge, and public-demo route tests..buildoutputs and audit/history self-references do not churn readiness reports.Verification
Clean HEAD verification was run from
/private/tmp/seis-head-1e5a8f8-checkso unrelated dirty local files could not mask PR behavior.npm run check:seis-public-readiness-> passednpm run check:foundation-> passednpm run check:open-source-governance-> passednpm run check:js-> passed for 384 tracked filesnpm run check:ai-provider-audit-> passed; 21 providers, 0 secret findings without valuesnpm run check:git-secret-history-> passed; 3893 history blobs, 0 findings without valuesnpm run check:seis-apple-native-snapshot-> passed; 71 Website / AI Platform modules, 148 Ubuntu Web Desktop modules, 219 totalswift test --package-path packages/seis_platform_swift-> passed; 50 Swift testsoutputCount: 43,workboardCount: 36,coverage: 100/100,boundary checks: 61,totalItems: 144, mobilescrollWidth: 390Security
Risks
Rollback
1e5a8f8through56a1995to remove the broad Apple/Brain/SSH/public-readiness/audit package added in this push wave.af0ad7fto remove the Creative Asset Licensing Board slice.Next Steps
Summary by CodeRabbit
New Features
Documentation
Tests