Files
yoi/tools/web-ux/scenarios/memory-subjects-dark.json
Hare c78f7f7d80 feat: replace revision counters with domain state contracts
Use content digests, key fingerprints, binding and trust identities, immutable mutation receipts, and observation tokens instead of state-update ordinals across API, storage, Runtime, and Web contracts.

Preserve historical replay and secret material through frozen migrations; preflight uncertain removals before cutover, resume provisioning receipts, validate encrypted migration candidates, and align fresh/upgraded schemas. Include reviewed regression fixes, generated artifacts, and validation evidence.
2026-10-10 15:55:20 +09:00

241 lines
8.9 KiB
JSON

{
"schemaVersion": 1,
"id": "memory-subjects-dark",
"title": "Memory subjects, surfaces, and committed records — dark",
"baseUrl": "http://127.0.0.1:15286",
"colorScheme": "dark",
"reducedMotion": "reduce",
"personas": [{
"id": "fixture",
"label": "Read-only Memory fixture",
"auth": { "kind": "anonymous" }
}],
"viewports": [
{ "label": "desktop", "width": 1440, "height": 900 },
{ "label": "narrow", "width": 768, "height": 900 },
{ "label": "mobile", "width": 390, "height": 844 },
{ "label": "compact", "width": 320, "height": 700 }
],
"routes": [
{
"id": "subjects",
"label": "Subject index",
"path": "/w/memory-review/memory",
"goal": "Choose an explicit Memory subject or create one with a Backend-validated role.",
"dataState": "Active and retired subjects across a paginated list, plus create-form and permission-rejection states.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subjects'] .subject-list"
},
"capturePoints": [
{ "id": "initial", "label": "Subjects" },
{
"id": "create-form",
"label": "Create Subject form",
"interaction": [
{ "action": "click", "selector": "button.subject-create-trigger" }
],
"ready": {
"kind": "selector",
"selector": "#subject-create-panel input"
}
},
{
"id": "permission-error",
"label": "Create permission error",
"interaction": [
{
"action": "fill",
"selector": "#subject-create-panel input",
"value": "Permission denied"
},
{
"action": "click",
"selector": "#subject-create-panel button[type='submit']"
},
{
"action": "wait",
"ready": {
"kind": "selector",
"selector": "#subject-create-error"
}
}
]
}
]
},
{
"id": "subjects-empty",
"label": "Empty Subject index",
"path": "/w/memory-review/memory?cursor=fixture-empty-subject-page",
"goal": "Create the first visible Subject when the current bounded page is empty.",
"dataState": "Successful empty Subject page with a return-to-first-page recovery link.",
"ready": {
"kind": "selector",
"selector": "[data-memory-state='empty']"
},
"capturePoints": [
{ "id": "initial", "label": "Empty Subjects" },
{
"id": "create-form",
"label": "Create from empty Subjects",
"interaction": [
{ "action": "click", "selector": "button.subject-create-trigger" }
],
"ready": {
"kind": "selector",
"selector": "#subject-create-panel input"
}
}
]
},
{
"id": "subjects-error",
"label": "Subject list error",
"path": "/w/memory-review/memory?cursor=fixture-error-subject-page",
"goal": "Keep explicit Subject creation available while the existing list cannot load.",
"dataState": "Intentional Subject-list HTTP 503 with the independent create disclosure still available.",
"ready": {
"kind": "selector",
"selector": "[data-memory-state='error']"
},
"capturePoints": [
{ "id": "initial", "label": "Subjects unavailable" },
{
"id": "create-form",
"label": "Create while list unavailable",
"interaction": [
{ "action": "click", "selector": "button.subject-create-trigger" }
],
"ready": {
"kind": "selector",
"selector": "#subject-create-panel input"
}
}
]
},
{
"id": "representative",
"label": "Ready subject surface",
"path": "/w/memory-review/memory/release-coordination-subject-with-a-deliberately-long-stable-identity-for-responsive-review",
"goal": "Read the ready resident surface and scan active, resolved, and retracted committed Memories without nested vertical scrolling.",
"dataState": "Ready generated Markdown surface with long content, unsafe Markdown, wide table/code, provenance refs, and three lifecycle states.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subject'][data-memory-state='ready'] article[aria-label='Resident context']"
},
"capturePoints": [
{ "id": "initial", "label": "Ready subject" },
{
"id": "subject-diagnostics",
"label": "Subject diagnostics",
"interaction": [
{ "action": "click", "selector": "details.subject-technical-details summary" }
],
"ready": {
"kind": "selector",
"selector": "details.subject-technical-details[open]"
}
},
{
"id": "surface-diagnostics",
"label": "Surface sources and diagnostics",
"interaction": [
{ "action": "click", "selector": "details.surface-details summary" }
],
"ready": {
"kind": "selector",
"selector": "details.surface-details[open]"
}
}
]
},
{
"id": "detail",
"label": "Committed Memory detail",
"path": "/w/memory-review/memory/release-coordination-subject-with-a-deliberately-long-stable-identity-for-responsive-review/memory-decision-with-a-deliberately-long-stable-identity-for-overflow-review-0000000001",
"goal": "Audit immutable Memory body, candidate evidence, source refs, derivations, and change history.",
"dataState": "Current active change with bounded typed provenance and active/resolved/retracted immutable history.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='detail'] .change-list"
},
"capturePoints": [{ "id": "initial", "label": "Memory detail" }]
},
{
"id": "empty",
"label": "Ready-empty subject",
"path": "/w/memory-review/memory/empty-subject",
"goal": "Distinguish a valid ready-empty snapshot and an empty committed Memory list from failure.",
"dataState": "Ready snapshot with empty Markdown and no refs; successful current list with no records.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subject'][data-memory-state='ready'] [data-surface-ready-empty]"
},
"capturePoints": [{ "id": "initial", "label": "Ready empty" }]
},
{
"id": "ungenerated",
"label": "Ungenerated subject context",
"path": "/w/memory-review/memory/ungenerated-subject",
"goal": "Distinguish a Subject with no generated resident context from lost committed Memory.",
"dataState": "Ungenerated resident context and a successful empty committed Memory list.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subject'][data-memory-state='ungenerated']"
},
"capturePoints": [{ "id": "initial", "label": "Not generated" }]
},
{
"id": "stale",
"label": "Stale subject surface",
"path": "/w/memory-review/memory/stale-subject",
"goal": "Recognize that no snapshot is displayable while committed Memories remain readable.",
"dataState": "Stale availability without snapshot and one resolved committed Memory.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subject'][data-memory-state='stale']"
},
"capturePoints": [{ "id": "initial", "label": "Stale" }]
},
{
"id": "failed",
"label": "Failed subject surface",
"path": "/w/memory-review/memory/failed-subject",
"goal": "See generation failure without displaying a failed or partial snapshot.",
"dataState": "Failed availability without snapshot and one retracted committed Memory.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subject'][data-memory-state='failed']"
},
"capturePoints": [{ "id": "initial", "label": "Failed" }]
},
{
"id": "error",
"label": "Subject endpoint error",
"path": "/w/memory-review/memory/error-subject",
"goal": "Keep each read-only region explicit when subject, surface, and current Memory requests fail.",
"dataState": "Intentional HTTP 503 from all subject-scoped endpoints.",
"ready": {
"kind": "selector",
"selector": "[data-memory-view='subject'][data-memory-state='error']"
},
"capturePoints": [{ "id": "initial", "label": "Unavailable" }]
}
],
"processes": [{
"id": "memory-fixture",
"command": "deno",
"cwd": "..",
"args": [
"run",
"--allow-net",
"--allow-read",
"browser-tests/memory_document_fixture_server.ts",
"15286",
"../../web/workspace/build"
],
"readyUrl": "http://127.0.0.1:15286/health"
}]
}