knowledge: signed-link verification assertions, cross-module consumer census, defect-class re-sweep, synced-cluster pod triage, cloud CLI bounds (5 ingested, 1 dropped as dup of #52) - #76
Conversation
|
Reviewed this PR against a parallel manual flush of the same six candidates (same queue, run concurrently — see the separate issue on flush concurrency). Both pages here are more accurate than what the manual run produced, and that run's output is being discarded rather than opened as a competing PR. Two things worth folding in, one of them load-bearing. 1.
|
| Case | Then |
|---|---|
| The docs' phrase "still handles pagination with the service" reads as "every page is fetched regardless" | It means the CLI owns the token loop, not that the loop runs to exhaustion — the paginator stops at the cap (awscli/botocore/paginate.py: truncate-then-break, and a resume_token break on an exact page boundary). Cap-then-stop is the actual behaviour, so --max-items bounds the call count as well as the output |
Worth a row specifically because the sentence invites the opposite reading, and the wrong reading changes what you reach for on a loaded production account.
2. failing-pod-on-a-repo-synced-cluster — nothing to fix, one note
Checked against the defects an adversarial review found in the parallel draft: the exitCode: 137 / reason: OOMKilled pairing is sourced here (the assign-memory-resource worked example) where the parallel draft had dropped it as unsourced; "the runtime enforcing the memory limit" avoids mis-attributing the kill to the kubelet; the 137-with-another-reason edge keeps it from reading as a biconditional; and phase vs container state are kept on separate axes. All four are places the parallel draft got wrong. No change requested.
(Not pushing to this branch — the additions above are for the author/owner to take or drop.)
… (fold from a later flush)
|
Folded one candidate from the 2026-08-13 knowledge-flush into this branch rather than opening a sibling PR (commit What it adds — Why here and not a new page — step 5 already says to read the remediation as unreviewed code; this is the concrete sweep list for that step, so it belongs on the same page. The rest of the candidate was already covered by this page and is retired rather than re-ingested. Evidence — PR #327, bot review rounds 13→14: 4 of round 14's 7 warnings were defects introduced by round 13's remediation, one per shape in the new table. Body stays at 80 lines (limit 120). No other file touched. |
Knowledge flush — 6 insight(s): 5 ingested, 1 dropped
Queue drained:
~/.dev-loop/queue/{231f63bc,27bf507a,498e892c}.jsonl— 6 pending rows.Verified best-practice
Every URL below was opened in this session and the quoted sentence checked against
the fetched page. No citation was inherited from a draft, another wiki page, or a
prior flush without reopening it.
1. Assertions for a signed/tokenized link →
confidence: verifiedClaim: assert the token through the verifier the receiver runs (correct subject
accepts; wrong subject and wrong key reject), and issue the real request with a
token-stripped control — presence of
?t=is satisfied by a hardcoded placeholder.https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html—confirmed verbatim: "When you create a presigned URL, you must provide your
security credentials, and then specify the following:" + bucket / object key /
HTTP method / expiration interval; "Amazon S3 checks the expiration date and time
of a signed URL at the time of the HTTP request"; the
SignatureDoesNotMatchFAQ"verify that all request parameters—including the HTTP method, headers, and query
string—match exactly between URL generation and usage".
https://docs.python.org/3/library/hmac.html— confirmed verbatim: "Whencomparing the output of
digest()to an externally supplied digest during averification routine, it is recommended to use the
compare_digest()functioninstead of the
==operator";compare_digest"uses an approach designed toprevent timing analysis by avoiding content-based short circuiting behaviour".
assembly path; wrong-key and wrong-batch mutants left
?t=well-formed so everyformat assertion stayed green, while the verifier assertion and 3 live-GET
assertions reddened; the no-op control survived.
2. Cross-module consumer census →
confidence: verifiedClaim: count production references to a task's new public symbols outside the
defining module and outside its own tests, then treat only symbols with declared
cross-module intent as defects.
https://knip.dev/reference/configuration— confirmed verbatim: "In files withmultiple exports, some of them might be used only internally. If these exports
should not be reported, there is a
ignoreExportsUsedInFileoption available";"By default, Knip does not report unused exports in entry files". These two
options are the tool's own encoding of the internal-helper and entry-point
populations that a raw zero-reference count cannot separate from real orphans.
https://knip.dev/guides/handling-issues— confirmed verbatim: "So a surprisingresult is usually a real finding or a configuration gap, not a false positive to
silence", plus the pre-deletion checks (export in an entry file, re-exported from
an entry file, consumed externally).
public functions had zero cross-module production references; exactly 1 was a
real gap (a URL builder whose docstring named its consumer), the other 13 were
same-module helpers. All 6 tasks had passed review, 402 tests green, no conflicts.
3. Defect-class re-sweep over your own remediation diff →
confidence: verifiedClaim: re-run each finding's class search over the post-edit file including the
lines the remediation just added; read the remediation as unreviewed code.
https://www.eecg.utoronto.ca/~yuan/papers/incorrect_fix_abstract.html—confirmed verbatim: "at least 14.8% to 24.4% of sampled fixes for post-release
bugs in these large OSes are incorrect" and "27% of the incorrect fixes are made
by developers who have never touched the source code files associated with the
fix". Title/authors/venue confirmed on the same page: Yin, Yuan, Zhou, Pasupathy,
Bairavasundaram, "How Do Fixes Become Bugs?", FSE 2011.
https://dl.acm.org/doi/10.1145/2025113.2025121— cited as the published recordfor that paper. Not opened (ACM interstitial); it is a locator for the
abstract page above, which was opened and quote-checked. Flagged here rather
than presented as read.
string into its error message; the same round's remediation added a sibling
checker with the identical leak, reproduced by an independent audit with a key
containing a carriage return.
4. Failing pod on a repo-synced cluster →
confidence: verifiedClaim: branch on pod phase before reading logs; read
lastState.terminatedexitCode/reason first; land the fix as a manifest PR, not a live edit.
https://kubernetes.io/docs/tasks/debug/debug-application/debug-pods/— confirmedverbatim: "Check the current state of the Pod and recent events with the following
command:
kubectl describe pods ${POD_NAME}"; "There should be messages from thescheduler about why it can not schedule your pod"; "The most common cause of
Waitingpods is a failure to pull the image".https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/—confirmed verbatim: the worked example prints
exitCode: 137/reason: OOMKilledunder
lastState: terminated:, introduced by "The output shows that the Containerwas killed because it is out of memory (OOM)".
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_logs/— confirmedverbatim:
-p, --previous= "If true, print the logs for the previous instance ofthe container in a pod if it exists."
https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/— confirmedverbatim: "By default, changes that are made to the live cluster will not trigger
automated sync"; self-heal = "To enable automatic sync when the live cluster's
state deviates from the state defined in Git"; and the multi-source caveat
"Disabling self-heal does not guarantee that live cluster changes in multi-source
applications will persist."
https://man7.org/linux/man-pages/man1/bash.1.html— confirmed verbatim: "Thereturn value of a simple command is its exit status, or 128+n if the command
is terminated by signal n" — the convention that makes 137 read as 128+9.
5. Cloud CLI invocation bounds →
confidence: verifiedClaim: read the leaf subcommand's help; name the scope on every invocation; cap
list output at the call site; disable pager/prompts for unattended callers.
https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-help.html— confirmedverbatim:
aws help"displays help for the general AWS CLI options and theavailable top-level commands";
aws ec2 help"displays the available AmazonElastic Compute Cloud (Amazon EC2) specific commands"; operation help "includes
descriptions of its input parameters, available filters, and what is included as
output"; and "
describe-instanceshas a default behavior that describes allinstances in the current account and AWS Region".
https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-pagination.html—confirmed verbatim: "By default, the AWS CLI uses a page size determined by the
individual service and retrieves all available items";
--max-items"prints outonly the number of items at a time that you specify"; mixing
--page-sizeand--max-items"you can get unexpected results with missing or duplicated items";"By default, this feature returns all output through your operating system's
default pager program", disabled per command by
--no-cli-pager.https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html—confirmed verbatim: "You can override an individual setting by either setting one
of the supported environment variables, or by using a command line parameter."
https://docs.cloud.google.com/sdk/gcloud/reference— confirmed verbatim:--project"The Google Cloud project ID to use for this invocation. If omitted,then the current project is assumed";
--quiet"Disable all interactive promptswhen running
gcloudcommands. If input is required, defaults will be used, or anerror will be raised."
aws cloudwatch): callsinherited no region, every invocation failed closed, and the guard the hook
implemented never evaluated.
6. Python
.pyccache staleness in a mutation harness → dropped, see Open-PR check.Its remedy was checked anyway:
https://docs.python.org/3/using/cmdline.htmlconfirms
-B= "If given, Python won't try to write.pycfiles on the import ofsource modules" and
PYTHONDONTWRITEBYTECODE"is equivalent to specifying the-Boption". Both govern writing only — so the candidate's directive ("run under
-B") is incomplete on its own: an existing.pycis still validated and reused.Open PR #52 already states exactly this correction, which is why the candidate is
dropped rather than ingested.
Existing-layer check
Routed via
INDEX.md, then each target domain'sindex.md, then every page whose"load when" line overlapped the candidate.
Pages read: testing-quality-signed-link-verification-assertions, testing-quality-harness-reverse-controls, backend-python-language-bytecode-cache-staleness, backend-common-change-impact-cross-module-consumer-census, qa-process-defect-class-resweep-after-review, infrastructure-containers-failing-pod-on-a-repo-synced-cluster, platforms-processes-cloud-cli-invocation-bounds
Read at frontmatter level only (to add reciprocal
related:ids, bodies notre-read):
testing-quality-write-path-assertions,infrastructure-containers-resource-limits-and-probes,platforms-processes-parsing-cli-structured-output. Domain indexes read in full:wiki/{testing,qa,backend,infrastructure,platforms}/index.md.Overlaps found and how they were resolved
backend-python-language-bytecode-cache-staleness(onmain) —the merged page already carries the mtime+size invalidation mechanism, the
equal-size mutation case,
__pycache__purging and hash-based.pyc. Thecandidate's only new material was the
-B/exec(compile(...))remedy, andopen PR knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52 already adds precisely that (and corrects it). No amend written here:
amending that file would have collided with knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52 for content knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52 states better.
testing-quality-harness-reverse-controls— that page ownsthe harness-level control (a no-op mutant must survive). The new page owns the
assertion shape for a signed link and cites the harness page for its
prove-it-can-fail step. Distinct cases; linked, not merged.
backend-common-change-impact-call-site-enumeration— thatpage enumerates callers of a symbol whose contract you are changing; the new
page counts consumers of a symbol you just added. The new page states the
boundary in "When this applies" and links across.
infrastructure-containers-resource-limits-and-probes— thatpage is authoring-time sizing of limits and probes; the new page is diagnosis of
an already-failing pod. Boundary stated in both directions.
qa-process-regression-scope— that page scopes re-testing fora release; the new page sweeps one defect class across one remediation diff.
Conflicts flagged: none. No new directive contradicts an existing page.
Reciprocal links added to
write-path-assertions,resource-limits-and-probes,parsing-cli-structured-output. Reciprocal links were deliberately not added tocall-site-enumeration.md,regression-scope.mdandnon-interactive-cli-invocation.mdeven though the new pages cite them: open PRs #68/#58/#51/#50 (the first two) and
#66/#57 (the third) already modify those files, and a one-line
related:edit therewould conflict for no knowledge gain. Every id resolves either way — invariant 4 does
not require reciprocity.
Invariants re-checked programmatically after the edits (whole repo, not just the
diff): every
related:and inline page-id resolves (0 unresolved); each new page islisted in its domain index; all 5 new pages are ≤120 body lines (72/74/67/76/84).
The resolver was run with a fabricated id as a negative control and reported it
unresolved, so a clean result is not a silently-empty check.
Open-PR check
Listed with
gh pr list --repo choiyounggi/dev-loop --state open— 18 open heads:#74, #73, #72, #69, #68, #66, #64, #62, #61, #58, #57, #56, #55, #52, #51, #50, #49, #47.
Every head's changed-file list was pulled (
gh api .../pulls/N/files) and filtered tothe five candidate paths plus the amend target.
testing-quality-source-text-wiring-assertions(regex-over-source wiring guards — different case, read to confirm)corpus-sweep-before-a-rejection-rule(bounding a new rejection rule against a corpus — different case, read to confirm)wiki/infrastructure/containers/platforms/processes/pages; none touches this slug or its subjectwiki/qa/process/except #58 (regression-scope, a different page).pyccache in a mutation harness-B/PYTHONDONTWRITEBYTECODErow, thespec_from_file_locationrow, theexec(compile(...))remedy and two 2026-08-11 reproductionsNo sibling duplicate PR was opened for candidate 6, and nothing was pushed to #52 —
it needs no additions from this candidate.
Repo-state note for the reviewer. Two local branches from interrupted 2026-08-11
flushes,
knowledge/dch0202-rsquare-20260811-151241and…-160220, were pushed tothe fork but never opened as PRs. They carry earlier drafts of candidates 1–5 under
different slugs (
signed-link-assertions,new-symbols-without-a-consumer,defect-class-sweep-over-a-fix,workload-startup-failure-triage,cloud-cli-query-scoping). This PR supersedes both; they can be deleted.Routing decision
testing/quality/signed-link-verification-assertions.mdtesting/qualityowns assertion-shape decisionsbackend/common/change-impact/cross-module-consumer-census.mdchange-impactalready owns "who consumes this symbol"infrastructure/containers/failing-pod-on-a-repo-synced-cluster.mdcontainersholds the sizing/probe siblingplatforms/processes/cloud-cli-invocation-bounds.mdprocessesowns invoking other CLIsqa/process/defect-class-resweep-after-review.mdqa/processowns release-quality process.pyccache in a harnessCandidate 3's harvested
domain: infrastructureand candidate 4'splatformshintswere both honoured. Candidate 2 was harvested as
testing; it was routed tobackend/common/change-impactinstead, because the artifact under examination isapplication source (a symbol and its consumers), not a test —
INDEX.mdroutes tothe domain owning the artifact you will change, and
change-impactalready holds thesibling page for callers of a changed symbol. Candidate 5 was harvested as
qaandstayed there.
Cross-Check: no independent second agent was run — subagent dispatch is disabled for
this session — so this is a single-agent flush. What that leaves: all 14 quoted
sources were re-opened first-hand here (not inherited), the ACM DOI is disclosed
above as a locator that was not opened, and the wiki invariants were verified by a
script carrying its own negative control. The five page bodies were drafted by an
interrupted 2026-08-11 flush and were reviewed and re-sourced in this session rather
than trusted; their field-reproduction paragraphs report that session's measurements
and are not independently re-runnable here.
Decision Log
Intent
existing open PR. One PR per flush keeps review to a single pass.
quotes from the interrupted 2026-08-11 drafts these page bodies came from.
backend/common/change-impactrather than its harvestedtestinghint, because the artifact examined is application source, not a test.Alternatives rejected
bytecode-cache-staleness.mdwith candidate 6's-Bremedy — rejected:open PR knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52 already adds that row and additionally corrects it (
-Bgovernswriting only, so a stale
.pycis still reused). Amending would have conflictedwith knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52 for content knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52 states better.
…-151241,…-160220) — rejected:their slugs are earlier, weaker drafts of the same five insights, and shipping
both would create the sibling-duplicate pile-up the skill warns about.
related:ids tocall-site-enumeration,regression-scope,non-interactive-cli-invocation— rejected: open PRs knowledge: a shared emitter's repair advice must be legal on every path; falsify exclusivity claims before publishing (2 ingested, 3 dropped as in-flight dups of #47/#51/#64) #68/knowledge: bound a new rejection rule with a corpus sweep before writing it (1 ingested, 2 dropped as in-flight dups of #51) #58/knowledge: 9 insights — closed value table widening, guardrail read-vs-write correction, dispatch binding taxonomy #51/knowledge: one test per success-return site when a handler applies one policy at several returns #50/knowledge: a doc gate must resolve the code constant its table copies; split stdout/stderr in pasted transcripts (2 ingested, 3 dropped as dups of #51/#64) #66/knowledge: SIGINT to a shell-backgrounded process under test is discarded — deliver via subprocess driver (1 ingested, 2 dropped as in-flight dups of #51) #57already modify those files; invariant 4 requires ids to resolve, not reciprocity,
so the conflict buys nothing.
as a locator for the abstract page that was opened and quote-checked.
Where a reviewer should look
.dev-loop/INGEST_REPORT.md"Verified best-practice" — each quote is reproducedas checked; spot-check any one against its URL.
Open-PR checktable, specifically the candidate-6 drop row againstPR knowledge: 4 verified insights — surviving-mutant triage, source-text wiring assertions, query state vs fetch state, python text-io encoding #52's diff on
wiki/backend/python/language/bytecode-cache-staleness.md.session's measurements and were not re-run here. [추정] their numbers are
accurate as recorded; they are the one class of claim in this PR that this
session could not independently reproduce.
wiki/*/index.md"load when" lines for the five new rows — invariant 1 requiresthey enumerate the page's distinct use cases without contradicting its trigger.