mirror of
https://github.com/PR0M3TH3AN/bitgate.git
synced 2026-10-27 16:41:03 +00:00
Follows bitlogin's layering: the engine stays headless and the widget is a consumer of the published API, never a dependency of it. Building it was also a test of that API — an element needing something unexposed would have been a finding, the way the commerce example was. Viewer elements: governance-veil (blur on restrict, disclosure on hide, warning on warn), governance-report, governance-status. Moderator elements: governance-capabilities, governance-action, governance-admin-panel. Deliberate behaviors: - hidden content leaves the accessibility tree rather than being visually covered, so a screen reader does not read out what the viewer must not see - a hidden decision renders a disclosure, not nothing: content that silently vanishes is indistinguishable from a bug and leaves no route to appeal - refused moderator actions stay visible and name the missing capability. A hidden button teaches nothing about the authority model, and the command layer enforces the same check independently — the UI is an explanation, never the gate - no element computes policy; wording maps from stable reason identifiers and is overridable per application Found while building it: GovernanceAdminStore emitted only when reduced denial state changed, so revoking a role that denied nobody announced nothing, leaving capability-gated UI and the decision cache stale. The root tsconfig deliberately omits the DOM lib — that absence is what keeps core, nostr, and runtime from reaching for browser globals — so the widget carries its own DOM-aware config rather than relaxing the guarantee globally. 687 tests; lint, typecheck, and the declaration build pass from a cold checkout.
36 lines
633 B
JSON
36 lines
633 B
JSON
{
|
|
"compilerOptions": {
|
|
"module": "NodeNext",
|
|
"moduleResolution": "NodeNext",
|
|
"target": "ES2022",
|
|
"lib": [
|
|
"ES2022"
|
|
],
|
|
"strict": true,
|
|
"skipLibCheck": true,
|
|
"noEmit": true,
|
|
"allowJs": true,
|
|
"checkJs": true,
|
|
"noImplicitAny": false,
|
|
"resolveJsonModule": true,
|
|
"types": [
|
|
"node",
|
|
"vitest/globals"
|
|
]
|
|
},
|
|
"include": [
|
|
"packages/**/src/**/*.js",
|
|
"packages/**/test/**/*.js",
|
|
"tests/**/*.js",
|
|
"vitest.config.js"
|
|
],
|
|
"exclude": [
|
|
"**/dist/**",
|
|
"coverage",
|
|
"dist",
|
|
"node_modules",
|
|
"packages/widget/**",
|
|
"scripts/**"
|
|
]
|
|
}
|