Commit 785d2ea
test(dogfood): pin the temporal storage line end-to-end; fail loudly on a mis-scoped docs audit (#4077)
* test(dogfood): pin the temporal storage line end-to-end; fail loudly on a mis-scoped docs audit
Two follow-ups from the temporal line, both aimed at the same weakness: a
failure that is silent is a failure nobody finds.
1. temporal-storage-e2e.dogfood.test.ts — the four verifications that actually
caught #3912/#3928/#3994/#4033, turned into a gate. Every one of those bugs
passed its own layer's unit tests: the driver, the strategy and the read
path were each internally consistent, and what disagreed was what a value
physically IS between them. The symptoms were correspondingly quiet — the
list showed the row, the chart drew the bar, only the filtered/sorted/
labelled view was wrong. So the assertions run through the real HTTP write
and read path:
- a date window returns the rows inside it (the original #3912 report was
a dashboard dateRange returning empty), and 23:30Z / 00:30Z keep their
UTC calendar day — two instants a naive write path shifts in opposite
directions, so either direction is caught regardless of host zone;
- a temporal column sorts chronologically both ways, and the two
directions must differ (a silently-ignored sort would otherwise pass);
- every accepted Field.time input shape converges on one stored wall
clock, and an equality filter cannot be split by the writer's spelling;
- a timeDimensions bucket reaches the caller with its label.
Verified adversarially: reverting #4033's projectedDimensions() turns the
analytics case red and nothing else, so the gate tests the seam it claims.
The suite deliberately does NOT send epoch milliseconds for a time field.
The record validator answers that with 400 invalid_time and should — the
driver's epoch handling defends an in-process writer binding a Date, not an
API client. That boundary is now pinned too, so the driver's leniency is
never mistaken for an accepted wire shape.
2. .claude/workflows/docs-accuracy-audit.js — the scope fallback no longer
swallows a caller mistake. `args.docs ?: ALL_HANDWRITTEN` covered both
"audit everything" and "your args were malformed", and the Workflow tool
delivers args verbatim: passing a JSON-encoded string left args.docs
undefined, silently widened a 12-doc request to all 147, and burned ~294
agents with nothing in the output saying the scope had been ignored.
Omitting args entirely still means a full audit; supplying an unusable
args.docs now throws, and the resolved scope is logged either way.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPxNwPnjcn599ujXpU3ibJ
* fix(dogfood): assert the time-field rejection via the envelope code, not the field-level literal
`check-error-code-casing` (ADR-0112 D1) flagged the lowercase 'invalid_time'
in a comparison position. The literal is a legitimate D6 field-addressed
validator code, so an EXEMPT_FILES entry would have been sanctioned — but the
assertion is strictly better without it: the standard SCREAMING envelope code
plus the offending field name IS the boundary contract, and pinning the
field-level code adds no assurance while costing an exemption the next reader
has to interpret.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TPxNwPnjcn599ujXpU3ibJ
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 8f81731 commit 785d2ea
3 files changed
Lines changed: 303 additions & 1 deletion
File tree
- .changeset
- .claude/workflows
- packages/qa/dogfood/test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
17 | 45 | | |
18 | 46 | | |
19 | 47 | | |
| |||
0 commit comments