knowledge: bound a new rejection rule with a corpus sweep before writing it (1 ingested, 2 dropped as in-flight dups of #51) - #58
Open
choiyounggi wants to merge 1 commit into
Conversation
… rule); drop 2 in-flight duplicates of #51
This was referenced Aug 7, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Knowledge flush — 3 insight(s): 1 ingested, 2 dropped as in-flight duplicates
Queue drained:
~/.dev-loop/queue/7947837a-…jsonl(1 row),~/.dev-loop/queue/f1a3ae46-…jsonl(2 rows).Verified best-practice
C1 — Bound a new rejection rule with a corpus sweep before writing production code (INGESTED)
Claim. When adding a rule to a compiler/linter/parser/validator that will
start rejecting input the tool has been accepting silently, implement the
accept/reject predicate first as a throwaway script, run it over the entire
corpus, and record the reject count and the rejected-path list in the plan.
The rule is only settled when that list equals the set already known to be
defective.
Sources checked (all fetched this session):
"Does the rule report the intended patterns? Does the rule falsely mark valid
patterns as errors?", because "the AST of Javascript and Typescript can cause
very unexpected results it is not enough to test the rule only against unit
tests and a small amount of repositories". Comparison mode reports "the exact
changes in ESLint reports their code changes introduced".
lintcheck "Runs Clippy on a fixed set of crates read from
lintcheck/lintcheck_crates.tomland saves logs of the lint warnings into therepo. We can then check the diff and spot new or disappearing warnings."
(fetched via
raw.githubusercontent.com; the citedblob/URL is the same file.)across parts of the Rust ecosystem. Its primary purpose is to detect regressions
in the Rust compiler, and it does this by building a large number of crates,
running their test suites and comparing the results between two versions of the
Rust compiler." Used specifically to measure the extent of breakage of a
potentially breaking change (e.g. a lint becoming deny-by-default) before it lands.
How verified / what is not sourced. Three independent ecosystem tools
implement the same method — sweep the corpus, record verdicts, diff them — which
establishes the core directive. What the three tools do not establish is the
candidate's ordering refinement: they implement the rule in the production tree
first and then sweep. The "throwaway predicate before production code, and the
reject list must match the known-defective set" part rests on the session's own
reproducible field run (linkly #53: 148 sources swept — 40
.lnplfiles + 108triple-quoted inline programs in tests — 2 rejects, both the QA probes the issue
named; one false positive in the first draft rule caught at plan time, where the
guard legitimately owned its block). The page's Sources section says this in a
final bullet rather than implying the ordering is doc-backed.
Confidence:
verified— method sourced to official tool docs, orderingrefinement backed by a reproducible measurement. Nothing was upgraded on the
strength of assertion alone.
The candidate's own honest limitation is preserved as an edge-case row: the text
sweep could not index fixtures assembled with
.replace(), so those 5 sites wereverified by hand. That partial-index failure is the same shape as the existing
call-site-enumerationpage's keyword-search blind spot, which is why the twoare cross-linked.
C2 — guardrail
worktree_escapefires on read-only cross-worktree access (DROPPED)Not ingested; superseded in flight (see Open-PR check). Verification note for the
record: the candidate's premise is partially wrong. PR #51 carries a local
reproduction (guardrails 1.2.0, macOS) showing that a pure read of a sibling
worktree passes —
grep,awk,cat,git -C … statusall returned clean —and that
askfires only when a main-root mention survives the strip and awrite verb (
rm|mv|cp|tee|mkdir|touch|install|dd) or a redirect to an absolutepath appears anywhere in the same command string. Ingesting this candidate as
written would have contradicted a better-evidenced page.
C3 — pane/dispatch binding failure taxonomy (DROPPED)
Not ingested; superseded in flight. PR #51's
infrastructure/agent-orchestration/pane-delivery-confirmation.mdalready carriesall four of this candidate's rows (check for the idle prompt before binding; the
runtime-unavailable stage → wait and bind a fresh unit; the agent-unconfigured
stage → close the pane and create a new worker-mode agent; always pass the
worktree alongside the pane), plus an
Instead ofrow for branching on the stage,sourced to the same three field dispatches this candidate cites and corroborated
against the shipped
orca-worker-start.shcomment.Existing-layer check
Routed C1 via
INDEX.md→backend("language-agnosticcommon/: … call-siteenumeration before a contract change"), then
wiki/backend/index.md→change-impact. Cross-checkedtestingandqaindexes before settling, sincethe harvested hint said
testing.Pages read: backend-common-change-impact-call-site-enumeration, testing-quality-guard-shape-vs-consequence, qa-process-regression-scope, backend-common-api-design-unenforced-declarations, testing-quality-checks-that-cannot-pass, infrastructure-agent-orchestration-worktree-isolated-workers, infrastructure-agent-orchestration-pane-delivery-confirmation
Index "load when" lines were read for every page in
wiki/testing/index.md,wiki/qa/index.mdandwiki/backend/index.md; the pages above are the ones whoselines overlapped and were opened in full.
Overlaps found, and why none of them absorbed C1:
backend-common-change-impact-call-site-enumerationtesting-quality-guard-shape-vs-consequenceInstead ofrowqa-process-regression-scopebackend-common-api-design-unenforced-declarationstesting-quality-checks-that-cannot-passConflicts flagged: none. No merged page carries this trigger — a grep over
wiki/forcorpus sweep|previously-accepted|tightening a validator|rejection rulereturned nothing.Merged vs created: created 1 new page (no existing page shares the trigger,
so merge-before-create does not apply). No new category —
change-impactalreadyexists and its scope covers this.
Related links added:
call-site-enumeration← → new page;regression-scope← → new page.Conflict note for the reviewer:
wiki/backend/index.mdis also touched by openPR #51 (which adds a
widening-a-closed-value-tablerow to the samechange-impacttable). Expect a small table-level conflict if both land; the tworows are independent.
Open-PR check
Listed with
gh pr list --repo choiyounggi/dev-loop --state open --search "head:knowledge/",then fetched each as
pull/<n>/headand diffedorigin/main..pr<n> -- wiki/.Open heads: #57, #56, #55, #52, #51, #50, #49, #47.
corpus|sweep|reject|previously-accepted|lint rule|new rule|throwaway|tightenacross all 8 heads matched only unrelated contexts (#52: asubprocessencoding row and a mutant-triage line; #51: a pane-bind row, a README number sweep, and thewidening-a-closed-value-tableindex line)wiki/infrastructure/agent-orchestration/worktree-isolated-workers.mdadds the row "The escalation is read-only in substance and the coordinator must clear it → Budget the round trip (read the recorded escalation → approve → clearescalations/→ restart the watcher) and state in the worker's first brief that reads are approved and only writes outside the worktree are refused", plus three rows and a reproduction that correct the candidate's premisewiki/infrastructure/agent-orchestration/pane-delivery-confirmation.mdadds all four rows plus anInstead ofrow and a field-observation source line covering the same three dispatchesNo sibling duplicate PR was opened, and nothing was pushed to #51's branch (it
already carries the content in equal-or-better form, so there was nothing to add).
Routing decision
backend/change-impact/corpus-sweep-before-a-rejection-rule— idbackend-common-change-impact-corpus-sweep-before-a-rejection-rulechange-impactalready means "enumerate the affected set before changing a contract"; a validator that starts rejecting previously-accepted input is a narrowing of that contract, and the corpus is the affected set.testing(the harvested hint) was rejected — that domain is for writing automated tests, and this is a plan-time measurement;qa/processwas rejected — its regression scoping decides what to re-test, not how to bound a rule that has not been writtenFiles changed:
wiki/backend/common/change-impact/corpus-sweep-before-a-rejection-rule.md(new, 75 body lines),wiki/backend/index.md(+1 routing row),wiki/backend/common/change-impact/call-site-enumeration.md(+1
related:id),wiki/qa/process/regression-scope.md(+1related:id),log.md(+1 entry).All three queue rows are retired — the ingested one and both drops — so nothing
re-crosses the auto-flush threshold.