Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 84 additions & 44 deletions .dev-loop/INGEST_REPORT.md
Original file line number Diff line number Diff line change
@@ -1,53 +1,93 @@
# Knowledge consolidation — 15 open PRs (#17–#40) → one reconciled state

The 15 open `knowledge/*` PRs (created 2026-08-04 → 2026-08-05, before the
harvest processed-store dedupe fix in #41) contained 123 file-versions of ~75
unique pages, with the same insight landing at up to 3 different paths across
up to 8 PRs. Per-PR review would re-import those duplicates, so — as with the
#6–#13 consolidation — this branch carries the reconciled end-state and the 15
PRs are closed in its favor.
# Knowledge flush — 3 insight(s): 1 ingested, 2 dropped as in-flight duplicates

## Verified best-practice

Every adopted page's sources were carried from its originating PR's flush, where
they were live-verified at flush time; no new URLs were introduced during
consolidation (checked mechanically: every `http(s)` URL in every merged page
appears in a source PR's diff; every added body line in amended pages traces to
a source PR hunk — orphan-line verification). Confidence fields were kept as the
originating flushes set them, except client-side-rate-limiting where the union
of provider-doc citations (Okta, Auth0, GitHub, OpenAI, RFC 6585) supports
`verified` for the load-bearing claims. One subagent's fabricated content (12
files matching neither main nor any PR, with invented source URLs) was detected
by the same verification and replaced with true PR content.
**1. Warnings-as-errors gates vs intentional-warning features (INGESTED, confidence: verified).**
Claim: before adopting a `-Werror`/`--strict`-style promotion, run the gate against a
*valid* input that legitimately warns (deprecation, accept-and-warn declaration) — the
usual two-way check (catches a bad file / passes a clean file) cannot see this third
input class, and when the platform's diagnostics have no severity tiers the gate and
the feature are mutually exclusive; record that as a platform defect.
Sources checked:
- https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html — fetched this session;
`-Werror=<w>`/`-Wno-error=<w>` per-warning promotion/exemption exists precisely so
specific warnings can be exempted from a blanket error gate ("more specific options
have priority over less specific ones").
- https://rust-unofficial.github.io/patterns/anti_patterns/deny-warnings.html — fetched
this session; blanket `#![deny(warnings)]` is an anti-pattern because "APIs get
deprecated, so their use will emit a warning where before there was none"; the
recommended alternative is explicit lint selection deliberately excluding `deprecated`.
- Field reproduction (lnpl 0.2.0 QA re-measurement, 2026-08-05→07, evidence file
`qa/rerun/cases/batch-report/evidence/08-diag-channel.log` in the linkly repo):
unknown-verb → `--strict` rc=2 (caught); clean file → rc=0 (no false positive);
legitimate `on schedule` declaration → rc=2 anyway, via the accept-and-warn
"declared, not enforced" diagnostic. Mechanism doc-verified + locally reproduced →
**verified**.

**2. worktree_escape read-only escalation round-trip (DROPPED — pending duplicate).**
Not re-verified here; the identical insight *with the same session evidence* (Wave 2
worker's upstream-FINDINGS `awk`/`grep` verification and `git status` check each raising
`ask`/exit 5) is already carried by open PRs #47 and #51 on
`worktree-isolated-workers` — #51's version is strictly better (it names the actual rule
mechanism: main-root mention and write-verb/redirect matched independently over the
whole command string). Nothing unique remained to fold.

**3. Orca dispatch-binding stage taxonomy (DROPPED — pending duplicate).**
Idle-prompt check before binding; `runtime_unavailable` → wait and bind a fresh unit;
`agent_unconfigured` → replace the agent; always pass `--worktree` with `--terminal`.
Open PR #51 already carries all four rows on `pane-delivery-confirmation`, including the
same three field observations (busy-bind pending→failed, dead-agent recovery, worktree
mismatch). Nothing unique remained to fold.

## Existing-layer check

- Merged-main near-dup scan before consolidation: pairwise Jaccard over
title + "When this applies" across all 141 merged pages → **0 flagged pairs**;
previously merged content carries no duplication.
- Cross-PR dedup during consolidation: 10 duplicate clusters collapsed to one
canonical page each (rate limiting 8→1, call-site enumeration 7→folded into
the canonical merged in #20, stderr/exit-0 diagnostics 4→1, sysroot 2→1,
env-off-switch 2→1, completion predicates 2→1, robots.txt 2→1,
harness-mediated results 2→1, leaked artifacts 2→1, orchestration category
naming unified). Three near-pairs kept distinct after trigger comparison,
with mutual `related:` links (differential setup vs interpretation; expansion
semantics vs off-switch design; import-time tactics vs level choice).
- 24 existing pages received union-merged amendments; additions already present
in main (from #16/#20) were skipped, and all non-canonical `related:` ids
were remapped to canonical page ids (post-merge broken-link scan: 0).
Pages read: platforms-processes-tool-diagnostics-without-a-failing-exit-code, backend-common-api-design-unenforced-declarations, qa-process-release-gates, infrastructure-ci-cd-pipeline-structure, qa-exploratory-lowered-declaration-survival, infrastructure-agent-orchestration-worktree-isolated-workers, infrastructure-agent-orchestration-pane-delivery-confirmation

- Routing candidates for insight 1 were qa/process (release-gates: release checklists —
wrong altitude), infrastructure/ci-cd (pipeline-structure: stage ordering — wrong
concern), and platforms/processes. `tool-diagnostics-without-a-failing-exit-code`
already owns this exact gate: its Do-5 recommends the `-Werror`/`--strict` promotion
and Do-6 proves three states (warning/clean/error). The insight is the missing fourth
state of that same adoption check → **merged** there (Do-5 caution + Do-6 fourth
control input + 1 edge-case row + 1 Instead-of row + 3 sources), no new page.
- No conflicts: the page's existing directives stand; the merge narrows when the
promotion switch is safe rather than contradicting it.
- Related-links added both ways with `backend-common-api-design-unenforced-declarations`
— its "accept and warn" shape is exactly the intentional diagnostic that collides
with a blanket gate. Platforms domain index "load when" line extended accordingly.
- Insights 2 and 3 were checked against `worktree-isolated-workers` and
`pane-delivery-confirmation` (merged state + open-PR diffs) — covered there, see
Open-PR check.

## Open-PR check

Open `knowledge/*` heads listed via `gh pr list` at flush time:
#55 (choiyounggi-20260807-144058), #52 (dch0202-rsquare-20260807-100149),
#51 (dch0202-20260806-183029), #50 (dch0202-20260806-172420),
#49 (dch0202-rsquare-20260806-142309), #47 (dch0202-20260806-130040).

- Insight 1 (warnings-as-errors): diffed #51 and #47 fully; file lists of #55/#52/#50/#49
checked via `git diff --name-only` / `gh api pulls/N/files` — none touches
`wiki/platforms/processes/tool-diagnostics-without-a-failing-exit-code.md` or carries
an overlapping trigger. Verdict: **new** (ingested).
- Insight 2 (worktree_escape read-only escalation): #47 adds the same directive and the
same session evidence to `worktree-isolated-workers`; #51 adds a refined version (rule
mechanism + budget-the-round-trip row). Verdict: **drop**.
- Insight 3 (dispatch-binding taxonomy): #51 adds all four rows + the same three field
observations to `pane-delivery-confirmation`. Verdict: **drop**.

Note for review ordering: #47 and #51 both amend `worktree-isolated-workers`'s Do-this
table near the same rows — whichever merges second will need a trivial conflict
resolution (both versions are compatible; #51's is the more precise).

## Routing decision

- New categories: `infrastructure/agent-orchestration` (5 pages; unified the
competing `orchestration`/`agent-orchestration` names), `databases/data-survey`
(1), `qa/deliverables` (1). All other pages route into existing categories.
- Canonical-path decisions: rate limiting → `backend/common/reliability/`
(sits beside timeouts-and-retries; 6 of 8 variants chose it); stderr
diagnostics → `platforms/processes/` (concern spans beyond shells); leaked
artifacts → `testing/data/artifact-leakage-from-a-suite`; call-site
enumeration → the existing `backend/common/change-impact/` page.
- All 38 new pages listed in their domain indexes (nearest-index rule; backend
routes via its python sub-index for bytecode-cache-staleness); INDEX.md domain
summaries updated for infrastructure/qa/databases. Full-wiki lint: frontmatter,
ids, related-links, index coverage, size, qualifiers, staleness → 0 findings.
- Insight 1 → `platforms/processes/tool-diagnostics-without-a-failing-exit-code`
(merge, no new page, no new category). The harvested `domain: qa` hint was re-routed:
the merged wiki already holds the owning page for this gate under platforms/processes,
and merge-before-create outranks the hint (precedent: 2026-08-04 keg-only re-route in
log.md). qa/process/release-gates covers release checklists, not diagnostic-gate
adoption mechanics, so no qa page was created.
- Insights 2, 3 → no target; retired from the queue as pending duplicates of open PRs
#47/#51 (their would-have-been targets are the two agent-orchestration pages named
above, where the content already sits).
1 change: 1 addition & 0 deletions log.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,4 @@ Append-only. Format: `## [YYYY-MM-DD] <ingest|revise|lint|gap|contradiction|drif
## [2026-08-06] revise | Union-merged amendments from the same 15 PRs into 24 existing pages (largest: tests-that-cannot-fail — 7 PRs: per-assertion mutation granularity, restore-mechanism-by-commit-state, suite-total-drop detection; portable-shell-scripts — 8 PRs: POSIX inline set-- reordering, ${VAR:-} vs ${VAR-} colon semantics, quote-by-what-the-text-is; test-data-and-isolation — 6 PRs: env-derived write paths, absent-variable cases, exec-bit fixtures, leak attribution; change-impact/call-site-enumeration — 8 unique additions from 7 path-variants: rename-in-place, same-type reorder, *args forwarding, two-searches-agree fallacy, codemod, coverage completion check). All non-canonical cross-page ids remapped to canonical pages; every added line traced to its source PR hunk (fabricated worker output was detected by orphan-line verification and replaced with true PR content).
## [2026-08-06] dedup | Cross-PR duplicate clusters collapsed: client-side rate limiting (8 PR versions at 3 paths → 1), call-site enumeration (7 versions at 7 paths → additions folded into the already-merged canonical page), stderr/exit-0 diagnostics (4 versions at 4 paths → 1), macOS sysroot (2→1), env-var off switch (2→1), completion predicates (2→1), robots.txt (2→1), harness-mediated results (2→1), leaked test artifacts (2→1), orchestration category naming (orchestration vs agent-orchestration → agent-orchestration). Kept distinct after trigger comparison: differential-testing vs differential-run-agreement (setup vs interpretation), unset-versus-empty-parameters vs env-var-off-switches (semantics vs design, cross-linked), import-time-side-effects vs test-level-choice edge (tactics vs level choice, cross-linked). Merged-main near-dup scan (Jaccard over title+trigger, 141 pages): 0 pairs — no duplication among previously merged content.
## [2026-08-06] ingest | Reconciled post-consolidation flush PRs #42–#43 (created against pre-#44 main). Folded unique content: platforms/filesystems/permissions-and-exec-bits (+`sh "$SCRIPT"` interpreter-invocation rows — stubs need no exec bit, avoids EDR chmod+x heuristics), platforms/shells/command-text-inspected-before-execution (+gate-AUTHOR step 8: parse all three POSIX quoting forms, expand only ~/$HOME/${HOME}; red-then-green bats evidence), testing/quality/checks-that-cannot-pass (+vacuously-green pre-implementation test row), platforms/processes/tool-diagnostics-without-a-failing-exit-code (+repeat-suppression edge, +clang reproduction source), infrastructure/ci-cd/secrets-handling (+independent credential channels row: gh token vs git SSH vs API token, git push --dry-run / author:@me probes), testing/mocking/what-to-mock (+ESM read-only-bindings DI rows, +PATH-emptied tripwire negative-proof). Dropped as duplicates of the #44 state: #42's rate-limit row (already in timeouts-and-retries + client-side-rate-limiting), #42's warning-only-diagnostics page (same trigger as tool-diagnostics-without-a-failing-exit-code), #42's leak-attribution row (already in test-data-and-isolation).
## [2026-08-07] ingest | knowledge-flush of 3 queued insights: 1 merged, 2 dropped as in-flight duplicates. Merged: platforms/processes/tool-diagnostics-without-a-failing-exit-code — the warnings-as-errors adoption check gains a fourth control input (a valid file that legitimately warns: deprecations, accept-and-warn declarations); without per-diagnostic severity control the promotion switch and the intentional-warning feature are mutually exclusive, recorded as a platform defect (+1 Do-5 caution, Do-6 fourth state, +1 edge case, +1 Instead-of; sources: GCC -Werror=/-Wno-error= granularity, rust-unofficial deny-warnings anti-pattern, lnpl 0.2.0 --strict field reproduction rc=2 on a legitimate `on schedule` declaration). Cross-linked both ways with backend/common/api-design/unenforced-declarations (its accept-and-warn shape is exactly the diagnostic that collides with a blanket gate). Dropped: worktree_escape read-only escalation round-trip (same evidence already in open PRs #47 and #51 on worktree-isolated-workers) and orca dispatch-binding stage taxonomy (already in open PR #51 on pane-delivery-confirmation, incl. the same three field observations).
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ sources:
- https://kubernetes.io/blog/2023/04/24/openapi-v3-field-validation-ga/
- https://json-schema.org/draft/2020-12/json-schema-validation
last_verified: 2026-08-05
related: [security-input-validation-at-trust-boundaries, infrastructure-config-environment-config, backend-common-api-design-error-responses, qa-process-acceptance-criteria]
related: [security-input-validation-at-trust-boundaries, infrastructure-config-environment-config, backend-common-api-design-error-responses, qa-process-acceptance-criteria, platforms-processes-tool-diagnostics-without-a-failing-exit-code]
---

# Accepting a Declaration the System Does Not Enforce
Expand Down
2 changes: 1 addition & 1 deletion wiki/platforms/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Match your situation to a "load when" line; load only matching pages.
| [background-services](processes/background-services.md) | Something must run persistently or on a schedule on a dev machine or server (daemon, watcher, cron-style job); a "started" process dies when the terminal/SSH/agent session ends; choosing nohup vs LaunchAgent vs systemd unit vs cron/timer; a job works in the terminal but fails under cron/launchd (minimal environment); wiring service logs and restart policy |
| [parsing-cli-structured-output](processes/parsing-cli-structured-output.md) | About to write automation that parses another CLI/tool's `--json` output (field names, nesting) — wrapping a desktop app's CLI, an orchestrator, a cloud tool; deciding how to confirm exact field paths without guessing; making the parser unit-testable without the live tool via a captured fixture |
| [driving-a-tui-in-a-tmux-pane](processes/driving-a-tui-in-a-tmux-pane.md) | Sending prompts or keystrokes into a long-lived interactive program in a tmux pane (`send-keys`) and needing to know it was consumed; a `capture-pane` before/after diff as delivery evidence; a payload that begins with `-` or comes from a variable; choosing between polling pane text and an out-of-band status artifact |
| [tool-diagnostics-without-a-failing-exit-code](processes/tool-diagnostics-without-a-failing-exit-code.md) | Wiring a compiler/linter/type-checker/validator into a hook, CI step, or agent loop so its complaints reach the author; the tool prints warnings to stderr but exits 0 so an exit-code-only wrapper reports success; choosing the redirection order that captures stderr without the build artifact; choosing which exit code and stream actually deliver text to the model |
| [tool-diagnostics-without-a-failing-exit-code](processes/tool-diagnostics-without-a-failing-exit-code.md) | Wiring a compiler/linter/type-checker/validator into a hook, CI step, or agent loop so its complaints reach the author; the tool prints warnings to stderr but exits 0 so an exit-code-only wrapper reports success; choosing the redirection order that captures stderr without the build artifact; choosing which exit code and stream actually deliver text to the model; adopting a warnings-as-errors promotion (`-Werror`, `--strict`, `--max-warnings 0`) on a platform whose valid usage legitimately warns (deprecations, accept-and-warn declarations) |
| [non-interactive-cli-invocation](processes/non-interactive-cli-invocation.md) | Calling a tool that can prompt (agent CLI, ssh, git, package manager) from a script, CI step, hook, or agent session, including with its own `-p`/`--print`/`--yes` flag; such a call produced no output and never returned; deciding whether a hang belongs to the client, the network, or the far-side service; choosing the stdin/timeout/fail-fast switches for an unattended call; a TTY-detecting tool changes its output format under automation; driving its interactive REPL with injected keystrokes (tmux `send-keys`/`expect`) and a pasted prompt never submits |

## toolchains
Expand Down
Loading
Loading