knowledge: 5 verified insights — git-status -uall purity gates, override control pairs, guard-true coverage, per-channel masking verification, lowered-declaration survival - #40
Open
choiyounggi wants to merge 2 commits into
Conversation
… override control pairs, guard-true path coverage)
…larations counted in lowered IR (2 more verified insights)
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 — 5 insight(s)
Drained 5 pending rows from
~/.dev-loop/queuein two rounds (session files: qa-t1-inventory-order ×1, qa-t4-rate-notify ×2, then qa-t2-payment-refund ×2 that were harvested while the first round was in flight). Result: 5 new pages (qa ×4, security ×1), 7 reverse related-links, 0 dropped, allconfidence: verified. One candidate's stated evidence wording was corrected during verification (I-3), and one queue domain hint was re-routed (I-5:debugging→qa).git status --porcelainneeds-uallbefore path-filtering for scope puritywiki/qa/process/scope-purity-checks.md(new)wiki/qa/exploratory/override-control-pairs.md(new)wiki/qa/exploratory/guard-true-path-coverage.md(new)wiki/security/data/masking-verification.md(new)wiki/qa/exploratory/lowered-declaration-survival.md(new)Verified best-practice
1 — Scope-purity checks over
git statusoutput need-uallClaim as queued: default porcelain collapses an entirely-untracked directory to one
?? qa/line, so a per-file path filter (^?? qa/cases/...) mis-matches and the purity gate reports a false violation;-uallexpands to per-file lines.Verified two ways:
normal"Show untracked files and directories", modeall"Also show individual files in untracked directories"; the default equalsnormaland is user-configurable viastatus.showUntrackedFiles. The config point yields an addition the candidate lacked: a checkout withshowUntrackedFiles=nohides untracked files entirely, turning the same gate into a false pass — so scripts must pass-uallexplicitly, never rely on the ambient default. Also doc-verified for the page's edge cases: porcelain v1 rename lines areR <orig-path> -> <path>(two paths, one line), special-character paths are C-string-quoted unless-z, and ignored files are omitted unless--ignored=matching.?? qa/and the per-file filter left it as a "violation" line (grep exit 0);-uallprinted the three real file paths and the filter passed (grep exit 1). Matches the t1 session evidence (14 files proven in scope only after-uall).2 — A control pair before trusting a value-override matrix
Claim as queued: when a CLI takes name-based runtime value injection (
--field key=value) and ignores unknown keys, run a control pair that flips an observable before trusting any value matrix; uniform output across variants means "key silently ignored", not "behavior stable".Verified:
qa/cases/rate-notify/evidence/05-modeB.md+evidence/raw/modeB-b*.txt): five runs with bare names (--field value=150/50/100...) produced effectively identical step traces — guarded create step never fired, until-loop always hit its 16-round cap — with exit 0 and zero warnings. The tool's own help documents the policy: "Fields the workflow does not compare on are ignored; omitted ones default to 0." Switching to the canonical dotted name (--field measurement.value=150) flipped the guarded step, proving the lever, after which the matrix produced differentiated, meaningful rows.ConfigDict(extra=...)=ignore(default) /allow/forbid. This grounds the page's directive to prefer strict/forbid modes for measurement runs.3 — Guard-true path coverage when static stages skip reference resolution
Claim as queued: steps behind guards must be executed with the guard true at least once, because a pipeline whose compile/validation doesn't resolve cross-node references defers those errors to runtime, and guard-false runs return rc=0 forever.
Verified:
qa/cases/rate-notify/evidence/04-modeA.md): anemitreferencing an undeclared event passed compile (0 errors) and IR validation (PASS); 6 of 7 runtime runs failed at the emit step with "EventEmit references undeclared event 'event.notification'"; the single run where a presence guard skipped emit exited 0. Correction to the queue row: the failure text is the above, not "RunError" — the page and this report quote the actual error. The same evidence file's bidirectional guard table (guard.1/2/3, true and false runs each, all three discriminating) is the template for the page's contrast-table directive, and its guard.3 zero-round observation (0-iterationuntilabsent from the skipped list) became the "assert on executed steps, not skip markers" directive.4 — Masking verified per output channel, with a negative control
Claim as queued: masking is implemented per-channel, so a check that passes on one channel proves presence, not enforcement — enumerate every output channel, grep the raw secret in each, and pair with a control field that must appear unmasked.
Verified by my own fresh reproduction (the t2 worktree that produced the candidate was blocked by the session-isolation guardrail, so I rebuilt the case from scratch in my own worktree, lnpl 0.2.0, 2026-08-05): a
Password-typed field fed the planted value4111111111111111through a run with--json. One output document contained the raw card number at.result.bindings.account.cardSecretand***at.trace.logs[0].payload.cardSecret; the unmasked control fieldlabelappeared in both channels (proving both channels were captured). This independently confirms the queued evidence, including its sharpest claim — the platform's own differential check reported "PASS 4/4 masking" because it compares only the masked-clean channels.5 — Stacked declarations counted in the lowered artifact
Claim as queued: a compiler/DSL can silently keep only the last of consecutive declarations with exit 0 and no diagnostic — inspect the lowered IR/AST and count that every declared item survived before trusting runtime.
Verified by my own fresh reproduction (same guardrail note as I-4; rebuilt from scratch, lnpl 0.2.0, 2026-08-05): a workflow with
when approval.amount > 100directly followed bywhen approval.amount < 0compiled with rc=0 and zero diagnostics; both the Semantic IR JSON (lnpl compile) and the lowered MLIR contained exactly one Guard node —wf.approve.refund.guard.1, carrying the second guard's condition under the first guard's id. That id-reuse detail (absent from the queue row) became page directive 3: count by condition content, not by node-id presence. The runtime consequence (amounts0and-1approved past the dropped guard) is carried from the originating session as described context.Existing-layer check
Read: root
INDEX.md;wiki/qa/index.md(all categories);wiki/qa/exploratory/exploratory-sessions.md(full);wiki/testing/index.md;wiki/testing/quality/harness-reverse-controls.md;wiki/testing/quality/minimum-case-set.md(full);wiki/testing/quality/checks-that-cannot-pass.md(trigger sections);wiki/security/index.md;wiki/security/data/pii-handling.md;wiki/debugging/index.md; plus repo-wide greps forporcelain|untracked|-uall,control,branch coverage|guard|unknown key,mask.Overlaps found, all resolved as adjacency (cross-link), not duplication:
Open-PR overlap scan (13 open
dev-loop:knowledgePRs by title, closest by body: #32, #34, #24, #23): none covers these five. Flagged as cousins, not duplicates: PR #32infrastructure/config/keys-ahead-of-their-consumerand PR #34backend/common/api-design/unenforced-declarationsshare the "accepted but not acted on" mechanism family — #34's page is the designer's side (closed-table lookup, strictness levels, K8s KEP-2885) while I-2/I-5 are the consumer/QA side (prove your lever connects; count survivors); no content conflict, and a follow-uprelated:link between them is worth adding after whichever merges second. PR #34'stesting/strategy/differential-testingis adjacent to I-4's "ask which channels the differential check compares". PR #24/#22 completion-predicate pages share I-2's control-run spirit; PR #23guard-shape-vs-consequenceconcerns test-artifact guards, unrelated to runtimewhen/untilguards.Conflicts flagged: none — no existing directive contradicts any of the five.
Routing decision
qa/process/scope-purity-checks. Queue hintqaconfirmed: the artifact is a release/session gate ("did this run stay in its lane"), owned by qa/process alongside release-gates. Notplatforms(no OS variance) and nottesting(nothing here writes test code); the git mechanics are the page's evidence, not its owner.qa/exploratory/override-control-pairs. Queue hintqaconfirmed: probing a live system during exploratory QA. The alternative home —testing/qualitynext to harness-reverse-controls — was rejected because that category governs authoring/citing automated checks, while this governs how to measure a system by hand; the shared principle is carried by the two-wayrelated:link.qa/exploratory/guard-true-path-coverage. Same category as I-2 (same probing activity, sibling pages).security/data/masking-verification. Queue hintsecurityconfirmed: the subject is a security control's enforcement, placed besidepii-handling(which owns the design side).qawas rejected — the channel table and planted-secret method are specific to sensitive-data controls, and security/data readers are the ones about to claim "masking works".qa/exploratory/lowered-declaration-survival. Queue hintdebuggingoverridden: debugging's charter is "diagnosing a failure — finding what is wrong and why", but this directive fires before any failure is observed (pre-trust verification during QA); its natural siblings are I-2/I-3 inqa/exploratory. If it had been filed as "why did runtime approve amount 0?", the debugging methodology pages would route the investigation — the lesson worth persisting is the preventive count.qa/exploratorygrows 1→4 pages (its charter — manual/exploratory probing techniques — covers all three newcomers);security/datagrows 1→2.wiki/qa/index.md+4 rows,wiki/security/index.md+1 row; reverserelated:onchecks-that-cannot-pass,harness-reverse-controls,minimum-case-set,exploratory-sessions,pii-handling, plus cross-links among the three exploratory siblings;log.md+2 ingest entries.Invariants (checked mechanically): body lines 53/53/56/56/52 (≤120) · id matches path 5/5 · all
related:ids resolve · 0 banned vague qualifiers (one "usually" inside an OWASP quotation was caught and the quote tightened) · every Instead-of row pairs prohibition with replacement · new pages listed in domain index 5/5.