hyp purge must not blind queries; LLP 0110 mints the hyp policy verb#319
Conversation
Fix: after hyp purge writes puffin position deletes, icebird stops exposing a cheap numRows (a live count would need a scan), and the ai-gateway dataset's skip-empty-partitions guard treated that undefined as zero, silently dropping every purged partition from the union. All queries on the partition returned empty with no warning, including the hypaware-privacy skill's survey during the LLP 0100 review window. The guard now skips only sources known empty (numRows === 0). Found live testing the enrollment privacy flow on this machine; verified against a purged-then-backfilled cache (0 rows -> 124,616 visible, purged rows still excluded). Docs: LLP 0110 (Accepted issue) records that the explicit-sync marking shipped as hyp ignore --sync, a semantic inversion the classify-cwd hook prints into real sessions, and settles the replacement surface: a class-neutral hyp policy set/show/unset/list, with the ignore-verb forms kept as deprecated aliases. LLP 0103 carries the Extended-by forward-ref on exactly the paragraph that left the spelling open. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…enrich/gascity dataset unions The same (source.numRows ?? 0) > 0 guard blinded queries after retention position-deletes, identically to the ai-gateway fix in this PR (LLP 0104). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
neutral review — round 1 (reviewed head Verdict: the core fix is correct and a strict improvement. One MAJOR completeness finding was found and fixed by folding in (head moved to Core fix (approved): the ai-gateway union guard change MAJOR finding — incomplete fix (now fixed): the identical buggy guard survived in four sibling dataset unions, which the daemon can blind the same way. The root cause is generic: retention writes position deletes for any source-table-layout dataset (
Resolution: folded the identical guard fix (+ retention-aware annotation, same Held for you to merge — neutral does not merge adopted PRs. The next tick re-reviews the new head. |
|
neutral review — round 2 (reviewed head Verdict: clean. The only delta since round 1 is the folded-in completeness fix (4 sibling dataset unions: otel, context-graph, context-graph-enrich, gascity). Each applies the identical guard change The PR is now reviewed-clean at the current head. Next tick it reaches the approve verdict and is held for you to merge (neutral does not merge adopted PRs). |
|
neutral verdict: approved (head Reviewed clean across two rounds: the ai-gateway query-blindness fix is correct, and the identical guard bug was fixed in all four sibling dataset unions (otel, context-graph, context-graph-enrich, gascity). CI green (typecheck + test), MERGEABLE, mergeable ∧ green ∧ reviewed. Held for you to merge - neutral does not merge adopted PRs. A push moves the head and re-opens review. |
What
Two artifacts from the 2026-07-16 live test of the enrollment privacy flow (LLP 0100-0108, shipped in v1.14.0):
1. Bug fix:
hyp purgeblinded all queries on a partition.hyp purgedeletes rows by committing puffin position-delete vectors (LLP 0104). Once a snapshot carries deletes, icebird correctly stops exposing a cheapnumRows(the live count is unknowable without a scan) and returnsundefined. The ai-gateway dataset's skip-empty-partitions guard ((source.numRows ?? 0) > 0) treated thatundefinedas zero and silently dropped the entire partition from the query union: every query returned empty, with no error or warning. The privacy skill's survey would see an empty cache, and the plan 0108 T3 assertion "purged rows are gone from query results" passed vacuously (everything was gone). The guard now skips only sources known empty (numRows === 0), with an@ref LLP 0104 [constrained-by]on the constraint.2. LLP 0110 (Accepted issue): retire the
hyp ignore --syncmisnomer.The explicit-sync marking shipped spelled
hyp ignore --sync <path>, and the LLP 0106 classify-cwd hook prints that inversion into real sessions. LLP 0103 had deliberately left the sync spelling open; 0110 settles the replacement surface as a class-neutralhyp policy set|show|unset|listwith theignore-verb forms kept as deprecated aliases, and LLP 0103 carries theExtended-by:forward-ref on exactly the paragraph that left it open. Implementation is follow-up work driven by the issue.Verification
scanRowsFromTableover the same table returned all 113,413 surviving rows, isolating the fault to the dataset guard.hyp query sqlstack, purged rows still excluded (raw table total 389k), DVs applied correctly.npm test: 2261 tests, 0 fail.ref-check: no errors on the three touched files (the corpus's 101 pre-existing anchor-drift errors are untouched).Remaining findings from the same test (not in this PR)
hyp skills install --client allis the workaround.hyp leave, so a re-enrolling machine skips backfill and the R1 promise "first sync includes your backfilled history" is silently false.🤖 Generated with Claude Code