content-explorer/workplans/evidence/CONTENT-WP-0005-ImplementationNotes.md
tegwick 8bcb3414d7
All checks were successful
synthetic / suite (push) Successful in 1m2s
Report a missing entity source beside a licensed one.
Assistant: grok
Assistant-Session: 01a1531b-6698-7732-8587-f28ea604bcdf
2026-10-19 11:10:52 +02:00

53 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`.
An entity source ref is checked even when another source on that entity is licensed. Adding `src:does-not-exist` beside the licensed source on `urn:ce:systems-thinking:concept:feedback` records `unresolved-reference`, lists the entity under incomplete provenance, and matches `graph_errors`. The same extra ref on a relation was already reported.
## 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`.