Found by the QA acceptance pass on #1127 (sign-off). All non-blocking — #1127 passed — and grouped here so a fix can be reviewed as one small diff.
1. Story 22 is PARTIAL — one hand-fake of the secured read surface survives
packages/ui/tests/components/RelationshipTableLinkEdge.test.ts:60-77 still hand-fakes the secured read surface. #1354 extended that file rather than converting it, so it was missed by the sweep.
Story 22 asks that UI and MCP tests run on the Test context so no test hand-fakes the data surface. (Pure-render component tests faking at the prop level remain legitimate — this is not one of those.)
2. Dead public exports
FindManyArgs, FindUniqueArgs and CountArgs are still exported after #1370 removed the delegates they described. They name a surface that no longer exists, so an editor still offers them to a consumer.
3. Story 19's | null claim is not falsifiable
Story 19 — "a relationship cell renders an unreadable related row gracefully" — is pinned by tests, but CellComponentProps.value is typed unknown, so the | null compile guarantee the story claims cannot actually fail at the type level. The runtime behaviour is covered; the type claim is not.
Note the house rule: unknown must not appear in an exported type, which this is.
4. MCP advertises connect.id as string for every list
Story 9 asks that the update/delete tools' where.id be typed per list, which #1366 delivered via parseListId. But connect.id inside a data payload is still advertised as string regardless of the list's id type — so an integer-keyed list advertises the wrong type on the write side while the read side is correct.
5. Stories 6 and 8 rest on the diff rather than a test
Story 6 (the fields wire shape is unchanged) and story 8 (where is the Where vocabulary, with a description saying so) were accepted on inspection — no test pins either. Both are contract claims about a public surface and should be pinned.
Not a defect, recorded so a story is not read as stronger than it is
orders:>5 still parses but now silently degrades to free text, so a saved view using it returns different rows than before. This is intended per ADR-0055 and story 13, but story 11 ("the filter builder keeps parsing my bookmarked URLs") should not be read as promising the same results. See also #1356, which covers the case where such a degrade widens an AND chain.
Generated by Claude Code
Found by the QA acceptance pass on #1127 (sign-off). All non-blocking — #1127 passed — and grouped here so a fix can be reviewed as one small diff.
1. Story 22 is PARTIAL — one hand-fake of the secured read surface survives
packages/ui/tests/components/RelationshipTableLinkEdge.test.ts:60-77still hand-fakes the secured read surface. #1354 extended that file rather than converting it, so it was missed by the sweep.Story 22 asks that UI and MCP tests run on the Test context so no test hand-fakes the data surface. (Pure-render component tests faking at the prop level remain legitimate — this is not one of those.)
RelationshipTableLinkEdge.test.tsdrives the Test context instead of faking the secured read surfacepackages/ui/tests2. Dead public exports
FindManyArgs,FindUniqueArgsandCountArgsare still exported after #1370 removed the delegates they described. They name a surface that no longer exists, so an editor still offers them to a consumer.3. Story 19's
| nullclaim is not falsifiableStory 19 — "a relationship cell renders an unreadable related row gracefully" — is pinned by tests, but
CellComponentProps.valueis typedunknown, so the| nullcompile guarantee the story claims cannot actually fail at the type level. The runtime behaviour is covered; the type claim is not.CellComponentProps.valueis typed so a| nullto-one is a compile-time guarantee, not only a runtime oneNote the house rule:
unknownmust not appear in an exported type, which this is.4. MCP advertises
connect.idasstringfor every listStory 9 asks that the
update/deletetools'where.idbe typed per list, which #1366 delivered viaparseListId. Butconnect.idinside adatapayload is still advertised asstringregardless of the list's id type — so an integer-keyed list advertises the wrong type on the write side while the read side is correct.connect.idis advertised with the related list's own id typewhere.idalready does5. Stories 6 and 8 rest on the diff rather than a test
Story 6 (the
fieldswire shape is unchanged) and story 8 (whereis the Where vocabulary, with a description saying so) were accepted on inspection — no test pins either. Both are contract claims about a public surface and should be pinned.fieldswire shape against a fixture requestwhere's advertised schema description names the Where vocabularyNot a defect, recorded so a story is not read as stronger than it is
orders:>5still parses but now silently degrades to free text, so a saved view using it returns different rows than before. This is intended per ADR-0055 and story 13, but story 11 ("the filter builder keeps parsing my bookmarked URLs") should not be read as promising the same results. See also #1356, which covers the case where such a degrade widens an AND chain.Generated by Claude Code