diff --git a/design/frames/app-management/manifest.json b/design/frames/app-management/manifest.json index 4410db0a6..3d84a31a0 100644 --- a/design/frames/app-management/manifest.json +++ b/design/frames/app-management/manifest.json @@ -5,7 +5,9 @@ "designSystem": "fuse-seam (@fuzefront/design-system)", "implementation": { "paths": [ - "packages/app-management-ui/**" + "packages/app-management-ui/**", + "frontend/src/pages/ApplicationsPage.tsx", + "frontend/src/pages/AddApplicationPage.tsx" ] }, "entry": "index.html", @@ -316,5 +318,5 @@ ] } ], - "stamp": "57b824eff6788b372e3f62ccbc287205ca7df8e2f3424a40bdc2eddc088ec199" + "stamp": "92c4bcf22ff5ccbd1af53ed8ea6e239f7cf55a43da04b01972343b53fab7b32f" } diff --git a/design/frames/auth-experience/manifest.json b/design/frames/auth-experience/manifest.json index 689993c8b..967975a19 100644 --- a/design/frames/auth-experience/manifest.json +++ b/design/frames/auth-experience/manifest.json @@ -4,7 +4,9 @@ "designSystem": "fuse-seam (@fuzefront/design-system)", "implementation": { "paths": [ - "packages/auth-experience-ui/**" + "packages/auth-experience-ui/**", + "packages/auth-ui/src/**", + "frontend/src/pages/LoginPage.tsx" ] }, "approved": false, @@ -94,7 +96,7 @@ "Alert info/success variants — add if not already present" ], "packages": [ - "@fuzefront/auth-experience-ui" + "@fuzefront/auth-ui" ], "externalPackages": [ "@marsidev/react-turnstile (Cloudflare Turnstile React wrapper; keys owner-gated)" @@ -235,5 +237,5 @@ ] } ], - "stamp": "456ae00cb0c00235bd5c1d8a5309ab8f15435aea4afbec81f31c57afb867f022" + "stamp": "f37ab8e824256a9946d3c676f2a1e701f06189851b5d66aa621d93e363daeac3" } diff --git a/design/frames/billing-invoices/manifest.json b/design/frames/billing-invoices/manifest.json index 7103e28ae..9ae863153 100644 --- a/design/frames/billing-invoices/manifest.json +++ b/design/frames/billing-invoices/manifest.json @@ -9,7 +9,8 @@ "packages/billing-ui/src/i18n/**", "packages/billing-ui/src/lib/**", "packages/billing-ui/src/styles/**", - "packages/billing-ui/src/index.ts" + "packages/billing-ui/src/index.ts", + "frontend/src/pages/BillingPage.tsx" ] }, "approved": true, @@ -64,7 +65,7 @@ ] } ], - "stamp": "3b0d054d3fdaf90aba3790b4d57160b498c29b7322ba9a252319cd1683ed9b70", + "stamp": "670c83221a4138174ed74744231356667c07ca163286accb91e2cb02ca542ef8", "build": { "packages": [ "@fuzefront/billing-ui" diff --git a/design/frames/config-management/manifest.json b/design/frames/config-management/manifest.json index d4e58e4ba..41e671e00 100644 --- a/design/frames/config-management/manifest.json +++ b/design/frames/config-management/manifest.json @@ -4,7 +4,11 @@ "designSystem": "fuse-seam (@fuzefront/design-system)", "implementation": { "paths": [ - "packages/config-ui/src/**" + "packages/config-ui/src/**", + "frontend/src/pages/ConfigPage.tsx", + "frontend/src/pages/ConfigCatalogPage.tsx", + "frontend/src/pages/ConfigAuditHistoryPage.tsx", + "frontend/src/pages/ConfigKeyDefinitionPage.tsx" ] }, "plan": "docs/planning/epics/EPIC-19-configuration-management-ui.md", @@ -435,5 +439,5 @@ "CodeField — monospace JSON / duration input" ] }, - "stamp": "c46c7880b4156d3742ce3e9a173ebc0f63b49636f5a12ba5ee91c96b90e998b5" + "stamp": "8a9d7194c7a8bf6ac9e3c4bd48847d4d569d0c46c95dd43d7f7a76f3f7dda7f7" } diff --git a/design/frames/employee-console/manifest.json b/design/frames/employee-console/manifest.json index ca22911b8..c986c827d 100644 --- a/design/frames/employee-console/manifest.json +++ b/design/frames/employee-console/manifest.json @@ -5,7 +5,9 @@ "designSystem": "fuse-seam (@fuzefront/design-system)", "implementation": { "paths": [ - "packages/identity-ui/src/components/employee/**" + "packages/identity-ui/src/components/employee/**", + "frontend/src/pages/EmployeeConsolePage.tsx", + "frontend/src/pages/EmployeeOrgDrilldownPage.tsx" ] }, "plan": "docs/planning/design-first-ui-pipeline.md", @@ -116,5 +118,5 @@ ] } ], - "stamp": "3b08b1061044c2a54f76db7dc9169602bde3023d078e0c41d022084e1668120a" + "stamp": "f5aed2b446cae71b4033ee119a3459d943dfcff10c1b9005d027eadff2caae8c" } diff --git a/design/frames/identity-context-switcher/manifest.json b/design/frames/identity-context-switcher/manifest.json index 8e67bb4aa..2b3c9d0c5 100644 --- a/design/frames/identity-context-switcher/manifest.json +++ b/design/frames/identity-context-switcher/manifest.json @@ -6,7 +6,11 @@ "implementation": { "paths": [ "packages/identity-ui/src/components/context/**", - "packages/identity-ui/src/components/organizations/**" + "packages/identity-ui/src/components/organizations/**", + "frontend/src/pages/MyOrganizationsPage.tsx", + "frontend/src/pages/OrganizationDetailPage.tsx", + "frontend/src/pages/OrganizationPage.tsx", + "frontend/src/pages/CreateOrganizationPage.tsx" ] }, "plan": "docs/planning/design-first-ui-pipeline.md", @@ -167,5 +171,5 @@ ] } ], - "stamp": "f0ceb3d95d359a1942157f67ef7294733b14cf29942a4e5bbbe1e02cb5c1ab6b" + "stamp": "369316f584f9d7302adac5def681f22c434f2b965720a8a20fa00dfbf349f86d" } diff --git a/design/frames/member-directory/manifest.json b/design/frames/member-directory/manifest.json index 2446562f6..1a28a22d3 100644 --- a/design/frames/member-directory/manifest.json +++ b/design/frames/member-directory/manifest.json @@ -6,7 +6,8 @@ "implementation": { "paths": [ "packages/identity-ui/src/components/directory/**", - "packages/identity-ui/src/components/members/**" + "packages/identity-ui/src/components/members/**", + "frontend/src/pages/MemberDirectoryPage.tsx" ] }, "plan": "docs/planning/design-first-ui-pipeline.md", @@ -98,5 +99,5 @@ ] } ], - "stamp": "4806ce131d11e3fc86298851042d42fcc174a2e22fc4936fc3ca7035924c7d8d" + "stamp": "02333ae705a6156b7901d132055ff7ca7ecd5842c007ecb20994196324d084c5" } diff --git a/governance/frames-first-policy.json b/governance/frames-first-policy.json index 6bb501773..84cacc928 100644 --- a/governance/frames-first-policy.json +++ b/governance/frames-first-policy.json @@ -63,12 +63,21 @@ "**/.gitignore", "**/esbuild*.mjs", "packages/*-ui/scripts/**", + "packages/*-ui/src/test/**", + "**/.gitattributes", "frontend/src/main.tsx", "frontend/src/registerServiceWorker.ts", + "frontend/src/App.tsx", + "frontend/src/index.css", "frontend/src/test/**", "frontend/src/types/**", "frontend/src/i18n/**", - "frontend/src/assets/**" + "frontend/src/assets/**", + "frontend/src/contexts/**", + "frontend/src/lib/**", + "frontend/src/platform/**", + "frontend/src/services/**", + "frontend/src/utils/**" ] }, @@ -77,24 +86,30 @@ "A changed feature-UI file that matches NO manifest's declared `implementation.paths`.", "", "mode=warn — report it, exit 0. This is the RAMP, and it is where the repo still is.", - " As of the 2026-08-18 coverage pass, 19 of 22 feature manifests declare", - " `implementation.paths` (was 0). Uncovered feature-UI files dropped from", - " 290 to 116. But the flip is NOT yet safe — see below.", + " Two 2026-08-18 passes brought coverage from 0 to 19+ manifests and mapped", + " the real code (incl. auth-ui -> auth-experience, the config/org/billing/", + " member/employee page-wrappers -> their features) plus moved app infra", + " (contexts/lib/platform/services/utils, App.tsx) into nonFeaturePaths.", + " Uncovered feature-UI files dropped 290 -> 116 -> 58. Flip still NOT safe.", "mode=fail — the destination. From then on, feature UI with no frames at all cannot", " merge, which is the headline promise in CLAUDE.md. The gate does NOT", " grandfather pre-existing uncovered files (the ratchet is a worklist, not", " an allowlist), so flipping today would fail the NEXT PR that touches any", - " of the 116 still-uncovered files — which are REAL, still-unframed feature", - " UI: `packages/chat-ui/src/**` (no frames at all), `packages/auth-ui/src/**`,", - " and the `frontend/src` app shell (Layout, TopBar, SidePanel, LoginPage,", - " DashboardPage, the config/org pages, ...). That is retroactively blocking", - " the existing app, not just new unframed UI, so mode stays `warn`.", + " of the 58 still-uncovered files. What remains is genuinely unframed and", + " needs an owner decision, not a mechanical mapping: `packages/chat-ui/src/**`", + " (no frames at all), the identity `invites/` + shared `common`/`page`", + " shells, and the `frontend/src` app shell (Layout, TopBar, SidePanel,", + " Dashboard/Admin/Help/Status/Test/AcceptInvite pages, the permission", + " guards). Each is either 'author a frame' or 'declare it structural'.", + " Until then mode stays `warn`.", "", "REMOVAL CRITERION for mode=warn: flip to `fail` when every path in", "`ratchet.knownUncovered` below has either been claimed by a manifest's", - "`implementation.paths` or moved into `nonFeaturePaths`. Concretely, the remaining", - "work before a safe flip is: (a) author frames for chat + auth + the app shell (or", - "(b) decide they are structural and move them into `nonFeaturePaths`). Owner: @izzywdev." + "`implementation.paths` or moved into `nonFeaturePaths`. The list is now small and", + "named (see ratchet): for EACH entry, either (a) author a frame, or (b) declare it", + "structural in `nonFeaturePaths`. The biggest single item is `chat-ui` (no frames at", + "all); the app-shell components need a one-time call on whether shell chrome is", + "'feature UI' or structural. Owner: @izzywdev." ], "mode": "warn", "owner": "izzywdev" @@ -122,27 +137,26 @@ "", "Regenerate with: node scripts/check-frames-first.mjs --report-uncovered", "", - "Updated 2026-08-18 by the coverage pass: 19 of 22 manifests now declare", - "`implementation.paths`, so `billing-ui` and `portal-branding-ui` left this list", - "(fully claimed), and the identity-ui / account-security-ui entries now cover only", - "the shared core + not-yet-framed subdirs rather than the whole package. The globs", - "below are what still blocks a safe flip to `mode: fail`." + "Updated 2026-08-18 by the second coverage pass (58 files): auth-ui, the config/", + "org/billing/member/employee page-wrappers, and account-security-ui all left this", + "list (claimed or covered by an approved feature); the frontend app-infra dirs left", + "it via nonFeaturePaths. What remains is the genuinely-unframed surface below — the", + "exact worklist that still blocks a safe flip to `mode: fail`." ], "observedOn": "2026-08-18", - "observedFileCount": 116, + "observedFileCount": 58, "knownUncovered": [ "packages/chat-ui/src/**", - "packages/auth-ui/src/**", - "packages/identity-ui/src/**", - "packages/account-security-ui/src/**", - "frontend/src/**", - "frontend/src/components/**", - "frontend/src/contexts/**", - "frontend/src/lib/**", - "frontend/src/pages/**", - "frontend/src/platform/**", - "frontend/src/services/**", - "frontend/src/utils/**" + "packages/identity-ui/src/components/invites/**", + "packages/identity-ui/src/components/common/**", + "packages/identity-ui/src/components/page/**", + "frontend/src/pages/AcceptInvitePage.tsx", + "frontend/src/pages/AdminPage.tsx", + "frontend/src/pages/DashboardPage.tsx", + "frontend/src/pages/HelpPage.tsx", + "frontend/src/pages/StatusPage.tsx", + "frontend/src/pages/TestPage.tsx", + "frontend/src/components/**" ] } }