knowledge: 13 insights — app/DB clock boundaries, changed-files CI gates, TS compiler inventory, mutation-harness custody, exec memory budget - #151
Open
dch0202-rsquare wants to merge 3 commits into
Conversation
5 new pages, 5 amended pages, 4 domain indexes. New: - databases/transactions/application-clock-vs-database-timestamps - infrastructure/ci-cd/changed-files-only-gates - backend/common/change-impact/compiler-as-call-site-inventory - testing/quality/mutation-harness-file-custody - infrastructure/containers/exec-added-processes-and-the-memory-budget Amended: tests-that-cannot-fail, source-text-wiring-assertions, widening-a-closed-value-table, evaluating-review-feedback, host-cgroup-visibility. Of 21 claimed candidates: 13 ingested, 2 dropped as out-of-layer (private MCP/tooling specifics), 6 released for a later flush. Details and sources in .dev-loop/INGEST_REPORT.md.
An independent adversarial cross-check refuted the first draft's claim that `prettier --check` exits 0 on an empty match set. Measured all seven cases against Prettier 3.7.4 and rewrote the page around the result: - silent vacuous passes (rc 0): no operands; all operands ignore-filtered; unsupported extensions with --ignore-unknown - loud (rc 2): a pattern or word-split operand matching nothing -- which still prints "All matched files use Prettier code style!", so the log misleads even though the exit code does not The page now judges by exit code plus a logged file list rather than by the success sentence. INGEST_REPORT rows 3/5 and the log.md entry corrected to match.
Contributor
Author
|
Note for the owner: the |
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 — 13 insight(s) ingested (21 claimed, 2 dropped, 6 released)
Cross-Check: 1× independent adversarial
claudeCLI headless pass over the 5 new pages — it refuted the changed-files gate page's "prettier exits 0 on an empty match set" claim; re-measured against Prettier 3.7.4, confirmed the reviewer was right (unmatched operand exits 2), and rewrote the page, report rows 3/5 andlog.md. Other 5 claim groups verdicted sound. Limits: the reviewer's sandbox blocked repo reads, so source-quote-supports-directive and self-contradiction dimensions went unaudited (details in## Cross-Check).Queue drained under run id
20260827-125731-38371(this session is the detachedhooks/auto-flush.shrun; its step-0 acquire resolved re-entrantly toalready-owned, not to a competing holder). 21 rows were claimed; 13 areingested below, 2 are retired as out-of-layer, and 6 are released back to
pendingfor a later flush because each needs its own page rather than a row,and rushing six more pages in one pass would have lowered the bar on all of them.
Verified best-practice
Every external claim below was live-fetched this session and quoted in the page's
Sourcesblock. Field evidence carries the repo, date, and the measured numbers.now()istransaction_timestamp()(fixed at transaction start) whileclock_timestamp()"changes even within a single SQL statement";RETURNINGyields computed defaults "without needing a separate database query"functions-datetime,dml-returning,transaction-isonow, widening a<= boundarysetrtb-unifiedpackages/orpc/src/routers/batch.ts— codifies "onenowper decision" and passesnowinto the boundary helper; its result type omits the boundary, which is the shape that invites recomputationprettier --checkare: no operands (rc 0), all operands ignore-filtered (rc 0), and unsupported extensions with--ignore-unknown(rc 0). A pattern/operand matching nothing exits 2 — it prints the success sentence and an unmatched-pattern errorcmd $FILESarrives as one operandSH_WORD_SPLIT)rtb-unified, zsh) + local measurement 2026-08-27rc=2. The page now says explicitly that this row fails loudly unless--no-error-on-unmatched-patternis set. Probe placement re-confirmed:.claude/tmp/is.gitignored, so a probe there passes at rc 0tsc's program isfiles∪include∪ transitive imports;exclude"only changes which files are included as a result of theincludesetting" and does not stop an imported file entering the program#include,#excludeexcludesentence quoted (it sharpens the rule to "in the program", not "ininclude")rtb-unified):grep "DealViewer"reported 3 construction sites, actual 8 — the missed set included production wiringrouters/deal.ts:38;ContractScopeActor7→~22. Separately,packages/orpc/tsconfig.jsoninclude: ["src/**/*"]produced 3 production + 13 api-test errors and zero for__tests__/routers/deal.test.ts, whose 6 sites appeared only as 6 failing testsmemory.peakis max usage since creation/reset; atmemory.max"the OOM killer is invoked in the cgroup"; inmemory.events,maxcounts times usage "was about to go over the max boundary" — distinct fromoom_killmaxas a kill; the page now states the distinction explicitlyexec'd process joins the container's cgroup and is invisible to the application's own semaphoremanage-resources-containers,assign-memory-resource,kubectl execreference + field 2026-08-26 (review-bot pod,limits.memory: 3Gi):memory.current2.54 GiB,memory.peak3.0 GiB (at the limit),memory.events: max 5, whilemaxConcurrentAgents: 20reported free slotsgit diffis empty whether restored or destroyedrtb-unified, NEWRTB-2936): restore wroteschemas/deal.tsintorouters/deal.ts→Cannot find module './common.js',grep -c dealRouter= 0; both files were 154 lines, so a line-count check passed; after re-keying, M9/M10 flipped SURVIVED→KILLED. Plus stryker mutant-states / pitest for the verdict vocabularyrtb-unified): withstaleQueuedJobIds: []the code early-returned; the widening the assertion claimed to catch survived 116/116 greenreport.py:393/416/425, not the assumedfill_plan.py:307— sibling modules, one already fixedrtb-unifiedPR #965): foldingDISPLAYABLE_ERROR_CODESintoUSER_FACING_ERROR_CODESwould have addedUNAUTHORIZED+VALIDATION_ERROR, exposing raw server messages as inline UI errors; caught only by computing the difference firstNot upgraded: nothing was marked
verifiedon field evidence alone. Two pagescarry
confidence: field-tested(mutation-harness-file-custody,plus the pre-existing
evaluating-review-feedback), and no candidate wasrecorded as
verifiedwithout a fetched primary source.Existing-layer check
Method: routed via
INDEX.md→ domainindex.md; then built a full id+titleindex of all 265 pre-existing pages and probed it with concept greps
(
clock_timestamp|clock skew,changed[- ]files|--ignore-unknown,tsconfig,contextual typ|excess property,set difference|allowlist,cgroup,basename|backup.*restore,2>&1,delta|baseline) before deciding new vs merge.Pages read: testing-quality-source-text-wiring-assertions, testing-quality-tests-that-cannot-fail, backend-common-change-impact-call-site-enumeration, backend-common-change-impact-widening-a-closed-value-table, qa-process-evaluating-review-feedback, infrastructure-containers-host-cgroup-visibility, testing-quality-behavior-not-implementation
Findings:
typing, allowlist set-difference, app-clock-vs-DB-timestamp, exec-into-a-running-container.
The concept greps returned no hits for these; the clock hits were incidental
(offline sync, token handling) and none compared an app clock to a DB column.
insight is
source-text-wiring-assertionsstep 2 verbatim ("Make theassertion's subject the file with comments removed"), and its false-RED and
negative/count false-GREEN shapes are already edge rows. Only the empty-slice
consequence was new, so that alone was merged.
source-text-wiring-assertionssits at exactly 120 body lines (thedocumented cap). Rather than add a row and violate maintenance invariant 5, the
new nuance and the new field evidence were merged in place into an existing
edge row and an existing source bullet. Body count re-measured after editing:
still 120.
The one correction made was to a candidate, not to the wiki (item 9: the
memory.eventsmaxcounter is approaches-to-limit, not kills).tests-that-cannot-fail↔mutation-harness-file-custody;widening-a-closed-value-table↔compiler-as-call-site-inventory(+errors-diagnostics-from-a-shared-code-path);host-cgroup-visibility→exec-added-processes-and-the-memory-budget(from its existing self-monitoring row).
log.mdappended. Root
INDEX.mdunchanged — no new domain.Gates run (the exact CI commands from
.github/workflows/test.yml):node scripts/wiki-structure-checks.js wiki→ pages: 270, indexes: 13,findings: 0;
node scripts/wiki-lint-prohibitions.js wiki→ directives 72,compliant 72, violations 0 (the 1
infois pre-existing inconfig/keys-ahead-of-their-consumer.md, untouched);bash scripts/check-versions.sh→
ok: dev-loop 1.11.2. Thebats tests/job was not run — bats is notinstalled on this machine, and this change touches only wiki markdown (no
scripts or hooks), so that suite's subject is unchanged.
Open-PR check
gh pr list --repo choiyounggi/dev-loop --state open --search "head:knowledge/"returned no open PRs, and a second unfiltered
gh pr list --state openreturned none either — the repository has zero open PRs at flush time. There
were therefore no in-flight sibling branches to diff against, and no
git fetch origin <head>/git diff origin/main origin/<head> -- wiki/comparisons to run.
Per-candidate verdict: all 21 =
new. Nofold, nodrop-as-pending-duplicate.(The 2 drops recorded below are out-of-layer drops, not pending-duplicate drops.)
Routing decision
New pages (5)
application-clock-vs-database-timestamps2b27d15d+bea92fddtransactionschosen overschema-designbecause the decisive content is transaction-time semantics (now()= transaction start ⇒ stamp order ≠ commit order) and the fix is a lock/isolation choicechanged-files-only-gatesff041061+4b9af3a0compiler-as-call-site-inventory702dcf4e+94d55f2fcall-site-enumerationis the sibling case (callers of a changed signature, Python positional-vs-keyword) and is at 80 body lines; the TS mechanism is constructors of a type with its own workflow, so per "one case per page" it is a separate page, cross-linkedmutation-harness-file-custody6a9de235+41fa1c87harness-reverse-controlscovers scoring a harness; nothing covers the harness's custody of the tree. Both candidates are that one case (keying, and the read window)exec-added-processes-and-the-memory-budget7b9e8788host-cgroup-visibilityis cross-pod read mechanics and explicitly routes self-monitoring elsewhere;resource-limits-and-probesis manifest authoring. This is a runtime preflight before adding loadNo new category was created — all five landed in existing categories.
Merged into existing pages (5 candidates)
91ef5d53testing-quality-tests-that-cannot-failf189f423testing-quality-source-text-wiring-assertionsbb6d8539backend-common-change-impact-widening-a-closed-value-table60a817eeqa-process-evaluating-review-feedback7b9e8788infrastructure-containers-host-cgroup-visibilityDropped — out of layer (2, retired)
094dedf3— a Figma MCPinspect_node→get_dev_readychildren-fetchworkaround. The server is a private, org-internal MCP plugin; the behavior is
not publicly verifiable and the directive does not transfer to any other reader.
e165a365— an/rtb:reviewremote-fallback runbook naming~/.claude/tools/rtb-remote-review.shand an internal pod. The transferablekernel ("a two-provider review gate degraded to one provider is not a passed
gate") is already the subject of
qa-process-llm-review-pipelines; what remainsis machine-specific paths.
Released back to
pending(6) — each needs its own page, not a row, and isbetter served by a dedicated pass than by being appended here:
81dc1f98(naming the carrier field/type when a plan says "wire A to B"),b9ae304a(VAR="$(cmd 2>&1)"mixing stderr into a value used as a path),fdd0b3c6(monitor markers anchored at line start; delta rather than absolutestate; first cycle records a baseline),
c2adb2be(positional-order assertions on rendered SQL predicates),815e8cb9(grep only activeDATABASE_URLassignments, and confirm whichdotenv file the tool loads, before a destructive DB command),
f1146adb(CI ticket-key extraction scoped by changed-file intersection ratherthan by mention).
Decision Log
Intent. Drain the harvested
★ Insightqueue into reviewable wiki knowledgewithout lowering the wiki's evidence bar. The queue held 21 rows accumulated over
several days; the goal was correct routing and real verification, not a high
ingest count.
Alternatives considered and rejected.
and writing six more pages in one pass would have produced thin, weakly-sourced
entries. They are released to
pending, not dropped, so the next flush takesthem with a full budget.
call-site-enumeration. Rejected:that page is the sibling case (callers of a changed signature, Python
positional-vs-keyword). AGENTS.md requires one case per page, so the
constructor-enumeration case became its own page, cross-linked both ways.
source-text-wiring-assertionsfor the empty-slice nuance.Rejected: that page is at exactly the documented 120-line body cap, so adding a
line would violate maintenance invariant 5. The nuance was merged in place
into an existing edge row instead; body re-measured at 120.
directive is already the page's step 2, but the empty-slice consequence
(vacuous green, not the documented noisy red) was genuinely absent.
see below; the check found a real error, which is the argument against exempting.
originas the skill's snippet does. Not available: this contributorhas no write access to
choiyounggi/dev-loop(403). Used the pre-existingforkremote, which is how every prior knowledge branch here was published.git config user.name. The skill's ASCII sanitisation of aKorean name yields an empty string →
anon, defeating the attribution thebranch name exists for. Used the gh login, matching existing branch names.
Where reviewers should look hardest.
infrastructure/ci-cd/changed-files-only-gates.md— rewritten after thecross-check. The measured table is the load-bearing part; please sanity-check
it against your own Prettier version, since the exit codes are version-visible
behaviour rather than a documented contract.
databases/transactions/application-clock-vs-database-timestamps.mdstep 5–6 —the claim that timestamp order is not commit order, and that the remedy is a
lock/isolation level rather than finer clock resolution.
[추정]on the MySQLNOW()/SYSDATE()row: taken from general MySQL semantics, not fetched thissession like the PostgreSQL pages were.
widening-a-closed-value-table.mdDo-this 6–7 — this inserts a security-shapedconcern (allowlist widening) into a page whose original subject was value
tables. If that reads as two cases, it should be split.
for this wiki, they should be restored rather than retired.
Cross-Check
Independent adversarial pass via
claudeCLI headless (separate process, noshared context), prompted to refute rather than confirm, over the five new pages'
technical claims.
It found a real error, and the page was rewritten because of it. The reviewer
challenged the claim that
prettier --checkexits 0 on an empty match set,arguing an unmatched pattern errors by default and that exit-0 belongs to the
ignore-filtered case. I resolved it by measurement rather than by argument —
running all seven cases against Prettier 3.7.4 — and the reviewer was right:
an unmatched operand exits 2 (while still printing the success sentence),
whereas the genuine silent vacuous passes are no-operands, all-ignore-filtered,
and
--ignore-unknown-with-unsupported-extensions. The page, this report'srows 3 and 5, and the
log.mdentry were all corrected.Verdicts on the other five claim groups: sound (PostgreSQL clock semantics —
noted as if anything understated; zsh word-splitting; TS contextual typing;
tscprogram membership incl.exclude-does-not-stop-imports; cgroup v2maxvsoom_killandkubectl execcgroup placement).Stated limits of the check: the reviewer's sandbox denied it read access to
~/.dev-loop/repo/wiki, so it adjudicated the six claims as quoted in its promptand could not audit (b) whether each
Sourcesquote supports the directive itis cited for, or (c) whether any page contradicts its own edge-case rows. Those
two dimensions remain unreviewed by an independent party and are the residual
risk in this PR. A first attempt also returned only the session's Stop-hook
output rather than a verdict; that run was discarded rather than read as
"no findings".
Review notes
main.(
최영기 <dch0202@rsquare.co.kr>, ghdch0202-rsquare); no assistant identityand no
Co-Authored-Bytrailer. The branch uses the gh login becausesanitizing the Korean
user.nameto ASCII yields an empty string, which theskill's snippet would have turned into
anon— that would have defeated theattribution the branch name exists for.
wiki/**, four domain indexes,log.md, and this report.Two untracked leftovers from earlier flushes
(
.dev-loop/CROSSCHECK_FINDINGS.md,.dev-loop/fold-note-73.md) were leftuntouched and unstaged.