Add a synthetic quality suite and upstream parity record.
Some checks failed
synthetic / suite (push) Has been cancelled
Some checks failed
synthetic / suite (push) Has been cancelled
Assistant: grok Assistant-Session: 01a1531b-6698-7732-8587-f28ea604bcdf
This commit is contained in:
parent
b5b6f6bc00
commit
f43edc1edc
14 changed files with 753 additions and 11 deletions
|
|
@ -4,12 +4,12 @@ type: workplan
|
|||
title: "Quality system and upstream experience parity"
|
||||
domain: infotech
|
||||
repo: content-explorer
|
||||
status: proposed
|
||||
status: finished
|
||||
flavor: implementation
|
||||
depends_on:
|
||||
- CONTENT-WP-0004
|
||||
created: "2026-10-12"
|
||||
updated: "2026-10-12"
|
||||
updated: "2026-10-19"
|
||||
state_hub_workstream_id: "f1e0fa09-c85d-5aac-b665-4d73b0863fc2"
|
||||
---
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ CONTENT-WP-0007 compares one permitted pinned OnCo slice through the original im
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T01
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "9b83cd57-836e-5fac-a1cc-200481036aef"
|
||||
```
|
||||
|
|
@ -34,7 +34,7 @@ state_hub_task_id: "9b83cd57-836e-5fac-a1cc-200481036aef"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T02
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "6a94c105-e66b-5aa2-a46c-a42fdd709e0f"
|
||||
```
|
||||
|
|
@ -43,7 +43,7 @@ state_hub_task_id: "6a94c105-e66b-5aa2-a46c-a42fdd709e0f"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T03
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "0eb744db-302b-5cf8-82f5-d1851a009d23"
|
||||
```
|
||||
|
|
@ -52,7 +52,7 @@ state_hub_task_id: "0eb744db-302b-5cf8-82f5-d1851a009d23"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T04
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "fe27e784-a99b-54e0-9634-4c62073f9835"
|
||||
```
|
||||
|
|
@ -61,7 +61,7 @@ state_hub_task_id: "fe27e784-a99b-54e0-9634-4c62073f9835"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T05
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "bfbb8b00-ac88-50d7-89ee-1210d716f7df"
|
||||
```
|
||||
|
|
@ -72,7 +72,7 @@ state_hub_task_id: "bfbb8b00-ac88-50d7-89ee-1210d716f7df"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T06
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "cb73eb25-85b9-5808-aa1a-b00f6dc21a9f"
|
||||
```
|
||||
|
|
@ -81,7 +81,7 @@ state_hub_task_id: "cb73eb25-85b9-5808-aa1a-b00f6dc21a9f"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T07
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "92c00f5d-e3c8-55d7-92f2-45fe71eee2ab"
|
||||
```
|
||||
|
|
@ -90,7 +90,7 @@ state_hub_task_id: "92c00f5d-e3c8-55d7-92f2-45fe71eee2ab"
|
|||
|
||||
```task
|
||||
id: CONTENT-WP-0005-T08
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "f35cfc13-0f9f-5f50-871f-a9bc8d1e6148"
|
||||
```
|
||||
|
|
|
|||
51
workplans/evidence/CONTENT-WP-0005-ImplementationNotes.md
Normal file
51
workplans/evidence/CONTENT-WP-0005-ImplementationNotes.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# CONTENT-WP-0005 implementation notes
|
||||
|
||||
Date: 2026-10-19
|
||||
|
||||
Public checks stay on the two synthetic dataspaces, `systems-thinking` and `software-architecture`. The suite does not fetch the OnCo corpus.
|
||||
|
||||
## T01 and T07 — one suite, both journeys
|
||||
|
||||
`.forgejo/workflows/synthetic.yaml` checks out the repo, installs `requirements.txt` and `ui/` dependencies, and runs `sh scripts/ci-synthetic.sh`. That script runs fixture validation, `python3 -m unittest discover -s tests -p 'test_*.py'`, the UI boundary and provenance checks, `scripts/quality_report.py`, then `npm test` and `npm run typecheck` in `ui/`.
|
||||
|
||||
`ui/components/journeys.test.tsx` drives the shipped browser and detail markup for both dataspaces. For the first concept that has a relation and a source it searches that title, opens the record, checks the source title and license, follows the neighbour link, and opens `GraphExplorer` with that entity as focus. A second test focuses the search field, a result link, a relation link, and the way back.
|
||||
|
||||
## T02 — keyboard, viewports, screenshots, lab vitals
|
||||
|
||||
Headless Chromium on `npm run dev` at `http://127.0.0.1:3400` walked the same journeys at 1280×800 and 390×844. Focus reached search, a result, the record, a relation link, and the return link on both dataspaces. Page errors were 0. Captured under `/tmp/grok-goal-60054ed6e434/implementer/`:
|
||||
|
||||
- `a11y.txt`
|
||||
- `wide.png` (1280×971, 102155 bytes) and `narrow.png` (390×1411, 99962 bytes)
|
||||
- `screenshot-compare.txt`: the pixels differ; the wide view keeps search and the Search button on one row; the narrow view stacks search, tags, and the table. OnCo pixel equality was not measured.
|
||||
- `vitals.txt`: ttfbMs 445.1, domContentLoadedMs 664.7, loadMs 877.2, fcpMs 828, lcpMs 828. These are navigation-timing numbers from the last wide page, the software-architecture concept index.
|
||||
|
||||
## T03 and T08 — quality report
|
||||
|
||||
`content_explorer.quality.quality_report` reads a snapshot, a manifest, and an optional ingest report. It always emits every failure class, including zeros: `rights`, `missing-license`, `dangling-reference`, `duplicate-identity`, `unresolved-reference`, `missing-relation-label`, `unknown-kind`, and `stale`. It also reports provenance complete and incomplete ids, stale ids, unresolved references, and source counts with the licenses actually present.
|
||||
|
||||
`scripts/quality_report.py` prints that JSON for `examples/dataspaces` and exits non-zero when any class count is above zero or provenance is incomplete. On 2026-10-19 both examples are complete and every class count is 0. Their sources are CC0-1.0. A test that sets one source license to MIT sees `MIT` in `sources.licenses`.
|
||||
|
||||
## T04 — deviations and notices
|
||||
|
||||
`research/UXParityMatrix.md` section “Disposition after CONTENT-WP-0005” lists each upstream pattern as reused, generalized, omitted, or deferred. Faceted table and deep-linked view state are reused. Landing, kind directory, detail, backlinks, sources, glossary, graph, and collections are generalized. Timelines, comparisons, medical widgets, and the OnCo mark are omitted. A static API and Ask/MCP are deferred.
|
||||
|
||||
`scripts/check_ui_provenance.py` requires `THIRD_PARTY.md` to contain `Copyright (c) 2026 OnCo`, `MIT License`, and pin `b594d7433bf4e408b44215e25e5304696d6f840e`. `tests/test_ui_provenance.py` calls that check.
|
||||
|
||||
## T05 — publish rejection
|
||||
|
||||
`publish_directory` still refuses a quarantined or dangling import and does not write `snapshot.json`. `tests/test_quality.py` drives `project_records` and `publish_directory` on a missing license, a disallowed license, a dangling relation target, and a duplicate identity. Each case leaves `published` false, `snapshot` null, and a non-zero failure class on `quality_report`. Clearing a published source license, pointing a relation at a missing id, appending a duplicate entity, or marking an entity `stale` each raises the matching class above zero.
|
||||
|
||||
## Checks
|
||||
|
||||
Durable tests:
|
||||
|
||||
- `tests/test_quality.py`
|
||||
- `tests/test_ui_provenance.py`
|
||||
- `ui/components/journeys.test.tsx`
|
||||
- `.forgejo/workflows/synthetic.yaml` and `scripts/ci-synthetic.sh`
|
||||
|
||||
Captured on 2026-10-19 under `/tmp/grok-goal-60054ed6e434/implementer/`:
|
||||
|
||||
- `tests-1.txt` and `tests-2.txt`: `sh scripts/ci-synthetic.sh`, both exit 0. Unittest ran 26 tests. Vitest ran 12 files and 34 tests, including the two journey tests.
|
||||
- `ci-local.txt`: the workflow’s install and suite commands.
|
||||
- `fixtures.txt`: `python3 scripts/validate_fixtures.py` and `python3 scripts/check_ui_provenance.py`.
|
||||
13
workplans/evidence/CONTENT-WP-0005-Review.md
Normal file
13
workplans/evidence/CONTENT-WP-0005-Review.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# CONTENT-WP-0005 review
|
||||
|
||||
Date: 2026-10-19
|
||||
|
||||
T01–T08 are done. The public suite is `.forgejo/workflows/synthetic.yaml`, which runs `sh scripts/ci-synthetic.sh` and does not fetch OnCo data.
|
||||
|
||||
Local CI result: `/tmp/grok-goal-60054ed6e434/implementer/ci-local.txt` runs the workflow commands (`pip install -r requirements.txt`, `npm ci` in `ui/`, then `sh scripts/ci-synthetic.sh`). The same suite was run twice before that and both exited 0 (`tests-1.txt`, `tests-2.txt`): 26 unittest tests, 34 Vitest tests. Fixture validation and the third-party notice check are in `fixtures.txt`.
|
||||
|
||||
Both example dataspaces pass browse, search, record open, neighbour follow, source and license, and graph focus. The keyboard pass in `a11y.txt` reached search, a result, the record, a relation link, and return at 1280×800 and 390×844, with page errors 0. Screenshots `wide.png` and `narrow.png` show the software-architecture concept index. They are not blank. Their pixels differ, and OnCo pixel equality was not measured (`screenshot-compare.txt`).
|
||||
|
||||
R7 deviation: the keyboard walk, the two screenshots, and the lab navigation timings in `vitals.txt` (ttfbMs 445.1, fcpMs 828, lcpMs 828) approximate usability. They are not field Core Web Vitals and they are not a usability proof. Screenshot comparison records the wide and narrow layout difference. It does not fail on unequal pixels.
|
||||
|
||||
The quality report over the published examples is complete, with every failure class at zero, including missing license, dangling reference, and duplicate identity. The same function reports those three as failures when the input contains them, and `publish_directory` refuses to write the snapshot. Upstream dispositions are in `research/UXParityMatrix.md`. Notices still name `Copyright (c) 2026 OnCo`, the MIT license, and pin `b594d7433bf4e408b44215e25e5304696d6f840e`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue