design-playbook 0.14.0 → 0.20.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.
- package/commands/design-io.md +1 -1
- package/commands/run-review.md +5 -3
- package/commands/ui-review.md +1 -1
- package/commands/ux-spec.md +1 -1
- package/examples/README.md +4 -0
- package/examples/craft-detectors/composition-contrast.md +16 -14
- package/examples/craft-detectors/existing-brand-contrast.md +11 -0
- package/examples/craft-detectors/landing-product-contrast.md +12 -10
- package/examples/craft-detectors/saas-dashboard.md +16 -15
- package/examples/dogfood/README.md +46 -0
- package/examples/dogfood/project/DESIGN.md +23 -0
- package/examples/dogfood/project/contract.json +83 -0
- package/examples/dogfood/project/decisions.jsonl +11 -0
- package/examples/dogfood/run/candidates/console-region.html +26 -0
- package/examples/dogfood/run/contract-bind.json +78 -0
- package/examples/dogfood/run/craft-guard.md +19 -0
- package/examples/dogfood/run/decision-report.md +97 -0
- package/examples/dogfood/run/design-baseline/state.json +22 -0
- package/examples/dogfood/run/evidence/L6.1-return-first.json +10 -0
- package/examples/dogfood/run/evidence/L6.1-return-trace.json +11 -0
- package/examples/dogfood/run/evidence/L6.2-pause-first.json +9 -0
- package/examples/dogfood/run/evidence/L6.2-pause-trace.json +11 -0
- package/examples/dogfood/run/evidence/L6.3-cap-trace.json +10 -0
- package/examples/dogfood/run/evidence/manifest.jsonl +5 -0
- package/examples/dogfood/run/filled-ui.md +18 -0
- package/examples/dogfood/run/plan.md +30 -0
- package/examples/dogfood/run/point-back.md +122 -0
- package/examples/dogfood/run/preview/confirm-round-1.json +15 -0
- package/examples/dogfood/run/preview/confirm-round-2.json +15 -0
- package/examples/dogfood/run/preview/decision-round-1.json +26 -0
- package/examples/dogfood/run/preview/decision-round-2.json +26 -0
- package/examples/dogfood/run/preview/round-1.html +17 -0
- package/examples/dogfood/run/preview/round-2.html +17 -0
- package/examples/dogfood/run/shaping/queue.json +13 -0
- package/examples/dogfood/run/shaping/shaping-log.jsonl +13 -0
- package/examples/dogfood/run/spec.md +68 -0
- package/examples/export-entry/project/contract.json +70 -0
- package/examples/export-entry/project/decisions.jsonl +7 -0
- package/examples/export-entry/run/contract-bind.json +85 -0
- package/examples/export-entry/run/craft-guard.md +19 -0
- package/examples/export-entry/run/decision-report.md +78 -0
- package/examples/export-entry/run/evidence/L6.1-export-trace.json +23 -0
- package/examples/export-entry/run/evidence/L6.1-usertest-notes.md +15 -0
- package/examples/export-entry/run/evidence/L6.2-a11y-tree-r2.json +9 -0
- package/examples/export-entry/run/evidence/L6.2-a11y-tree.json +9 -0
- package/examples/export-entry/run/evidence/L6.2-cap-error-r2.png +1 -0
- package/examples/export-entry/run/evidence/L6.2-cap-error.png +1 -0
- package/examples/export-entry/run/evidence/L6.3-return-trace.json +22 -0
- package/examples/export-entry/run/evidence/edge-timeout.png +1 -0
- package/examples/export-entry/run/evidence/manifest.jsonl +8 -0
- package/examples/export-entry/run/filled-ui.md +3 -0
- package/examples/export-entry/run/plan.md +36 -0
- package/examples/export-entry/run/point-back.md +127 -0
- package/examples/export-entry/run/shaping/queue.json +6 -0
- package/examples/export-entry/run/shaping/shaping-log.jsonl +26 -0
- package/examples/export-entry/run/spec.md +69 -0
- package/examples/export-pointfix-upgrade/project/contract.json +61 -0
- package/examples/export-pointfix-upgrade/project/decisions.jsonl +8 -0
- package/examples/export-pointfix-upgrade/run/contract-bind.json +64 -0
- package/examples/export-pointfix-upgrade/run/craft-guard.md +19 -0
- package/examples/export-pointfix-upgrade/run/decision-report.md +45 -0
- package/examples/export-pointfix-upgrade/run/evidence/L6.1-empty-r1.png +1 -0
- package/examples/export-pointfix-upgrade/run/evidence/L6.1-empty-r2.png +1 -0
- package/examples/export-pointfix-upgrade/run/evidence/L6.1-export-trace.json +1 -0
- package/examples/export-pointfix-upgrade/run/evidence/L6.2-cap-error.png +1 -0
- package/examples/export-pointfix-upgrade/run/evidence/L6.3-return-trace.json +1 -0
- package/examples/export-pointfix-upgrade/run/evidence/L6.4-column-trace.json +1 -0
- package/examples/export-pointfix-upgrade/run/evidence/manifest.jsonl +6 -0
- package/examples/export-pointfix-upgrade/run/filled-ui.md +3 -0
- package/examples/export-pointfix-upgrade/run/plan.md +39 -0
- package/examples/export-pointfix-upgrade/run/point-back.md +117 -0
- package/examples/export-pointfix-upgrade/run/shaping/queue.json +6 -0
- package/examples/export-pointfix-upgrade/run/shaping/shaping-log.jsonl +6 -0
- package/examples/export-pointfix-upgrade/run/spec.md +68 -0
- package/examples/export-retry-stop/project/contract.json +37 -0
- package/examples/export-retry-stop/project/decisions.jsonl +4 -0
- package/examples/export-retry-stop/run/contract-bind.json +49 -0
- package/examples/export-retry-stop/run/evidence/L6.1-retry-r1.png +1 -0
- package/examples/export-retry-stop/run/evidence/L6.1-retry-r2.png +1 -0
- package/examples/export-retry-stop/run/evidence/L6.2-return-trace.json +1 -0
- package/examples/export-retry-stop/run/evidence/manifest.jsonl +3 -0
- package/examples/export-retry-stop/run/filled-ui.md +3 -0
- package/examples/export-retry-stop/run/plan.md +35 -0
- package/examples/export-retry-stop/run/point-back.md +78 -0
- package/examples/export-retry-stop/run/spec.md +62 -0
- package/examples/export-upgrade/project/DESIGN.md +35 -0
- package/examples/export-upgrade/project/contract.json +95 -0
- package/examples/export-upgrade/project/decisions.jsonl +11 -0
- package/examples/export-upgrade/run/candidates/B.html +13 -0
- package/examples/export-upgrade/run/contract-bind.json +92 -0
- package/examples/export-upgrade/run/craft-guard.md +19 -0
- package/examples/export-upgrade/run/decision-report.md +97 -0
- package/examples/export-upgrade/run/design-baseline/state.json +22 -0
- package/examples/export-upgrade/run/evidence/L6.1-status-trace.json +8 -0
- package/examples/export-upgrade/run/evidence/L6.2-return-first.json +8 -0
- package/examples/export-upgrade/run/evidence/L6.2-return-trace.json +8 -0
- package/examples/export-upgrade/run/evidence/L6.3-done-entry.json +8 -0
- package/examples/export-upgrade/run/evidence/manifest.jsonl +3 -0
- package/examples/export-upgrade/run/plan.md +29 -0
- package/examples/export-upgrade/run/point-back.md +94 -0
- package/examples/export-upgrade/run/preview/confirm-round-1.json +15 -0
- package/examples/export-upgrade/run/preview/confirm-round-2.json +15 -0
- package/examples/export-upgrade/run/preview/decision-round-1.json +26 -0
- package/examples/export-upgrade/run/preview/decision-round-2.json +26 -0
- package/examples/export-upgrade/run/preview/round-1.html +12 -0
- package/examples/export-upgrade/run/preview/round-2.html +13 -0
- package/examples/export-upgrade/run/shaping/queue.json +13 -0
- package/examples/export-upgrade/run/shaping/shaping-log.jsonl +13 -0
- package/examples/export-upgrade/run/spec.md +67 -0
- package/examples/point-back-findings.md +4 -4
- package/examples/rules-governance/README.md +25 -0
- package/examples/rules-governance/rules-governance.jsonl +4 -0
- package/package.json +1 -1
- package/scripts/_diagnostics.py +26 -7
- package/scripts/dd_entries.py +402 -0
- package/scripts/escalation_signals.py +265 -0
- package/scripts/g10_design_decisions.py +977 -0
- package/scripts/g11_coverage.py +299 -0
- package/scripts/g12_tier_boundary.py +351 -0
- package/scripts/g1_spec.py +167 -1
- package/scripts/g2_g4_pointback.py +148 -5
- package/scripts/g8_run_registry.py +161 -0
- package/scripts/g9_shaping.py +245 -0
- package/scripts/interaction_dimensions.py +255 -0
- package/scripts/learning_candidates.py +252 -0
- package/scripts/method_semantics.py +240 -0
- package/scripts/repair_rounds.py +255 -0
- package/scripts/rules_governance.py +282 -0
- package/scripts/rules_registry.py +656 -0
- package/scripts/run_profile.py +128 -0
- package/scripts/run_status.py +228 -0
- package/scripts/shaping_log.py +182 -0
- package/scripts/test_verdict_syntax.py +1 -1
- package/scripts/validate_run.py +274 -3
- package/skills/craft-guard/SKILL.md +7 -2
- package/skills/craft-guard/references/detectors.md +12 -119
- package/skills/design-playbook/SKILL.md +19 -6
- package/skills/design-playbook/references/load-map.md +8 -0
- package/skills/design-playbook/references/rules.md +398 -0
- package/skills/ui-evaluator/SKILL.md +62 -19
- package/skills/ui-evaluator/references/repair.md +28 -0
- package/skills/ui-evaluator/references/rubric.md +1 -1
- package/skills/ui-picker/SKILL.md +13 -1
- package/skills/ui-picker/references/decisions.md +76 -0
- package/skills/ux-spec/SKILL.md +35 -16
- package/skills/ux-spec/references/spec-template.md +25 -3
package/commands/design-io.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Run Design I/O end-to-end (reference-intake? → spec? → plan
|
|
2
|
+
description: Run Design I/O end-to-end with run-profile tiering (P1/P2/P3) and the recirculate loop (reference-intake? → spec?/shaping? → plan → shell → preview* → fill → craft → accept)
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Run skill **design-playbook** in full. Honor each step’s completion criterion before the next. Recirculate blocking evaluator findings to the owning declaration. Entry routing and plan/preview orchestration live in that skill (not here).
|
package/commands/run-review.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Cross-run review of Design I/O runs — gate table + repeat blockers
|
|
2
|
+
description: Cross-run review of Design I/O runs — gate table + repeat blockers + rule candidate queue (derived, report-only)
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Cross-run **run review** over `.scratch/<run>/` dirs in the user project. Not a step of a single Design I/O run. Markdown only; report header **`run-review/v1`**.
|
|
@@ -13,8 +13,9 @@ Scan user-side `.scratch/<run>/` (not monorepo `dogfood/*` globs). **Include** o
|
|
|
13
13
|
1. **Inclusion manifest** first: `path | status` (`included` / `skipped` + reason). Note: hash match ≠ honest transcription of `observed`.
|
|
14
14
|
2. **Per-run table** — mandatory **run-path** column; other columns as needed; **gate** from real `validate_run.py` exit when the script is present (plugin install: `packages/design-playbook/scripts/validate_run.py` per run); else literal `not checked`. **Never** infer ok from "artifacts look complete".
|
|
15
15
|
3. **Repeat blockers** — pure frequency table `count | runs | observed text` (verbatim first-seen text). A **repeat blocker** is the same normalized `observed` text recurring across runs (**counting, not judging**). Rows only where ledger `result != pass`. Grouping key = `observed` **casefold + whitespace-collapsed**, then **char-for-char** equality only; `count ≥ 2`. Literal differences stay separate; optional `similar:` pointer line, never merge counts. **`_none_` is normal** when nothing qualifies (do not loosen normalization to manufacture repeats).
|
|
16
|
-
4. **
|
|
17
|
-
5.
|
|
16
|
+
4. **Rule candidate queue** (derived view, protocol — vNext S5) — derived from the point-back **findings** (not the ledger): group findings by normalized `issue` text (same normalization as repeat blockers), then a candidate enters the queue when **distinct runs ≥ 3 AND distinct task contexts ≥ 2 AND unexplained false positives = 0**. Task context per occurrence comes from the run's contract / spec / manifest method-semantics keys (user / task / environment / method) — **repeats with different contexts are never merged**; a corpus without readable contexts reports the context gap instead of qualifying. Show qualifying candidates (`candidate id | runs | contexts | occurrences`), plus below-threshold signals with their gap list (e.g. `distinct_runs 2 < 3`) — the queue reports distance to qualification, never silently drops it. **Report only**: candidates are never written back to the registry, the governance log, or the baseline; promotion is a user decision recorded in `<project>/rules-governance.jsonl` (append-only; agent may not write adjudication events).
|
|
17
|
+
5. **Point-back** cites: path + verbatim `observed:` quote; no line numbers.
|
|
18
|
+
6. Rollup numbers derived **row-by-row** from the tables above — no "overall it seems".
|
|
18
19
|
|
|
19
20
|
Ledger row shape: **ui-evaluator** step 2 (do not restate).
|
|
20
21
|
|
|
@@ -24,6 +25,7 @@ Ledger row shape: **ui-evaluator** step 2 (do not restate).
|
|
|
24
25
|
- no prose lessons / narrative "learning"
|
|
25
26
|
- no auto-writeback to baseline
|
|
26
27
|
- no semantic clustering of observed — verbatim grouping only
|
|
28
|
+
- no auto-promotion — candidates are reported, never written to the registry or governance log
|
|
27
29
|
```
|
|
28
30
|
|
|
29
31
|
Scope:
|
package/commands/ui-review.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Dual-track UI review emitting the six-block point-back report (ledger / findings / positives / coverage / limitations / verdict)
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Run skill **ui-evaluator** (pull craft-guard checks when AI slop/motion/loading is in scope). Output issue/source/fix/severity; blocking first.
|
package/commands/ux-spec.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Six-layer spec.md
|
|
2
|
+
description: Six-layer spec.md via the S0-S6 shaping session (question/assumption/confirmation batches + session artifacts); stop before UI shell/code
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Run skill **ux-spec** only. Emit complete `spec.md`. Do not pick templates or write UI.
|
package/examples/README.md
CHANGED
|
@@ -5,6 +5,10 @@ Self-authored samples for onboarding and dogfood. **Not** ports of any upstream
|
|
|
5
5
|
| File | Use |
|
|
6
6
|
| --- | --- |
|
|
7
7
|
| [ops-list-spec.md](ops-list-spec.md) | Minimal six-layer spec (ops delivery log) |
|
|
8
|
+
| [export-entry/](export-entry/) | P2 fixture run walkthrough: shaping session (S0-S6) + registry craft audit + six-block point-back with one Recirculate round; decision report carries R/C-tier DD entries (S2) |
|
|
9
|
+
| [export-upgrade/](export-upgrade/) | P3 fixture run walkthrough (S2; obligations completed in S6): E-tier DD entries with two preview confirmation rounds, provider candidate asset reference, R3 `dd:` challenge with supersedes revision + invalidated set, and baseline-drift stale review (keep exit); full-catalog craft audit + 10/10 sampling matrix |
|
|
10
|
+
| [dogfood/](dogfood/) | S6 dogfood fixture: a full P3 chain over this repo's own showcase queue surface (run-profile P3, shaping projection, E-tier DD with two preview rounds, R3 re-entry + one R4 repair, method-semantics manifest, full-catalog craft audit, 10/10 sampling matrix, verdict Pass) — static synthesized, no chromium |
|
|
11
|
+
| [rules-governance/](rules-governance/) | Paper governance-log walkthrough (S5): candidate opened from a 3-run / 2-context / 0-false-positive signal, then user promote -> advisory -> machine-enforced with the six criteria records |
|
|
8
12
|
| [settings-decision-report.md](settings-decision-report.md) | ui-picker decision report before code |
|
|
9
13
|
| [point-back-findings.md](point-back-findings.md) | evaluator output shape + recirculate |
|
|
10
14
|
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
# Composition
|
|
1
|
+
# Composition craft contrast cases
|
|
2
2
|
|
|
3
|
-
Authored worked cases for CRAFT-01 through CRAFT-05. Each case combines a rendered observation with independent source evidence. `
|
|
3
|
+
Authored worked cases for CRAFT-01 through CRAFT-05 against the registry. Each applicable case combines a rendered observation with independent source evidence. `Result` is the advisory audit outcome, not evaluator severity or verdict.
|
|
4
4
|
|
|
5
|
-
| Case | ID |
|
|
6
|
-
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
7
|
-
| competing-actions-hit | CRAFT-01 | hit | Header exposes Create, Import, and Export with equal filled emphasis | All three actions use primary Button variant | Spec names Create as main task; no equal-choice exception |
|
|
8
|
-
| equal-choice-clear | CRAFT-01 | clear | Two plan options receive equal weight in a deliberate comparison | Shared selectable-card primitive applies same selected affordance | Spec requires neutral side-by-side choice before Continue |
|
|
9
|
-
| queue-card-wall-hit | CRAFT-02 | hit | Twelve equal cards make status and owner hard to compare | Queue records map directly to Card wrappers | Records are operational rows, not independent browse objects |
|
|
10
|
-
| card-collection-clear | CRAFT-02 | clear | Gallery cards represent independent templates with image, owner, and open action | TemplateCard owns preview and item-level interaction | Browsable independent objects fit card semantics |
|
|
11
|
-
| nested-panels-hit | CRAFT-03 | hit | Page section floats as a shadowed card containing three more bordered cards | Card wraps section and nested Cards provide spacing only | No modal, tool, or repeated-item semantics justify frames |
|
|
12
|
-
| drawer-tool-clear | CRAFT-03 | clear | Unframed page contains one bounded detail drawer | Drawer primitive owns focus and dismiss behavior; no nested Card | Detail drawer is a genuine framed tool |
|
|
13
|
-
| blue-everywhere-hit | CRAFT-04 | hit | Canvas, surfaces, actions, charts, and state badges use blue variants | Single blue ramp fills surface, action, success, and selected roles | No verified monochrome baseline or semantic role separation |
|
|
14
|
-
| semantic-color-clear | CRAFT-04 | clear | Neutral surfaces dominate; cyan marks selection, amber warning, red failure | Tokens map each semantic role independently | Brand accent remains selective and states stay distinguishable |
|
|
15
|
-
| pill-everything-hit | CRAFT-05 | hit | Tabs, buttons, fields, filters, and section labels all use pill silhouettes | Global radius-full token applies across unrelated controls | No baseline or semantic grouping justifies uniform pill geometry |
|
|
16
|
-
| status-pill-clear | CRAFT-05 | clear | Compact pills appear only for status and removable filter chips | Badge and Chip primitives use pill shape; buttons use restrained radius | Shape communicates status/grouping and is not page-wide |
|
|
5
|
+
| Case | ID@ver | Applicability | Predicate reason / missing proof | Result | Rendered evidence | Source evidence | Exception check | Positive fix |
|
|
6
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
7
|
+
| competing-actions-hit | CRAFT-01@1 | applicable | - | hit | Header exposes Create, Import, and Export with equal filled emphasis | All three actions use primary Button variant | Spec names Create as main task; no equal-choice exception | Keep Create primary and group Import/Export as secondary actions |
|
|
8
|
+
| equal-choice-clear | CRAFT-01@1 | applicable | - | clear | Two plan options receive equal weight in a deliberate comparison | Shared selectable-card primitive applies same selected affordance | Spec requires neutral side-by-side choice before Continue | - |
|
|
9
|
+
| queue-card-wall-hit | CRAFT-02@1 | applicable | - | hit | Twelve equal cards make status and owner hard to compare | Queue records map directly to Card wrappers | Records are operational rows, not independent browse objects | Replace card wall with table/list and stable comparison columns |
|
|
10
|
+
| card-collection-clear | CRAFT-02@1 | applicable | - | clear | Gallery cards represent independent templates with image, owner, and open action | TemplateCard owns preview and item-level interaction | Browsable independent objects fit card semantics | - |
|
|
11
|
+
| nested-panels-hit | CRAFT-03@1 | applicable | - | hit | Page section floats as a shadowed card containing three more bordered cards | Card wraps section and nested Cards provide spacing only | No modal, tool, or repeated-item semantics justify frames | Flatten section, group with spacing/dividers, retain frame only for tool |
|
|
12
|
+
| drawer-tool-clear | CRAFT-03@1 | applicable | - | clear | Unframed page contains one bounded detail drawer | Drawer primitive owns focus and dismiss behavior; no nested Card | Detail drawer is a genuine framed tool | - |
|
|
13
|
+
| blue-everywhere-hit | CRAFT-04@1 | applicable | - | hit | Canvas, surfaces, actions, charts, and state badges use blue variants | Single blue ramp fills surface, action, success, and selected roles | No verified monochrome baseline or semantic role separation | Restore neutral surfaces and assign distinct semantic state roles |
|
|
14
|
+
| semantic-color-clear | CRAFT-04@1 | applicable | - | clear | Neutral surfaces dominate; cyan marks selection, amber warning, red failure | Tokens map each semantic role independently | Brand accent remains selective and states stay distinguishable | - |
|
|
15
|
+
| pill-everything-hit | CRAFT-05@1 | applicable | - | hit | Tabs, buttons, fields, filters, and section labels all use pill silhouettes | Global radius-full token applies across unrelated controls | No baseline or semantic grouping justifies uniform pill geometry | Restore control-specific shapes and reserve pills for compact tags |
|
|
16
|
+
| status-pill-clear | CRAFT-05@1 | applicable | - | clear | Compact pills appear only for status and removable filter chips | Badge and Chip primitives use pill shape; buttons use restrained radius | Shape communicates status/grouping and is not page-wide | - |
|
|
17
|
+
| static-hero-not-applicable | CRAFT-01@1 | not-applicable | Planning-only review of a static hero composition; no Fill output with claimable primary action is in scope | - | - | - | No Fill surface to walk | - |
|
|
18
|
+
| source-map-blocked | CRAFT-03@1 | blocked | Container nesting source map was not included in review input; rendered layer alone cannot decide framing semantics | - | Rendered shows two nested framed surfaces; nesting intent unclear | Source nesting map absent from review input | No exception can be checked without source | Include the container nesting map in review input before complete craft Pass |
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Existing-brand baseline contrast
|
|
2
2
|
|
|
3
|
+
Worked fixture for registry audit rows against a verified project baseline. Registry entries are evaluated in seven-column form; generic registry outcomes never override a verified baseline, and safety or explicit declarations override baseline consistency.
|
|
4
|
+
|
|
3
5
|
## Verified baseline exception
|
|
4
6
|
|
|
5
7
|
- Detector: CRAFT-05
|
|
@@ -20,3 +22,12 @@
|
|
|
20
22
|
- Override disposition: hit
|
|
21
23
|
- Reason: safety, usability, and explicit dangerous-action declarations override baseline consistency.
|
|
22
24
|
- Positive fix: retain baseline icon treatment for ordinary tools, but use explicit destructive text and confirmation for account deletion.
|
|
25
|
+
|
|
26
|
+
## Craft audit
|
|
27
|
+
|
|
28
|
+
| ID@ver | Applicability | Predicate reason / missing proof | Result | Rendered evidence | Source evidence | Exception check | Positive fix |
|
|
29
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
30
|
+
| CRAFT-05@1 | applicable | - | clear | Pill silhouette is consistent, sparse, and does not obscure control state | Confirmed project radius token and shared primitives apply the geometry consistently | Verified baseline: capsule geometry is a first-party brand convention; binding status is `ready` | - |
|
|
31
|
+
| CRAFT-07@1 | applicable | - | hit | Destructive action has no text, consequence, or confirmation cue | IconButton invokes deletion directly without confirmation Dialog | safety, usability, and explicit dangerous-action declarations override baseline consistency | Retain baseline icon treatment for ordinary tools, but use explicit destructive text and confirmation for account deletion |
|
|
32
|
+
| CRAFT-08@1 | not-applicable | Audited brand surfaces declare no motion; static brand audit has no motion face in scope | - | - | - | No motion face to check | - |
|
|
33
|
+
| CRAFT-06@1 | blocked | Dense-container type token map was not included in the brand audit input | - | Rendered heading observed at brand display scale | Type token map absent from review input | No exception can be checked without source | Include the type token map in review input before complete craft Pass |
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
# Landing and product
|
|
1
|
+
# Landing and product craft contrast cases
|
|
2
2
|
|
|
3
|
-
Authored worked cases for CRAFT-06 through CRAFT-08. Each result is advisory and leaves declaration mapping, severity, and verdict to `ui-evaluator`.
|
|
3
|
+
Authored worked cases for CRAFT-06 through CRAFT-08 against the registry. Each applicable result is advisory and leaves declaration mapping, severity, and verdict to `ui-evaluator`.
|
|
4
4
|
|
|
5
|
-
| Case | ID |
|
|
6
|
-
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
7
|
-
| dashboard-display-type-hit | CRAFT-06 | hit | Compact metrics panel uses 72px heading that crowds values below | Panel heading references display-hero token | Surface is an operational panel, not a literal hero |
|
|
8
|
-
| product-hero-clear | CRAFT-06 | clear | Product name leads first viewport while next section remains visible | H1 uses display token within bounded responsive hero | Literal product hero warrants display scale and text fits target viewports |
|
|
9
|
-
| verbose-toolbar-hit | CRAFT-07 | hit | Toolbar repeats Undo, Redo, Save, Zoom in, and Zoom out as wide text pills | Generic Button renders familiar tool actions despite icon library availability | Actions are familiar and low-risk; accessible icon labels are possible |
|
|
10
|
-
| destructive-text-clear | CRAFT-07 | clear | Delete workspace remains an explicit text action with consequence copy | Destructive Button opens confirmation Dialog | High-risk action benefits from explicit language |
|
|
11
|
-
| looping-decoration-hit | CRAFT-08 | hit | CTA badge bounces continuously without state change | Infinite keyframes animate translateY and ignore reduced-motion | No game or immersive intent is declared |
|
|
12
|
-
| state-transition-clear | CRAFT-08 | clear | Saved indicator fades in after persistence and stays stable | 160ms opacity transition follows saved state and reduced-motion disables it | Motion explains persistence completion |
|
|
5
|
+
| Case | ID@ver | Applicability | Predicate reason / missing proof | Result | Rendered evidence | Source evidence | Exception check | Positive fix |
|
|
6
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
7
|
+
| dashboard-display-type-hit | CRAFT-06@1 | applicable | - | hit | Compact metrics panel uses 72px heading that crowds values below | Panel heading references display-hero token | Surface is an operational panel, not a literal hero | Use panel title role and preserve hierarchy through grouping and weight |
|
|
8
|
+
| product-hero-clear | CRAFT-06@1 | applicable | - | clear | Product name leads first viewport while next section remains visible | H1 uses display token within bounded responsive hero | Literal product hero warrants display scale and text fits target viewports | - |
|
|
9
|
+
| verbose-toolbar-hit | CRAFT-07@1 | applicable | - | hit | Toolbar repeats Undo, Redo, Save, Zoom in, and Zoom out as wide text pills | Generic Button renders familiar tool actions despite icon library availability | Actions are familiar and low-risk; accessible icon labels are possible | Use icon buttons with accessible names and tooltips; keep text for ambiguous commands |
|
|
10
|
+
| destructive-text-clear | CRAFT-07@1 | applicable | - | clear | Delete workspace remains an explicit text action with consequence copy | Destructive Button opens confirmation Dialog | High-risk action benefits from explicit language | - |
|
|
11
|
+
| looping-decoration-hit | CRAFT-08@1 | applicable | - | hit | CTA badge bounces continuously without state change | Infinite keyframes animate translateY and ignore reduced-motion | No game or immersive intent is declared | Remove loop and use short transform/opacity feedback only for a named state change |
|
|
12
|
+
| state-transition-clear | CRAFT-08@1 | applicable | - | clear | Saved indicator fades in after persistence and stays stable | 160ms opacity transition follows saved state and reduced-motion disables it | Motion explains persistence completion | - |
|
|
13
|
+
| plain-docs-not-applicable | CRAFT-07@1 | not-applicable | Static documentation page under review declares no repeated operation surface; no toolbar or high-frequency action face is in scope | - | - | - | No repeated-operation face to check | - |
|
|
14
|
+
| motion-source-blocked | CRAFT-08@1 | blocked | Motion implementation source was not included in review input for this case; transition purpose and reduced-motion handling cannot be decided | - | Rendered shows an entrance transition on the pricing section | Motion source absent from review input | No exception can be checked without source | Provide the motion source before complete craft Pass |
|
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
# SaaS dashboard
|
|
1
|
+
# SaaS dashboard craft audit
|
|
2
2
|
|
|
3
|
-
Worked fixture for
|
|
3
|
+
Worked fixture for the seven-column registry audit format. Rendered and source descriptions are independent authored observations, not validator-generated expectations.
|
|
4
4
|
|
|
5
5
|
## Input
|
|
6
6
|
|
|
7
7
|
- Rendered surface: desktop operations dashboard at 1440 x 900.
|
|
8
8
|
- Source surface: React page using shared Button, Table, Card, Badge, and motion tokens.
|
|
9
9
|
- Baseline: none.
|
|
10
|
+
- Registry: `skills/design-playbook/references/rules.md`, full catalog enabled (no contract subset declared).
|
|
10
11
|
|
|
11
|
-
##
|
|
12
|
+
## Craft audit
|
|
12
13
|
|
|
13
|
-
| ID |
|
|
14
|
-
| --- | --- | --- | --- | --- | --- |
|
|
15
|
-
| CRAFT-01 | hit | Header has three equally filled primary actions | Three Button instances use `variant="primary"` | No equal-choice flow in spec | Keep Create run primary; move Import and Export to secondary/menu actions |
|
|
16
|
-
| CRAFT-02 | hit | Twelve equal cards hide queue comparison | Queue records map directly to Card wrappers | Records are comparable operational rows, not independent browse objects | Use a table/list with stable columns and one framed detail tool |
|
|
17
|
-
| CRAFT-03 | clear | Page bands are unframed; detail drawer alone is framed | Card is not nested and Drawer owns detail | Drawer is a genuine framed tool | - |
|
|
18
|
-
| CRAFT-04 | clear | Neutral surfaces carry most area; amber and red have named state roles | Semantic tokens map warning and failure independently | No monochrome exception needed | - |
|
|
19
|
-
| CRAFT-05 |
|
|
20
|
-
| CRAFT-06 | clear | Panel headings fit dense dashboard hierarchy | Display type token is absent inside panels | No hero context claimed | - |
|
|
21
|
-
| CRAFT-07 | clear | Refresh and close use named icon buttons; destructive action keeps text | IconButton has accessible labels and destructive Button remains explicit | High-risk action needs text | - |
|
|
22
|
-
| CRAFT-08 | blocked |
|
|
14
|
+
| ID@ver | Applicability | Predicate reason / missing proof | Result | Rendered evidence | Source evidence | Exception check | Positive fix |
|
|
15
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
16
|
+
| CRAFT-01@1 | applicable | - | hit | Header has three equally filled primary actions | Three Button instances use `variant="primary"` | No equal-choice flow in spec | Keep Create run primary; move Import and Export to secondary/menu actions |
|
|
17
|
+
| CRAFT-02@1 | applicable | - | hit | Twelve equal cards hide queue comparison | Queue records map directly to Card wrappers | Records are comparable operational rows, not independent browse objects | Use a table/list with stable columns and one framed detail tool |
|
|
18
|
+
| CRAFT-03@1 | applicable | - | clear | Page bands are unframed; detail drawer alone is framed | Card is not nested and Drawer owns detail | Drawer is a genuine framed tool | - |
|
|
19
|
+
| CRAFT-04@1 | applicable | - | clear | Neutral surfaces carry most area; amber and red have named state roles | Semantic tokens map warning and failure independently | No monochrome exception needed | - |
|
|
20
|
+
| CRAFT-05@1 | not-applicable | Surface declares one restrained standard control radius in design tokens; no pill or shape-geometry variation face is in scope | - | - | - | No geometry face to check | - |
|
|
21
|
+
| CRAFT-06@1 | applicable | - | clear | Panel headings fit dense dashboard hierarchy | Display type token is absent inside panels | No hero context claimed | - |
|
|
22
|
+
| CRAFT-07@1 | applicable | - | clear | Refresh and close use named icon buttons; destructive action keeps text | IconButton has accessible labels and destructive Button remains explicit | High-risk action needs text | - |
|
|
23
|
+
| CRAFT-08@1 | blocked | Motion source was not included in review input; static capture cannot prove transition purpose or reduced-motion behavior | - | Static capture shows a CTA badge mid-animation | Motion source absent from review input | No exception can be checked without source | Provide motion source and interaction trace before complete craft Pass |
|
|
23
24
|
|
|
24
25
|
## Expected contract observations
|
|
25
26
|
|
|
26
|
-
- All eight
|
|
27
|
-
-
|
|
27
|
+
- All eight registry craft IDs appear exactly once with pinned versions.
|
|
28
|
+
- The ledger demonstrates `applicable` rows with `hit` and `clear`, one `not-applicable` row carrying an observable reason, and one `blocked` row naming its missing proof.
|
|
28
29
|
- Hit rows carry rendered evidence, source evidence, exception check, and positive fix.
|
|
29
30
|
- No row assigns declaration source, severity, or verdict.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Dogfood — S6 P3 全量档(本仓库自身 UI 面)
|
|
2
|
+
|
|
3
|
+
S6 dogfood fixture(vNext 切片 6,工单 #41):对本仓库自己的 showcase UI 面——SwarSight
|
|
4
|
+
模拟运行队列监控页([`../../showcase/01-spec.md`](../../showcase/01-spec.md) 的运行面)——
|
|
5
|
+
跑一次 **P3 全量档全链**的静态工件集。
|
|
6
|
+
|
|
7
|
+
- 场景:把队列监控页升级为「全局模拟运行中心」第一步——修订既有 decided `l1.goal`
|
|
8
|
+
(supersedes)+ region 构成变更(顶栏计数 → 全局运行控制台),命中 E 档判据 2 → P3。
|
|
9
|
+
- 全链义务:spec 契约投影(成形会话 S0-S6 + G9)、run-profile P3、E 档 DD 条目两轮
|
|
10
|
+
preview 确认(G5/G10)、R3 重入(DD supersedes)+ 一条 R4 回流、方法语义证据
|
|
11
|
+
(manifest 五键)、注册表适用谓词全目录求值(G8 run 级,13 行)、五态×页面采样矩阵
|
|
12
|
+
完整执行(G11 S6 面:P3 档矩阵块强制)、六块报告 + invalidated 失效集、verdict Pass。
|
|
13
|
+
- 性质:**静态合成**(synthesized walkthrough)——工件的证据/哈希/事务记录为演示值,
|
|
14
|
+
不依赖 chromium 与任何 provider 运行时;机器面由 `validate_run.py` 全量消费
|
|
15
|
+
(见 `tests/test_vnext_s6.py` 的 dogfood 走查)。
|
|
16
|
+
|
|
17
|
+
## 走查要点(LR0-LR10)
|
|
18
|
+
|
|
19
|
+
| 环节 | 工件 | 门禁 |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| LR1 定档 | `run/plan.md` run-profile 块(tier P3) | — |
|
|
22
|
+
| LR2 成形 | `run/shaping/shaping-log.jsonl` + `queue.json`;投影 D-0008..D-0011 | G9 + G1 + G7 |
|
|
23
|
+
| LR3 决策 | `run/decision-report.md` DD-0001(E 档,后被 R3 挑战)/ DD-0002(supersedes 修订) | G10 |
|
|
24
|
+
| LR4 预览 | `run/preview/` 两轮 decision/confirm 事务(round-1 选 B;round-2 修订后再确认 B2) | G5 |
|
|
25
|
+
| LR5 实现 | `run/filled-ui.md`(round-2 修订触发 Re-Fill) | — |
|
|
26
|
+
| LR6 工艺 | `run/craft-guard.md`(注册表 13 条全求值) | G8 run 级 |
|
|
27
|
+
| LR7 证据 | `run/evidence/manifest.jsonl`(方法语义五键;首轮失效证据 r2 重采) | G6 |
|
|
28
|
+
| LR8 评审 | `run/point-back.md` 六块 + 采样矩阵 10/10 全采样 | G2/G11 |
|
|
29
|
+
| LR9 回流 | R3(dd: DD-0001 → DD-0002 supersedes)+ R4(暂停按钮可访问名)→ 失效集重评 | 轮次/G4 |
|
|
30
|
+
| LR10 终局 | verdict Pass;基线漂移三出口「保持」复核 | G3/G12 |
|
|
31
|
+
|
|
32
|
+
## 校验命令
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
python packages/design-playbook/scripts/validate_run.py \
|
|
36
|
+
packages/design-playbook/examples/dogfood/run/spec.md \
|
|
37
|
+
packages/design-playbook/examples/dogfood/run/point-back.md \
|
|
38
|
+
--preview-dir packages/design-playbook/examples/dogfood/run/preview \
|
|
39
|
+
--decision-report packages/design-playbook/examples/dogfood/run/decision-report.md \
|
|
40
|
+
--evidence-dir packages/design-playbook/examples/dogfood/run/evidence \
|
|
41
|
+
--run-root packages/design-playbook/examples/dogfood/run \
|
|
42
|
+
--contract-project packages/design-playbook/examples/dogfood/project \
|
|
43
|
+
--contract-run packages/design-playbook/examples/dogfood/run \
|
|
44
|
+
--shaping-dir packages/design-playbook/examples/dogfood/run/shaping \
|
|
45
|
+
--strict
|
|
46
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SwarSight — DESIGN.md(dogfood 项目基线,静态合成)
|
|
2
|
+
|
|
3
|
+
Provenance: observed(showcase 演示面提炼;本轮 P3 升级前绑定)。
|
|
4
|
+
|
|
5
|
+
## 布局段(layout conventions)
|
|
6
|
+
|
|
7
|
+
- 工作台骨架:顶栏全局操作 + 主工作区;顶栏不承载任务级数据。
|
|
8
|
+
- 主列表区:可比较表格(行记录),等权卡片墙仅用于画廊型内容。
|
|
9
|
+
- 分区无框:页面分区靠间距与字重;有界容器仅用于对话框与抽屉。
|
|
10
|
+
- 中性面主导;语义色仅作状态命名(成功/警告/失败),不作装饰。
|
|
11
|
+
- 控件几何各自特定(按钮/输入/复选不共享统一胶囊半径)。
|
|
12
|
+
- 紧凑控制台层级用结构与字重表达,不引入 display 级大字号。
|
|
13
|
+
- 动效仅用于状态反馈(进入/退出/进行中),永不用于装饰。
|
|
14
|
+
|
|
15
|
+
## 反馈段
|
|
16
|
+
|
|
17
|
+
- 进行中动作:入口 busy + 禁重复;页面级通知用 toast(含可访问名称与 role)。
|
|
18
|
+
- 空态:非白屏空态 + 下一步 CTA;加载态优先条目级进度。
|
|
19
|
+
|
|
20
|
+
## 命名段
|
|
21
|
+
|
|
22
|
+
- 运行状态枚举:queued / running / paused / failed / completed / aborted / timeout。
|
|
23
|
+
- 批量操作条:选中后浮现;破坏性动作保留显式文字。
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"changelog": [
|
|
4
|
+
{
|
|
5
|
+
"at": "2026-08-14T08:35:00Z",
|
|
6
|
+
"summary": "showcase main run projection (queue monitoring)"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"at": "2026-08-14T09:14:00Z",
|
|
10
|
+
"summary": "P3 dogfood projection: l1.goal supersedes D-0001 via D-0008; adds l6.c4-c6; stages sim.control_scope"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"fields": {
|
|
14
|
+
"l1.goal": {
|
|
15
|
+
"provenance": "observed",
|
|
16
|
+
"resolution": "decided",
|
|
17
|
+
"value": "把队列监控页升级为全局模拟运行中心的第一步——运行状态跨页可查、全局控制可用、失败可批量治理"
|
|
18
|
+
},
|
|
19
|
+
"l1.target_user": {
|
|
20
|
+
"provenance": "observed",
|
|
21
|
+
"resolution": "decided",
|
|
22
|
+
"value": "运维分析师、场景设计者"
|
|
23
|
+
},
|
|
24
|
+
"l1.non_goals": {
|
|
25
|
+
"provenance": "observed",
|
|
26
|
+
"resolution": "decided",
|
|
27
|
+
"value": "不在此编辑场景;不承载完整决策审计(在 Workbench)"
|
|
28
|
+
},
|
|
29
|
+
"l1.scenes": {
|
|
30
|
+
"provenance": "inferred",
|
|
31
|
+
"resolution": "assumed",
|
|
32
|
+
"value": "日常监控在跑模拟 + 失败批量重试 + 资源异常定位",
|
|
33
|
+
"notes": "理由:场景清单延续 showcase 主 run;回退:仅日常监控。"
|
|
34
|
+
},
|
|
35
|
+
"l2.entry_choice": {
|
|
36
|
+
"provenance": "observed",
|
|
37
|
+
"resolution": "decided",
|
|
38
|
+
"value": "顶栏计数 + 主列表 + 侧区趋势(既有三段布局)"
|
|
39
|
+
},
|
|
40
|
+
"l6.c1": {
|
|
41
|
+
"provenance": "observed",
|
|
42
|
+
"resolution": "decided",
|
|
43
|
+
"value": "Given 运维打开队列监控 When 查看运行列表 Then 每条模拟运行呈现状态、场景名、耗时与资源占用(证据:交互记录)"
|
|
44
|
+
},
|
|
45
|
+
"l6.c2": {
|
|
46
|
+
"provenance": "observed",
|
|
47
|
+
"resolution": "decided",
|
|
48
|
+
"value": "Given 存在失败运行 When 选中失败条目触发批量重试 Then 重试入队且条目状态转为 queued(证据:交互记录)"
|
|
49
|
+
},
|
|
50
|
+
"l6.c3": {
|
|
51
|
+
"provenance": "observed",
|
|
52
|
+
"resolution": "decided",
|
|
53
|
+
"value": "Given 运行超时 When 选择重试或中止 Then 对应动作执行且状态迁移可见(证据:交互记录)"
|
|
54
|
+
},
|
|
55
|
+
"l6.c4": {
|
|
56
|
+
"provenance": "observed",
|
|
57
|
+
"resolution": "decided",
|
|
58
|
+
"value": "Given 模拟运行进行中 When 离开并返回队列页 Then 全局控制台运行 feed 恢复显示且状态可续读(证据:交互记录)"
|
|
59
|
+
},
|
|
60
|
+
"l6.c5": {
|
|
61
|
+
"provenance": "observed",
|
|
62
|
+
"resolution": "decided",
|
|
63
|
+
"value": "Given 多运行并发 When 在全局控制台触发全局暂停 Then 进行中运行进入 paused 且控制台持续反馈(证据:交互记录)"
|
|
64
|
+
},
|
|
65
|
+
"l6.c6": {
|
|
66
|
+
"provenance": "observed",
|
|
67
|
+
"resolution": "decided",
|
|
68
|
+
"value": "Given 控制台 feed 达到上限 When 新运行入队 Then 最旧完成条目让位且失败项不静默丢失(证据:交互记录)"
|
|
69
|
+
},
|
|
70
|
+
"sim.max_parallel": {
|
|
71
|
+
"provenance": "inferred",
|
|
72
|
+
"resolution": "assumed",
|
|
73
|
+
"value": 8,
|
|
74
|
+
"notes": "理由:并发上限延续平台默认;回退:4。"
|
|
75
|
+
},
|
|
76
|
+
"sim.control_scope": {
|
|
77
|
+
"provenance": "inferred",
|
|
78
|
+
"resolution": "assumed",
|
|
79
|
+
"value": "全局暂停/恢复不作用于手动单次重试",
|
|
80
|
+
"notes": "理由:控制范围未答;风险:误伤手动重试;回退:全局暂停覆盖全部。"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{"confirmed_at": "2026-08-14T08:30:00Z", "decision": "查看所有模拟运行的实时状态、失败重试与资源占用的队列监控页", "field": "l1.goal", "id": "D-0001", "rationale": "showcase 主 run 用户确认的监控页目标"}
|
|
2
|
+
{"confirmed_at": "2026-08-14T08:30:00Z", "decision": "运维分析师、场景设计者", "field": "l1.target_user", "id": "D-0002", "rationale": "showcase 主 run L1 确认"}
|
|
3
|
+
{"confirmed_at": "2026-08-14T08:30:00Z", "decision": "不在此编辑场景;不承载完整决策审计(在 Workbench)", "field": "l1.non_goals", "id": "D-0003", "rationale": "showcase 主 run 非目标确认"}
|
|
4
|
+
{"confirmed_at": "2026-08-14T08:31:00Z", "decision": "Given 运维打开队列监控 When 查看运行列表 Then 每条模拟运行呈现状态、场景名、耗时与资源占用(证据:交互记录)", "field": "l6.c1", "id": "D-0004", "rationale": "showcase 主 run L6 确认"}
|
|
5
|
+
{"confirmed_at": "2026-08-14T08:31:00Z", "decision": "Given 存在失败运行 When 选中失败条目触发批量重试 Then 重试入队且条目状态转为 queued(证据:交互记录)", "field": "l6.c2", "id": "D-0005", "rationale": "showcase 主 run L6 确认"}
|
|
6
|
+
{"confirmed_at": "2026-08-14T08:31:00Z", "decision": "Given 运行超时 When 选择重试或中止 Then 对应动作执行且状态迁移可见(证据:交互记录)", "field": "l6.c3", "id": "D-0006", "rationale": "showcase 主 run L6 确认"}
|
|
7
|
+
{"confirmed_at": "2026-08-14T08:32:00Z", "decision": "顶栏计数 + 主列表 + 侧区趋势(既有三段布局)", "field": "l2.entry_choice", "id": "D-0007", "rationale": "showcase 主 run 布局取舍"}
|
|
8
|
+
{"confirmed_at": "2026-08-14T09:12:00Z", "decision": "把队列监控页升级为全局模拟运行中心的第一步——运行状态跨页可查、全局控制可用、失败可批量治理", "field": "l1.goal", "id": "D-0008", "supersedes": "D-0001", "rationale": "P3 升级:运行中心第一步(CP-A 确认,supersedes D-0001)"}
|
|
9
|
+
{"confirmed_at": "2026-08-14T09:12:00Z", "decision": "Given 模拟运行进行中 When 离开并返回队列页 Then 全局控制台运行 feed 恢复显示且状态可续读(证据:交互记录)", "field": "l6.c4", "id": "D-0009", "rationale": "CP-A 确认(feed 跨页续读)"}
|
|
10
|
+
{"confirmed_at": "2026-08-14T09:12:00Z", "decision": "Given 多运行并发 When 在全局控制台触发全局暂停 Then 进行中运行进入 paused 且控制台持续反馈(证据:交互记录)", "field": "l6.c5", "id": "D-0010", "rationale": "CP-A 确认(全局暂停反馈)"}
|
|
11
|
+
{"confirmed_at": "2026-08-14T09:12:00Z", "decision": "Given 控制台 feed 达到上限 When 新运行入队 Then 最旧完成条目让位且失败项不静默丢失(证据:交互记录)", "field": "l6.c6", "id": "D-0011", "rationale": "CP-A 确认(feed 上限治理)"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head><meta charset="utf-8"><title>candidate B — global run console region (sketch)</title></head>
|
|
4
|
+
<body>
|
|
5
|
+
<!-- provider-adapter sketch (fidelity: sketch); referenced by DD-0001 candidate B -->
|
|
6
|
+
<main>
|
|
7
|
+
<section aria-label="全局运行控制台">
|
|
8
|
+
<header>
|
|
9
|
+
<span>运行中 3</span><span>已暂停 1</span><span>失败 2</span>
|
|
10
|
+
<button type="button" aria-label="全局暂停所有进行中模拟">全局暂停</button>
|
|
11
|
+
<button type="button" aria-label="恢复已暂停的模拟">恢复</button>
|
|
12
|
+
</header>
|
|
13
|
+
<ul aria-label="运行 feed(跨页保持)">
|
|
14
|
+
<li>sim-0042 · running · 62%</li>
|
|
15
|
+
<li>sim-0041 · completed · 结果入口</li>
|
|
16
|
+
<li>sim-0039 · failed · 重试</li>
|
|
17
|
+
</ul>
|
|
18
|
+
</section>
|
|
19
|
+
<section aria-label="运行列表">
|
|
20
|
+
<table>
|
|
21
|
+
<caption>模拟运行列表</caption>
|
|
22
|
+
</table>
|
|
23
|
+
</section>
|
|
24
|
+
</main>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"ok": true,
|
|
4
|
+
"open_fields": [],
|
|
5
|
+
"stale_fields": [],
|
|
6
|
+
"blockers": [],
|
|
7
|
+
"assumed_fields": [
|
|
8
|
+
"l1.scenes",
|
|
9
|
+
"sim.control_scope",
|
|
10
|
+
"sim.max_parallel"
|
|
11
|
+
],
|
|
12
|
+
"bound_contract": {
|
|
13
|
+
"schemaVersion": 1,
|
|
14
|
+
"changelog": [
|
|
15
|
+
{
|
|
16
|
+
"at": "2026-08-14T08:35:00Z",
|
|
17
|
+
"summary": "showcase main run projection (queue monitoring)"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"fields": {
|
|
21
|
+
"l1.goal": {
|
|
22
|
+
"provenance": "observed",
|
|
23
|
+
"resolution": "decided",
|
|
24
|
+
"value": "查看所有模拟运行的实时状态、失败重试与资源占用的队列监控页"
|
|
25
|
+
},
|
|
26
|
+
"l1.target_user": {
|
|
27
|
+
"provenance": "observed",
|
|
28
|
+
"resolution": "decided",
|
|
29
|
+
"value": "运维分析师、场景设计者"
|
|
30
|
+
},
|
|
31
|
+
"l1.non_goals": {
|
|
32
|
+
"provenance": "observed",
|
|
33
|
+
"resolution": "decided",
|
|
34
|
+
"value": "不在此编辑场景;不承载完整决策审计(在 Workbench)"
|
|
35
|
+
},
|
|
36
|
+
"l1.scenes": {
|
|
37
|
+
"provenance": "inferred",
|
|
38
|
+
"resolution": "assumed",
|
|
39
|
+
"value": "日常监控在跑模拟 + 失败批量重试 + 资源异常定位",
|
|
40
|
+
"notes": "理由:场景清单延续 showcase 主 run;回退:仅日常监控。"
|
|
41
|
+
},
|
|
42
|
+
"l2.entry_choice": {
|
|
43
|
+
"provenance": "observed",
|
|
44
|
+
"resolution": "decided",
|
|
45
|
+
"value": "顶栏计数 + 主列表 + 侧区趋势(既有三段布局)"
|
|
46
|
+
},
|
|
47
|
+
"l6.c1": {
|
|
48
|
+
"provenance": "observed",
|
|
49
|
+
"resolution": "decided",
|
|
50
|
+
"value": "Given 运维打开队列监控 When 查看运行列表 Then 每条模拟运行呈现状态、场景名、耗时与资源占用(证据:交互记录)"
|
|
51
|
+
},
|
|
52
|
+
"l6.c2": {
|
|
53
|
+
"provenance": "observed",
|
|
54
|
+
"resolution": "decided",
|
|
55
|
+
"value": "Given 存在失败运行 When 选中失败条目触发批量重试 Then 重试入队且条目状态转为 queued(证据:交互记录)"
|
|
56
|
+
},
|
|
57
|
+
"l6.c3": {
|
|
58
|
+
"provenance": "observed",
|
|
59
|
+
"resolution": "decided",
|
|
60
|
+
"value": "Given 运行超时 When 选择重试或中止 Then 对应动作执行且状态迁移可见(证据:交互记录)"
|
|
61
|
+
},
|
|
62
|
+
"sim.max_parallel": {
|
|
63
|
+
"provenance": "inferred",
|
|
64
|
+
"resolution": "assumed",
|
|
65
|
+
"value": 8,
|
|
66
|
+
"notes": "理由:并发上限延续平台默认;回退:4。"
|
|
67
|
+
},
|
|
68
|
+
"sim.control_scope": {
|
|
69
|
+
"provenance": "inferred",
|
|
70
|
+
"resolution": "assumed",
|
|
71
|
+
"value": "全局暂停/恢复不作用于手动单次重试",
|
|
72
|
+
"notes": "理由:控制范围未答;风险:误伤手动重试;回退:全局暂停覆盖全部。"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"contract_sha": "4a11c0ffee51b7d2c93a1e0f6d8e7b5c9420ad1f3e5b7c9d1a2f4e6b8c0d2a4f",
|
|
77
|
+
"decision_log_sha": "6b22d1eef62c8e3da4fb2f1a7c9f8d6e5314be2c4d6f8a0b2c4e6d8f0a2b4c6e"
|
|
78
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Craft audit (队列监控升级 — P3 全量档 dogfood)
|
|
2
|
+
|
|
3
|
+
Registry: `skills/design-playbook/references/rules.md`, full catalog (P3 run: 适用谓词全求值). Seven-column rows; applicability predicates evaluated per entry. 横切五条目同步求值(a11y/resp/perf applicable;i18n/sec not-applicable 附理由)。
|
|
4
|
+
|
|
5
|
+
| ID@ver | Applicability | Predicate reason / missing proof | Result | Rendered evidence | Source evidence | Exception check | Positive fix |
|
|
6
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
7
|
+
| CRAFT-01@1 | applicable | - | clear | 主列表与控制台不并置第二主行动;全局暂停为控制台治理动作而非页面主行动 | 仅批量重试在操作条使用 primary 变体 | 单主行动符合场景 | - |
|
|
8
|
+
| CRAFT-02@1 | applicable | - | clear | 运行列表与 feed 均为可比较行式条目,未卡片化 | Table 承载行记录;feed 条目固定高度行式 | 可比较运维行不适用卡片例外 | - |
|
|
9
|
+
| CRAFT-03@1 | applicable | - | clear | 页面分区无框;仅对话框与抽屉有界 | 控制台/列表/侧区靠间距与字重分区 | 有界对话框是真实框工具 | - |
|
|
10
|
+
| CRAFT-04@1 | applicable | - | clear | 中性面主导;语义色仅状态命名(running/paused/failed) | 状态徽标使用独立语义令牌 | 无单色系例外诉求 | - |
|
|
11
|
+
| CRAFT-05@1 | applicable | - | clear | 控件几何各自特定;无泛化胶囊 | 按钮与徽标使用各自控件半径 | 无品牌几何例外诉求 | - |
|
|
12
|
+
| CRAFT-06@1 | applicable | - | clear | 紧凑控制台层级用结构与字重 | 控制台与主列表共用层级令牌,无 display 字号 | 无 hero 场景主张 | - |
|
|
13
|
+
| CRAFT-07@1 | applicable | - | clear | 全局暂停/恢复图标按钮带可访问名(R4 修复后) | evidence/L6.2-pause-trace.json a11y 复走查 | 破坏性动作(中止)保留显式文字 | - |
|
|
14
|
+
| CRAFT-08@1 | not-applicable | 本 run 表面无装饰动效(进度反馈用条目级进度文字与 busy 态,未引入动画) | - | - | - | 无动效面可查 | - |
|
|
15
|
+
| A11Y-01@1 | applicable | - | clear | 控制台 feed 条目与全局控制均有可访问名称与 role;暂停失败 toast role=alert | evidence/L6.2-pause-trace.json a11y 复走查(首轮缺口见 R4 finding,已闭合) | 无已声明豁免 | - |
|
|
16
|
+
| RESP-01@1 | applicable | - | clear | 声明视口 1280x800 下主路径与控制台跨页路径可用 | 响应式行为符合声明视口组 | 契约仅声明桌面视口 | - |
|
|
17
|
+
| I18N-01@1 | not-applicable | 单语控制台(zh-CN),无 i18n 声明(无 i18n.* 契约字段,L1 未声明多语言用户群) | - | - | - | 单语声明成立 | - |
|
|
18
|
+
| PERF-01@1 | applicable | - | clear | 长运行有持续进度感(feed 条目级进度逐 tick 更新;全局暂停 busy 即时反馈) | evidence/L6.2-pause-trace.json 反馈序列 | 反馈相称性未承诺耗时阈值(契约无阈值声明) | - |
|
|
19
|
+
| SEC-01@1 | not-applicable | 声明范围无敏感操作新增(敏感模拟参数默认脱敏沿用;全局暂停非敏感操作) | - | - | - | 无敏感面可查 | - |
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Decision report (队列监控升级为「全局模拟运行中心」第一步)
|
|
2
|
+
|
|
3
|
+
P3 全量档(S6 dogfood,目标面 = showcase SwarSight 队列监控页)。顶块 = Fill 消费面;DD 条目块记录 E 档探索、R3 重入修订与基线漂移复核(G10 校验)。
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
design-baseline: DESIGN.md sha256:2c7e9f3ab5d1e04c6a8f0b2d4e6c9a1f3b5d7e9c1a3f5b7d9e1c3a5f7b9d1e3f
|
|
7
|
+
scene: ops console simulation queue (run-center step 1)
|
|
8
|
+
density: console-tight
|
|
9
|
+
template: global run console + table + side trends
|
|
10
|
+
regions:
|
|
11
|
+
console: global run summary (running/paused/failed) + run feed (in-flight and recent, persistent across views) + global pause/resume
|
|
12
|
+
table: simulation run list (status, scenario, owner, duration, resources, actions)
|
|
13
|
+
side: failure trends, queue pressure, recent failure causes
|
|
14
|
+
toast: page-level notices (global-pause failure, retry queued)
|
|
15
|
+
components:
|
|
16
|
+
global pause -> Button with accessible name and role; busy state while applying
|
|
17
|
+
run feed entry -> console item with progress; done state opens result
|
|
18
|
+
batch retry -> selection-floating action bar (explicit text on destructive actions)
|
|
19
|
+
list -> Table (not card wall)
|
|
20
|
+
baseline-changes: topbar counts replaced by global run console region
|
|
21
|
+
risks:
|
|
22
|
+
- console becomes dumping ground -> only simulation run feed this step; feed caps at 12 entries
|
|
23
|
+
- persisted feed leaks across sessions -> entries live for the run only (sim.control_scope assumption bounds the pause scope)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Do not start implementation until this report exists (or the user explicitly skips).
|
|
27
|
+
|
|
28
|
+
## DD-0001 — 顶栏计数区升级的呈现构成
|
|
29
|
+
|
|
30
|
+
E 档:命中判据 2(region 集合/权重重组 = 构成变化)。两案比较 → preview round 1 用户确认选 B。后被 R3 挑战(见 DD-0002)。
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
id: DD-0001
|
|
34
|
+
tier: explore
|
|
35
|
+
question: 顶栏计数区升级的呈现构成
|
|
36
|
+
status: invalidated
|
|
37
|
+
constraints:
|
|
38
|
+
baseline: DESIGN.md sha256:8f4d2b61c7a3e95d0f8c2a1b6e9d4c7f3a5b8d1e0c2f4a6b8d0e2c4f6a8b0d2f
|
|
39
|
+
spec: [l1.scenes, l6.c4]
|
|
40
|
+
rules: [PERF-01@1, CRAFT-01@1]
|
|
41
|
+
candidates:
|
|
42
|
+
- {id: A, source: agent, created_at: 2026-08-14T09:22:00Z, fidelity: description, summary: 顶栏轻量计数增强(计数 + 最近 3 条 toast 式通知,强化既有 topbar), deviations: none, assets: []}
|
|
43
|
+
- {id: B, source: provider-adapter, adapter: provider-a, created_at: 2026-08-14T09:24:00Z, fidelity: sketch, summary: 启用全局 run console region(汇总 + feed + 全局控制;主列表仅禁用 + 行内微标), deviations: none, assets: [candidates/console-region.html sha256:547cbb919d2124c2536942df8eca134e8bfcbad8ebd03c8086c7d025e0902da8]}
|
|
44
|
+
comparison:
|
|
45
|
+
axes:
|
|
46
|
+
- {axis: 任务适配·运行中切页 (l1.scenes), A: 不利——切页后计数无条目可续读, B: 支持——全局一处可续读}
|
|
47
|
+
- {axis: 感知反馈相称性 (PERF-01@1), A: 部分——长运行无持续进度感, B: 支持——feed 条目级进度持续}
|
|
48
|
+
- {axis: 基线·布局段 (DESIGN.md), A: 遵循——不新增 region, B: 突破——顶栏不承载任务级数据惯例被 region 取代(呈报用户裁决)}
|
|
49
|
+
tradeoffs: "A 以轻量换跨页不可续读;B 以新 region 换全局可查(需基线漂移复核)"
|
|
50
|
+
selection:
|
|
51
|
+
candidate: B
|
|
52
|
+
rationale: 切页续读 + 长运行持续进度两轴支持面更大;布局段突破经用户确认接受
|
|
53
|
+
rejected:
|
|
54
|
+
- {candidate: A, reason: 运行中切页后状态无处可续读(l1.scenes 轴不利)}
|
|
55
|
+
confirmation:
|
|
56
|
+
kind: user
|
|
57
|
+
via: preview-round-1 decision_id:7c3a91e4d2b6f80a5c7e9d1b3f5a8c0e
|
|
58
|
+
confirmed_at: 2026-08-14T09:32:00Z
|
|
59
|
+
supersedes: null
|
|
60
|
+
stale: DESIGN.md 来源哈希漂移检出(2026-08-14T09:40:00Z)——条目引用旧绑定 sha256:8f4d2b61…
|
|
61
|
+
stale_review: {exit: keep, note: 新基线布局段未改 region 惯例的其余部分——复核行:console region 约定成立且其余布局段未动;重绑 sha256:2c7e9f3ab5d1e04c6a8f0b2d4e6c9a1f3b5d7e9c1a3f5b7d9e1c3a5f7b9d1e3f(stale 解除)}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## DD-0002 — 运行 feed 跨页保持修订(R3 重入)
|
|
65
|
+
|
|
66
|
+
R3 finding(dd: DD-0001)挑战 B 案「控制台 feed 跨页保持」假设。修订 = 新条目 supersedes DD-0001(旧条目 invalidated 保留可解析);重入命中 E 判据 4 → 仍 E 档 → preview round 2 用户再确认。
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
id: DD-0002
|
|
70
|
+
tier: explore
|
|
71
|
+
question: 运行 feed 跨页保持修订(R3 重入)
|
|
72
|
+
status: confirmed-user
|
|
73
|
+
constraints:
|
|
74
|
+
baseline: DESIGN.md sha256:8f4d2b61c7a3e95d0f8c2a1b6e9d4c7f3a5b8d1e0c2f4a6b8d0e2c4f6a8b0d2f
|
|
75
|
+
spec: [l1.scenes, l6.c4, l6.c5]
|
|
76
|
+
rules: [CRAFT-01@1]
|
|
77
|
+
candidates:
|
|
78
|
+
- {id: B2, source: agent, created_at: 2026-08-14T09:44:00Z, fidelity: description, summary: B 修订——全局控制台 + feed 条目持久化(返回恢复显示,含完成态入口与上限治理), deviations: none, assets: []}
|
|
79
|
+
- {id: A2, source: agent, created_at: 2026-08-14T09:44:00Z, fidelity: description, summary: 回退顶栏计数 + 返回后锚点定位恢复, deviations: none, assets: []}
|
|
80
|
+
comparison:
|
|
81
|
+
axes:
|
|
82
|
+
- {axis: 跨视图状态闭环 (l6.c4), B2: 支持——feed 条目持久化且状态可续读, A2: 部分——锚点恢复依赖行仍在视图内}
|
|
83
|
+
- {axis: 主行动唯一性 (CRAFT-01@1), B2: 遵循——控制台不争夺主行动, A2: 遵循——顶栏计数弱化处理}
|
|
84
|
+
tradeoffs: "B2 以全局持久换控制台治理成本(上限 12 条 + 让位规则);A2 以上下文邻近换跨页风险"
|
|
85
|
+
selection:
|
|
86
|
+
candidate: B2
|
|
87
|
+
rationale: 跨视图状态闭环轴支持面大且与运行中心第一步的方向一致
|
|
88
|
+
rejected:
|
|
89
|
+
- {candidate: A2, reason: 行滚动后锚点失效——同一失败模式(跨页/滚动丢状态)}
|
|
90
|
+
confirmation:
|
|
91
|
+
kind: user
|
|
92
|
+
via: preview-round-2 decision_id:9d5b2f70c4e6a8d0b2f4a6c8e0d2b4f6
|
|
93
|
+
confirmed_at: 2026-08-14T09:52:00Z
|
|
94
|
+
supersedes: DD-0001
|
|
95
|
+
stale: DESIGN.md 来源哈希漂移检出(2026-08-14T09:40:00Z)——条目引用旧绑定 sha256:8f4d2b61…
|
|
96
|
+
stale_review: {exit: keep, note: 新基线布局段未改 region 惯例的其余部分——复核行:持久 feed 约定仍成立;重绑 sha256:2c7e9f3ab5d1e04c6a8f0b2d4e6c9a1f3b5d7e9c1a3f5b7d9e1c3a5f7b9d1e3f(stale 解除)}
|
|
97
|
+
```
|