@echelon-foundry/design-system 0.2.0-main.16.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,81 +0,0 @@
1
- # Feature Manifest — Aegis fault presentation
2
-
3
- ## Purpose
4
-
5
- Provide the canonical Forma presentation vocabulary for user-facing Aegis faults without making Forma understand, store, classify, recover, or authorize a raw Aegis `Fault`.
6
-
7
- ## Upstream contract
8
-
9
- The default integration input is the safe Aegis `Presentation.T` model:
10
-
11
- - `Title`
12
- - `Message`
13
- - `Severity`
14
- - `Intent`
15
- - `Actions`
16
- - `Reference`
17
-
18
- The full Aegis `Fault` record is not a Forma input contract.
19
-
20
- ## Intent mapping
21
-
22
- - `Silent`: render no visible fault surface.
23
- - `Inline`: `.ef-fault--inline` / `<ef-fault-inline>`.
24
- - `Notification`: `.ef-fault-notification` / `<ef-fault-notification>`.
25
- - `Banner`: `.ef-fault-banner` / `<ef-fault-banner>`.
26
- - `Blocking`: `.ef-fault-blocking` / `<ef-fault-blocking>`.
27
-
28
- `<ef-fault>` is the common visual shell. The intent-specific patterns are preferred when the Aegis intent is already known.
29
-
30
- ## Ownership
31
-
32
- - Aegis owns fault classification, presentation intent, severity, recovery policy, safe user message, reference, lifecycle, throttling, and recovery capability derivation.
33
- - Ordo/application state owns whether a recovery transition is currently legal.
34
- - Limen/application behavior maps Aegis data into DOM, handles clicks, focus, notification lifecycle, blocking-dialog policy, copy behavior, and revalidates capabilities before executing them.
35
- - Forma owns semantic markup, CSS, non-color cues, responsive composition, focus styling, reduced-motion behavior, and forced-colors behavior.
36
-
37
- ## Security boundary
38
-
39
- Do not pass the raw Aegis `Fault`, `TechnicalDetails`, `ExceptionDetail`, stack trace, raw context values, breadcrumbs, snapshot locations, secrets, or unredacted diagnostics into these patterns.
40
-
41
- `fault-details` is not an escape hatch. It accepts only data that the application has explicitly approved and sanitized for the current audience.
42
-
43
- ## Recovery action contract
44
-
45
- Buttons use `data-ef-aegis-capability` with the exact Aegis capability name. The attribute is descriptive, not authoritative. The consuming application must re-check current capability/state at activation time.
46
-
47
- Canonical labels mirror Aegis:
48
-
49
- - `CanRetry` → Try again
50
- - `CanReauthenticate` → Sign in
51
- - `CanReload` → Reload
52
- - `CanQuarantine` → Set aside
53
- - `CanReprocess` → Process again
54
- - `CanOpenReadOnly` → Open read-only
55
- - `CanRestoreSink` → Reconnect diagnostics
56
-
57
- Never synthesize `Continue anyway` or another action that Aegis/application state did not supply.
58
-
59
- ## Notification policy
60
-
61
- Forma does not run timers. Fault notifications with recovery actions are persistent until the application dismisses/resolves them. An application that chooses timed dismissal for non-actionable information must preserve an accessible durable history or equivalent recovery path and pause/extend timing when required by accessibility policy.
62
-
63
- ## Summary and repeat policy
64
-
65
- Forma does not fingerprint or deduplicate faults. Aegis/application code performs lifecycle/fingerprint logic and supplies already-grouped entries plus occurrence counts. The summary pattern only presents that result.
66
-
67
- ## Blocking policy
68
-
69
- The blocking pattern uses native `dialog` as the semantic surface. Limen/application code is responsible for opening it modally, handling browser close/cancel requests according to current Aegis/Ordo state, keeping legal recovery actions reachable, and restoring focus after resolution.
70
-
71
- ## Verification
72
-
73
- The feature is covered by:
74
-
75
- - zero-runtime package checks;
76
- - generated-site coverage and 320px mobile examples;
77
- - Axe WCAG A/AA checks;
78
- - accessible-name/role tests;
79
- - recovery capability attribute tests;
80
- - mobile overflow tests;
81
- - pull-request CI across the repository validation workflows.
@@ -1,7 +0,0 @@
1
- <div class="ef-diagnostic-status" data-ef-state="queued" role="status">
2
- <span class="ef-diagnostic-status__marker" aria-hidden="true">↥</span>
3
- <span class="ef-diagnostic-status__body">
4
- <strong>Diagnostics queued</strong>
5
- <span>3 reports are waiting to synchronize.</span>
6
- </span>
7
- </div>
@@ -1,19 +0,0 @@
1
- <aside
2
- class="ef-alert ef-fault-banner"
3
- role="status"
4
- data-ef-intent="banner"
5
- data-ef-severity="critical"
6
- data-ef-motion-weight="standard"
7
- data-ef-motion-entry
8
- aria-labelledby="fault-banner-title">
9
- <div class="ef-alert__icon ef-fault-banner__marker" aria-hidden="true">!!</div>
10
- <div class="ef-fault-banner__body">
11
- <p class="ef-fault__severity">Critical</p>
12
- <h2 class="ef-alert__title" id="fault-banner-title">Diagnostics storage is unavailable</h2>
13
- <p>The application is running in a degraded state. New diagnostics are queued locally.</p>
14
- <p class="ef-fault-reference">Reference <code>AG-22K8M</code></p>
15
- </div>
16
- <div class="ef-recovery-actions" role="group" aria-label="Recovery actions">
17
- <button type="button" data-ef-aegis-capability="CanRestoreSink">Reconnect diagnostics</button>
18
- </div>
19
- </aside>
@@ -1,25 +0,0 @@
1
- <button type="button" commandfor="blocking-fault-dialog" command="show-modal">Preview blocking fault</button>
2
- <dialog
3
- class="ef-dialog ef-fault-blocking"
4
- id="blocking-fault-dialog"
5
- data-ef-intent="blocking"
6
- data-ef-severity="critical"
7
- data-ef-motion-weight="heavy"
8
- aria-labelledby="blocking-fault-title"
9
- aria-describedby="blocking-fault-message">
10
- <div class="ef-dialog__body">
11
- <div class="ef-fault-blocking__heading">
12
- <div class="ef-fault-blocking__marker" aria-hidden="true">!!</div>
13
- <div>
14
- <p class="ef-fault__severity">Critical</p>
15
- <h2 id="blocking-fault-title">This application cannot continue safely</h2>
16
- </div>
17
- </div>
18
- <p id="blocking-fault-message">The current state cannot be verified. Use one of the recovery actions below before continuing.</p>
19
- <p class="ef-fault-reference">Reference <code>AG-7P2DX</code></p>
20
- </div>
21
- <div class="ef-dialog__actions ef-recovery-actions" role="group" aria-label="Recovery actions">
22
- <button type="button" data-ef-aegis-capability="CanOpenReadOnly">Open read-only</button>
23
- <button type="button" data-ef-aegis-capability="CanReload">Reload</button>
24
- </div>
25
- </dialog>
@@ -1,11 +0,0 @@
1
- <details class="ef-fault-details">
2
- <summary>Safe diagnostic details</summary>
3
- <div class="ef-fault-details__content">
4
- <dl class="ef-fault-details__list">
5
- <div><dt>Reference</dt><dd><code>AG-4F82C</code></dd></div>
6
- <div><dt>Application</dt><dd>Chrona</dd></div>
7
- <div><dt>Recovery state</dt><dd>Retry available</dd></div>
8
- </dl>
9
- <p class="ef-fault-details__boundary">Only explicitly approved, already-sanitized diagnostic values belong in this surface.</p>
10
- </div>
11
- </details>
@@ -1,17 +0,0 @@
1
- <div
2
- class="ef-fault ef-fault--inline"
3
- id="profile-save-fault"
4
- data-ef-intent="inline"
5
- data-ef-severity="error"
6
- aria-labelledby="profile-save-fault-title">
7
- <div class="ef-fault__marker" aria-hidden="true">!</div>
8
- <div class="ef-fault__body">
9
- <p class="ef-fault__severity">Error</p>
10
- <p class="ef-fault__title" id="profile-save-fault-title"><strong>Profile was not saved.</strong></p>
11
- <p class="ef-fault__message">Check your connection and try again.</p>
12
- <p class="ef-fault-reference">Reference <code>AG-4F82C</code></p>
13
- </div>
14
- <div class="ef-recovery-actions" role="group" aria-label="Recovery actions">
15
- <button type="button" data-ef-aegis-capability="CanRetry">Try again</button>
16
- </div>
17
- </div>
@@ -1,20 +0,0 @@
1
- <aside
2
- class="ef-toast ef-fault-notification"
3
- role="status"
4
- data-ef-intent="notification"
5
- data-ef-severity="warning"
6
- data-ef-motion-weight="standard"
7
- data-ef-motion-entry
8
- aria-labelledby="fault-notification-title">
9
- <div class="ef-fault-notification__marker" aria-hidden="true">!</div>
10
- <div class="ef-fault-notification__body">
11
- <p class="ef-fault__severity">Warning</p>
12
- <h3 class="ef-toast__title" id="fault-notification-title">GitHub is temporarily unavailable</h3>
13
- <p>Your work is still local. You can retry the synchronization.</p>
14
- <p class="ef-fault-reference">Reference <code>AG-91B7Q</code></p>
15
- <div class="ef-recovery-actions" role="group" aria-label="Recovery actions">
16
- <button type="button" data-ef-aegis-capability="CanRetry">Try again</button>
17
- </div>
18
- </div>
19
- <button type="button" class="ef-fault-notification__dismiss" data-ef-action="dismiss" aria-label="Dismiss notification">Close</button>
20
- </aside>
@@ -1,5 +0,0 @@
1
- <p class="ef-fault-reference">
2
- <span>Reference</span>
3
- <code>AG-4F82C</code>
4
- <button type="button" data-ef-action="copy-reference" aria-label="Copy fault reference AG-4F82C">Copy</button>
5
- </p>
@@ -1,20 +0,0 @@
1
- <section class="ef-fault-summary" tabindex="-1" aria-labelledby="fault-summary-title">
2
- <div class="ef-fault-summary__heading">
3
- <div class="ef-fault-summary__marker" aria-hidden="true">!</div>
4
- <div>
5
- <p class="ef-fault__severity">2 unresolved faults</p>
6
- <h2 id="fault-summary-title">Some work needs your attention</h2>
7
- <p>Repeated occurrences are grouped by the application before rendering.</p>
8
- </div>
9
- </div>
10
- <ol class="ef-fault-summary__list">
11
- <li data-ef-severity="error">
12
- <a href="#customer-name">Customer name could not be saved</a>
13
- <span class="ef-fault-summary__meta">Error · AG-4F82C · occurred 3 times</span>
14
- </li>
15
- <li data-ef-severity="warning">
16
- <a href="#sync-status">Synchronization is waiting for GitHub</a>
17
- <span class="ef-fault-summary__meta">Warning · AG-91B7Q</span>
18
- </li>
19
- </ol>
20
- </section>
@@ -1,17 +0,0 @@
1
- <section
2
- class="ef-fault"
3
- data-ef-intent="inline"
4
- data-ef-severity="error"
5
- aria-labelledby="fault-title"
6
- aria-describedby="fault-message">
7
- <div class="ef-fault__marker" aria-hidden="true">!</div>
8
- <div class="ef-fault__body">
9
- <p class="ef-fault__severity">Error</p>
10
- <h3 class="ef-fault__title" id="fault-title">Could not save changes</h3>
11
- <p class="ef-fault__message" id="fault-message">The update did not complete. Your current values are still available.</p>
12
- <p class="ef-fault-reference">Reference <code>AG-4F82C</code></p>
13
- </div>
14
- <div class="ef-recovery-actions" role="group" aria-label="Recovery actions">
15
- <button type="button" data-ef-aegis-capability="CanRetry">Try again</button>
16
- </div>
17
- </section>
@@ -1,5 +0,0 @@
1
- <div class="ef-recovery-actions" role="group" aria-label="Recovery actions">
2
- <button type="button" data-ef-aegis-capability="CanRetry">Try again</button>
3
- <button type="button" data-ef-aegis-capability="CanReauthenticate">Sign in</button>
4
- <button type="button" data-ef-aegis-capability="CanOpenReadOnly">Open read-only</button>
5
- </div>