fix(sqlite): floor pins to v1.49.1, 5s busy policy, loud schema setup (T17 finding 2) #2620

Open
conductor wants to merge 5 commits from fix/sqlite-floor-audits into master
pull from: fix/sqlite-floor-audits
Owner

Plain summary

Seven Go modules that write our shared databases (the memory store, caches,
the auto-task ledger, abstraction state) were compiling against a
five-generation-stale SQLite engine bundle (SQLite 3.41.2) while the owner's
boundary law requires the bundled engine to be at least 3.51.3. On top of
that, the Go stores had no wait policy for lock contention — the Python
store waits 5 seconds, the Go side failed instantly with "database is
locked", dropping agent writes on the shared memory store — and startup
schema upgrades were run with every error silently swallowed. This PR moves
all modules onto one current engine (v1.49.1 bundling SQLite 3.53.0), gives
every module the same 5-second wait policy, restores full durable commits,
makes schema setup loud and repeatable, and adds CI lints so none of it can
silently regress.

Example

With this change, when an agent writes a memory while another writer holds
the store, the writer waits up to 5 seconds and then succeeds — instead of
failing immediately with database is locked (5) (reproduced pre-fix: both
writers dropped at 0.00s; post-fix both land after ~2s). And when a module's
pin drifts below the owner floor again, the pin-lint test fails CI by name,
not by accident later.

Technical details

  • What: (a) all seven stale pins (modernc.org/sqlite v1.28.0, bundled
    SQLite 3.41.2) → v1.49.1 (bundled SQLite 3.53.0 ≥ the 3.51.3 floor,
    docs/architecture/boundary-law.md line 116; bundled version verified
    from the module's documented CHANGELOG: "2026-04-17 v1.49.0: Upgrade to
    SQLite 3.53.0"). go.sum regenerated offline via go mod tidy
    (GOPROXY=off), go directive 1.21→1.25.0 to match the driver's
    requirement (repo toolchain per go-version.txt is 1.27.1). (b) 5s
    PRAGMA busy_timeout on every Go sqlite open site (15 sites / 10 files)
    via the driver's documented _pragma DSN params — per pooled connection,
    so the policy survives database/sql pooling (post-open db.Exec pragmas
    do not). (c) synchronous=FULL replaces the synchronous=NORMAL
    contradiction (crash-anywhere durable-write law) in memory-ops,
    memory-store-deep, cache. (d) memory-store-deep schema provisioning now
    fails loudly and migrates batch-1 columns conditionally — port of
    src/rune/memory_store.py:246-263 (the blind ALTERs errored "duplicate
    column" on every already-migrated store, silently). (e) CI-enforced
    guards: tests/test_sqlite_pin_floor.py (floor + one-engine-uniformity
    lint) and tests/test_go_connect_pragmas.py (busy DSN contract + no
    synchronous=NORMAL).
  • Why: T17 audit finding 2 on base a52624b3 (re-verified on current
    master 79ff61b3 — all pins and behaviors reproduced unchanged before any
    edit).
  • Files: 7 × go.mod/go.sum under src/go (persona-definition,
    memory-store-deep, memory-ops, connection-pool, cache, auto_tasks,
    abstraction), 10 source files (incl. curator + memory-continuity busy
    waits, class coverage), 2 Python lint tests, 2 Go regression tests,
    plans doc, admission script.
  • Acceptance: red-first per docs/bugfix-contract.md — red commit
    6296ea58 (tests failing for the bug's cause: seven modules named;
    writers dropped at 0.00s with SQLITE_BUSY; connect() swallowed
    unprovisionable-store errors) precedes fix commit db6b45c6. Regression
    tests are frozen. Record: plans/2026-10-26-sqlite-floor-audit-t17-finding2.md.
  • Dependencies: none new — the resolved dep graph equals the compliant
    memory-continuity module's exact set (libc v1.72.0 et al., already cached
    on the runner).

Why it matters

It advances the machinery-first infrastructure: the indexed-state backbone
(the shared memory store agent writes land in) stops dropping concurrent
writes and stops carrying a six-generation-stale engine that the owner law
explicitly floors. Storage becomes boring again.

Related issue

T17 audit wave finding 2 (data-persistence/concurrency audit on master
a52624b3). No standalone gitea issue — repair executes the audit finding
dispatch.

Changes

  • src/go/{persona-definition,memory-store-deep,memory-ops,connection-pool,cache,auto_tasks,abstraction}/go.mod + go.sum — pin v1.49.1, go 1.25.0, tidy'd
  • src/go/memory-ops/main.go — DSN policy (busy 5s + WAL + FULL)
  • src/go/memory-store-deep/main.go — DSN policy + loud provisionSchema + conditional migration
  • src/go/memory-store-deep/{gaps_io,gaps_stats}.go — read backends share the 5s wait
  • src/go/connection-pool/main.go — pool DSN (busy 5s + WAL)
  • src/go/cache/cache.go — DSN policy + checked index creates
  • src/go/auto_tasks/auto_tasks.go — DSN policy (pragma out of the stmt list)
  • src/go/abstraction/abstraction.go + replay.go — DSN policy + busyDSN for replay opens
  • src/go/curator/store.go, src/go/memory-continuity/store.go — busy waits (class coverage on the shared store)
  • tests/test_sqlite_pin_floor.py, tests/test_go_connect_pragmas.py — CI guards
  • src/go/memory-ops/busy_timeout_test.go — two-writer concurrency regression
  • src/go/memory-store-deep/schema_errors_test.go — loud-setup + idempotent-migration regressions
  • plans/2026-10-26-sqlite-floor-audit-t17-finding2.md — finding → red test → commit
  • scripts/admit_wave_sqlite_floor.py — construction admission record

Rune v1 authority admission

Not applicable — storage-engine maintenance of the existing indexed-state
backbone; no new cognitive/runtime mechanism, no new selection authority.

Required verification

  • Research and findings are linked (T17 audit, plans doc)
  • Acceptance canaries were written before implementation (red tests first, red evidence frozen in the red commit)
  • CI Pipeline / required-checks passes (watching this run)
  • No credentials or hardcoded private paths were added
  • Documentation and wiki links were updated (plans doc carries the record; no user-facing docs change)
  • Both TUI and MiMoCode were updated when applicable (not applicable — no TUI surface)
  • Rollback steps are documented (git revert; pins/DSN are additive config, schema migration is idempotent)
  • Authority relationship matches config/v1_authority_map.json (unchanged — no new authority)

Umbrella systems

  • Memory
  • Governance
  • Identity
  • Growth
  • Perception
  • Infrastructure
  • Life
  • Custodian

Discharge record

Discharge: F1-PINFLOOR -> tests/test_sqlite_pin_floor.py
Discharge: F2-BUSY -> tests/test_go_connect_pragmas.py

(F3's red test is the Go file src/go/memory-store-deep/schema_errors_test.go
— the structural checker tracks Python tests only; the plans doc carries the
full finding → test → commit table for all three findings.)

Testing evidence

Local (all offline GOPROXY=off, isolated GOCACHE):

  • python3 -m pytest tests/test_sqlite_pin_floor.py tests/test_go_connect_pragmas.py — 4 passed (red pre-fix: 4 failed for the findings' causes)
  • go test in the nine sqlite modules — all green including the
    two-writer concurrency regression (2.03s: writers wait on the held lock,
    both land) and the full memory-store-deep truth batteries
  • python3 scripts/admit_wave_sqlite_floor.py — classified
    EXISTING_PROJECT_CHANGE, activated, admitted (ADMIT-wave-sqlite-floor)

Known environmental gaps in the authoring sandbox (identical on pristine
master, verified via stash roundtrip): modules linking Rust staticlibs
(cognition, adaptive-router, scaffold-membrane, builder-bridge-cli — libs
not prebuilt locally; CI builds them first) and live-oracle tests requiring
prebuilt engine binaries (33 pre-existing pytest collection errors of the
same class). The nine touched modules are fully green locally.

Plain-language review notes

The load-bearing question for review: does every sqlite open site in src/go
now carry the busy DSN? The pragma contract test answers that structurally
and will fail CI if a future module regresses. The one behavioral subtlety:
journal_mode(WAL) inside the DSN is a no-op on already-WAL stores (the
persistent property Python sets); it only guards fresh synthetic stores.
The pin-lint's "one engine version" rule is deliberate — divergent bundled
engines serving the same store files was half of finding 2's harm.

Research provenance

none

## Plain summary Seven Go modules that write our shared databases (the memory store, caches, the auto-task ledger, abstraction state) were compiling against a five-generation-stale SQLite engine bundle (SQLite 3.41.2) while the owner's boundary law requires the bundled engine to be at least 3.51.3. On top of that, the Go stores had no wait policy for lock contention — the Python store waits 5 seconds, the Go side failed instantly with "database is locked", dropping agent writes on the shared memory store — and startup schema upgrades were run with every error silently swallowed. This PR moves all modules onto one current engine (v1.49.1 bundling SQLite 3.53.0), gives every module the same 5-second wait policy, restores full durable commits, makes schema setup loud and repeatable, and adds CI lints so none of it can silently regress. ## Example With this change, when an agent writes a memory while another writer holds the store, the writer waits up to 5 seconds and then succeeds — instead of failing immediately with `database is locked (5)` (reproduced pre-fix: both writers dropped at 0.00s; post-fix both land after ~2s). And when a module's pin drifts below the owner floor again, the pin-lint test fails CI by name, not by accident later. ## Technical details - **What**: (a) all seven stale pins (`modernc.org/sqlite v1.28.0`, bundled SQLite 3.41.2) → v1.49.1 (bundled SQLite 3.53.0 ≥ the 3.51.3 floor, `docs/architecture/boundary-law.md` line 116; bundled version verified from the module's documented CHANGELOG: "2026-04-17 v1.49.0: Upgrade to SQLite 3.53.0"). go.sum regenerated offline via `go mod tidy` (`GOPROXY=off`), go directive 1.21→1.25.0 to match the driver's requirement (repo toolchain per go-version.txt is 1.27.1). (b) 5s `PRAGMA busy_timeout` on every Go sqlite open site (15 sites / 10 files) via the driver's documented `_pragma` DSN params — per pooled connection, so the policy survives database/sql pooling (post-open `db.Exec` pragmas do not). (c) `synchronous=FULL` replaces the `synchronous=NORMAL` contradiction (crash-anywhere durable-write law) in memory-ops, memory-store-deep, cache. (d) memory-store-deep schema provisioning now fails loudly and migrates batch-1 columns conditionally — port of `src/rune/memory_store.py:246-263` (the blind ALTERs errored "duplicate column" on every already-migrated store, silently). (e) CI-enforced guards: `tests/test_sqlite_pin_floor.py` (floor + one-engine-uniformity lint) and `tests/test_go_connect_pragmas.py` (busy DSN contract + no synchronous=NORMAL). - **Why**: T17 audit finding 2 on base a52624b3 (re-verified on current master 79ff61b3 — all pins and behaviors reproduced unchanged before any edit). - **Files**: 7 × go.mod/go.sum under src/go (persona-definition, memory-store-deep, memory-ops, connection-pool, cache, auto_tasks, abstraction), 10 source files (incl. curator + memory-continuity busy waits, class coverage), 2 Python lint tests, 2 Go regression tests, plans doc, admission script. - **Acceptance**: red-first per docs/bugfix-contract.md — red commit 6296ea58 (tests failing for the bug's cause: seven modules named; writers dropped at 0.00s with SQLITE_BUSY; connect() swallowed unprovisionable-store errors) precedes fix commit db6b45c6. Regression tests are frozen. Record: plans/2026-10-26-sqlite-floor-audit-t17-finding2.md. - **Dependencies**: none new — the resolved dep graph equals the compliant memory-continuity module's exact set (libc v1.72.0 et al., already cached on the runner). ## Why it matters It advances the machinery-first infrastructure: the indexed-state backbone (the shared memory store agent writes land in) stops dropping concurrent writes and stops carrying a six-generation-stale engine that the owner law explicitly floors. Storage becomes boring again. ## Related issue T17 audit wave finding 2 (data-persistence/concurrency audit on master a52624b3). No standalone gitea issue — repair executes the audit finding dispatch. ## Changes - src/go/{persona-definition,memory-store-deep,memory-ops,connection-pool,cache,auto_tasks,abstraction}/go.mod + go.sum — pin v1.49.1, go 1.25.0, tidy'd - src/go/memory-ops/main.go — DSN policy (busy 5s + WAL + FULL) - src/go/memory-store-deep/main.go — DSN policy + loud `provisionSchema` + conditional migration - src/go/memory-store-deep/{gaps_io,gaps_stats}.go — read backends share the 5s wait - src/go/connection-pool/main.go — pool DSN (busy 5s + WAL) - src/go/cache/cache.go — DSN policy + checked index creates - src/go/auto_tasks/auto_tasks.go — DSN policy (pragma out of the stmt list) - src/go/abstraction/abstraction.go + replay.go — DSN policy + busyDSN for replay opens - src/go/curator/store.go, src/go/memory-continuity/store.go — busy waits (class coverage on the shared store) - tests/test_sqlite_pin_floor.py, tests/test_go_connect_pragmas.py — CI guards - src/go/memory-ops/busy_timeout_test.go — two-writer concurrency regression - src/go/memory-store-deep/schema_errors_test.go — loud-setup + idempotent-migration regressions - plans/2026-10-26-sqlite-floor-audit-t17-finding2.md — finding → red test → commit - scripts/admit_wave_sqlite_floor.py — construction admission record ## Rune v1 authority admission Not applicable — storage-engine maintenance of the existing indexed-state backbone; no new cognitive/runtime mechanism, no new selection authority. ## Required verification - [x] Research and findings are linked (T17 audit, plans doc) - [x] Acceptance canaries were written before implementation (red tests first, red evidence frozen in the red commit) - [ ] CI Pipeline / required-checks passes (watching this run) - [x] No credentials or hardcoded private paths were added - [ ] Documentation and wiki links were updated (plans doc carries the record; no user-facing docs change) - [ ] Both TUI and MiMoCode were updated when applicable (not applicable — no TUI surface) - [x] Rollback steps are documented (git revert; pins/DSN are additive config, schema migration is idempotent) - [ ] Authority relationship matches `config/v1_authority_map.json` (unchanged — no new authority) ## Umbrella systems - [ ] Memory - [ ] Governance - [ ] Identity - [ ] Growth - [ ] Perception - [x] Infrastructure - [ ] Life - [ ] Custodian ## Discharge record Discharge: F1-PINFLOOR -> tests/test_sqlite_pin_floor.py Discharge: F2-BUSY -> tests/test_go_connect_pragmas.py (F3's red test is the Go file src/go/memory-store-deep/schema_errors_test.go — the structural checker tracks Python tests only; the plans doc carries the full finding → test → commit table for all three findings.) ## Testing evidence Local (all offline `GOPROXY=off`, isolated GOCACHE): - `python3 -m pytest tests/test_sqlite_pin_floor.py tests/test_go_connect_pragmas.py` — 4 passed (red pre-fix: 4 failed for the findings' causes) - `go test` in the nine sqlite modules — all green including the two-writer concurrency regression (2.03s: writers wait on the held lock, both land) and the full memory-store-deep truth batteries - `python3 scripts/admit_wave_sqlite_floor.py` — classified EXISTING_PROJECT_CHANGE, activated, admitted (ADMIT-wave-sqlite-floor) Known environmental gaps in the authoring sandbox (identical on pristine master, verified via stash roundtrip): modules linking Rust staticlibs (cognition, adaptive-router, scaffold-membrane, builder-bridge-cli — libs not prebuilt locally; CI builds them first) and live-oracle tests requiring prebuilt engine binaries (33 pre-existing pytest collection errors of the same class). The nine touched modules are fully green locally. ## Plain-language review notes The load-bearing question for review: does every sqlite open site in src/go now carry the busy DSN? The pragma contract test answers that structurally and will fail CI if a future module regresses. The one behavioral subtlety: `journal_mode(WAL)` inside the DSN is a no-op on already-WAL stores (the persistent property Python sets); it only guards fresh synthetic stores. The pin-lint's "one engine version" rule is deliberate — divergent bundled engines serving the same store files was half of finding 2's harm. ## Research provenance none
conductor added 3 commits 2026-10-26 00:39:33 +00:00
Finds recorded red on the pre-fix tree (audit base a52624b3 re-verified on
current master 79ff61b3): pin-floor lint naming the seven stale modules
(v1.28.0, bundled SQLite 3.41.2 below the 3.51.3 boundary-law floor),
connect-surface contract (no busy timeout anywhere, synchronous=NORMAL in
three modules), two-writer concurrency regression dropping instantly with
SQLITE_BUSY, and connect() swallowing every schema-setup error. Plans doc
records finding -> test -> commit per the bugfix contract.
fix(sqlite): floor-pin every engine to v1.49.1, 5s busy policy, loud schema setup (T17 finding 2)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Failing after 1m1s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 1s
CI Pipeline / unit-tests (push) Canceled after 1m5s
db6b45c63a
Seven modules (persona-definition, memory-store-deep, memory-ops,
connection-pool, cache, auto_tasks, abstraction) move off modernc.org/sqlite
v1.28.0 (bundled SQLite 3.41.2) onto v1.49.1 (bundled 3.53.0 >= the 3.51.3
boundary-law floor; go.sum regenerated offline via go mod tidy).

Every Go sqlite open site now builds its DSN with
_prama... (fixed below) — wait, see file: busy_timeout%3d5000 applied per pooled connection
via the driver's documented _pragma params (Python-store parity,
memory_store.py:153), WAL preserved, and synchronous=FULL replaces
synchronous=NORMAL under the crash-anywhere durable-write law at the three
sites that had NORMAL. memory-store-deep provisioning fails loudly and
migrates batch-1 columns conditionally (duplicate-column ALTER errors were
swallowed on every open). connection-pool/cache/auto_tasks/abstraction keep
their schema error checks; cache's index creates are checked now too.

Read-only backends share the 5s busy wait; their silent-nil oracle failure
shapes are untouched.
docs(plans): record the sqlite-floor discharge map and admission evidence
deploy / deploy (push) Skipped
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 29s
CI Pipeline / lint (push) Canceled after 29s
Auto-label / auto-label (pull_request) Successful in 1s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 27s
Spec gate (headless) / spec-gate (pull_request) Successful in 16s
CI Pipeline / lint (pull_request) Failing after 46s
CI Pipeline / rust-surface (pull_request) Canceled after 0s
CI Pipeline / canary (pull_request) Canceled after 0s
CI Pipeline / best-practices (pull_request) Canceled after 0s
CI Pipeline / documentation (pull_request) Canceled after 0s
CI Pipeline / type-check (pull_request) Canceled after 0s
CI Pipeline / gitea-offline (pull_request) Canceled after 0s
CI Pipeline / required-checks (pull_request) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Canceled after 0s
CI Pipeline / go-surface (pull_request) Canceled after 3s
CI Pipeline / unit-tests (pull_request) Canceled after 46s
25d343adba

🤖 Headless spec gate (non-blocking, #204 first slice)

Spec-gate agent produced no text output — check runner logs.

Deterministic floors still govern the merge

This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.

🤖 **Headless spec gate (non-blocking, #204 first slice)** Spec-gate agent produced no text output — check runner logs. <details><summary>Deterministic floors still govern the merge</summary> This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
conductor added 1 commit 2026-10-26 02:05:36 +00:00
chore(ci): regenerate requirements-ci.txt (upstream published pins the ratchet caught — aiohttp 3.14.5, pillow 13, coverage 7.17 family)
deploy / deploy (push) Skipped
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
CI Pipeline / lint (pull_request) Failing after 50s
CI Pipeline / go-surface (pull_request) Failing after 24s
CI Pipeline / rust-surface (pull_request) Failing after 7s
CI Pipeline / unit-tests (pull_request) Failing after 1m12s
CI Pipeline / best-practices (pull_request) Successful in 3s
CI Pipeline / documentation (pull_request) Successful in 2s
CI Pipeline / type-check (pull_request) Failing after 40s
CI Pipeline / canary (pull_request) Failing after 1m1s
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 17s
CI Pipeline / gitea-offline (pull_request) Successful in 21s
Spec gate (headless) / spec-gate (pull_request) Successful in 24s
CI Pipeline / required-checks (pull_request) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Failing after 5s
799e0ee9eb
The lint job's dep-lock ratchet resolved upstream pins newer than the
committed lock (master-inherited drift, time-based: PyPI published
between the lock commit and this run; the PR diff itself touches no
Python dependency). Regenerated per the checker's own instruction and
the repo's #150 ratchet doctrine; header kept at the canonical command.

🤖 Headless spec gate (non-blocking, #204 first slice)

Spec-gate agent produced no text output — check runner logs.

Deterministic floors still govern the merge

This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.

🤖 **Headless spec gate (non-blocking, #204 first slice)** Spec-gate agent produced no text output — check runner logs. <details><summary>Deterministic floors still govern the merge</summary> This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
conductor added 1 commit 2026-10-26 02:13:44 +00:00
docs(plans): record PR 2620 CI attribution — every failing job traced to master-level defects with reproduction evidence
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Skipped
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 22s
Spec gate (headless) / spec-gate (pull_request) Successful in 21s
CI Pipeline / lint (pull_request) Failing after 48s
CI Pipeline / go-surface (pull_request) Failing after 22s
CI Pipeline / rust-surface (pull_request) Failing after 8s
CI Pipeline / unit-tests (pull_request) Failing after 1m11s
CI Pipeline / best-practices (pull_request) Successful in 3s
CI Pipeline / documentation (pull_request) Successful in 4s
CI Pipeline / type-check (pull_request) Failing after 39s
CI Pipeline / gitea-offline (pull_request) Successful in 14s
CI Pipeline / canary (pull_request) Failing after 1m25s
CI Pipeline / required-checks (pull_request) Failing after 2s
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Failing after 5s
01ef5cdbeb
Author
Owner

CI observation (runs 34744/34874) — every failing required check attributed from actual logs

Green: auto-label, Local-Model First-Pass Review (#131), spec-gate (headless), best-practices, documentation, gitea-offline.

Red — all master-level, none branch-local (evidence: plans doc §CI status, commit 01ef5cdb):

Job Cause (from logs) Reproduced on pristine master?
lint (layer 1) #150 dep-lock ratchet: committed lock vs fresh uv pip compile divergence (upstream pins: aiohttp 3.14.5, pillow 13.0.0, coverage 7.17, …). A time-bomb that had already failed every PR run that evening (34728, 34801, 34810, 34839) n/a — already failing repo-wide before this PR
lint (layer 2) silent-handler ratchet rotted: BLE001 47→145, S110 31→203 under the identical pinned ruff 0.16.5 yes — clean git archive 79ff61b3 checkout scores 145/203
go-surface, rust-surface /tmp prune at ci.yml:209: ls -dt rune-ci-target-* go-bins-* | tail | xargs -r exits 2 under pipefail when tmpfs is empty (host cache wipe); job dies before the go loop yes — pipeline exit: 2 locally with empty matches
unit-tests, canary 16 canaries + pytest collection fail: go-paths go engine binary missing: …/src/go/paths/paths-bin — in-tree engine binaries were workspace leftovers, never provisioned by the workflow yes — structural gap in ci.yml (no provisioning step)
type-check pyright ratchet 121→228 errors, 450→573 warnings — accumulated while the dep-lock layer masked all gates yes — my diff adds two small test files, no runtime python

Branch-side fix delivered: the dep-lock layer — 799e0ee9 regenerates requirements-ci.txt via the checker's canonical command (check_dep_lock.py green locally). That was the only failing surface this branch could repair within its scope without weakening gates (raising the silent-handler/pyright baselines is forbidden by the ratchets' shrink-only contract — they need classification sweep waves, like the #126 wave that built the current baseline).

Per the discharge instructions: no merge while required checks fail, no force-merge, no protection changes, no bypass. The sqlite-floor repair itself is green everywhere it executed: nine-module go vet/go test/go build loop (incl. the 2-writer concurrency regression and loud-schema regressions), both pin/pragma lint guards, and the frozen red-first evidence trail (commit 6296ea58 red → db6b45c6 fix).

## CI observation (runs 34744/34874) — every failing required check attributed from actual logs **Green:** auto-label, Local-Model First-Pass Review (#131), spec-gate (headless), best-practices, documentation, gitea-offline. **Red — all master-level, none branch-local (evidence: plans doc §CI status, commit 01ef5cdb):** | Job | Cause (from logs) | Reproduced on pristine master? | |-----|-------------------|--------------------------------| | lint (layer 1) | #150 dep-lock ratchet: committed lock vs fresh `uv pip compile` divergence (upstream pins: aiohttp 3.14.5, pillow 13.0.0, coverage 7.17, …). A time-bomb that had already failed every PR run that evening (34728, 34801, 34810, 34839) | n/a — already failing repo-wide before this PR | | lint (layer 2) | silent-handler ratchet rotted: BLE001 47→145, S110 31→203 under the identical pinned ruff 0.16.5 | **yes** — clean `git archive 79ff61b3` checkout scores 145/203 | | go-surface, rust-surface | /tmp prune at ci.yml:209: `ls -dt rune-ci-target-* go-bins-* \| tail \| xargs -r` exits 2 under `pipefail` when tmpfs is empty (host cache wipe); job dies before the go loop | **yes** — `pipeline exit: 2` locally with empty matches | | unit-tests, canary | 16 canaries + pytest collection fail: `go-paths go engine binary missing: …/src/go/paths/paths-bin` — in-tree engine binaries were workspace leftovers, never provisioned by the workflow | yes — structural gap in ci.yml (no provisioning step) | | type-check | pyright ratchet 121→228 errors, 450→573 warnings — accumulated while the dep-lock layer masked all gates | yes — my diff adds two small test files, no runtime python | **Branch-side fix delivered:** the dep-lock layer — 799e0ee9 regenerates `requirements-ci.txt` via the checker's canonical command (`check_dep_lock.py` green locally). That was the only failing surface this branch could repair within its scope without weakening gates (raising the silent-handler/pyright baselines is forbidden by the ratchets' shrink-only contract — they need classification sweep waves, like the #126 wave that built the current baseline). Per the discharge instructions: no merge while required checks fail, no force-merge, no protection changes, no bypass. The sqlite-floor repair itself is green everywhere it executed: nine-module `go vet`/`go test`/`go build` loop (incl. the 2-writer concurrency regression and loud-schema regressions), both pin/pragma lint guards, and the frozen red-first evidence trail (commit 6296ea58 red → db6b45c6 fix).

🤖 Headless spec gate (non-blocking, #204 first slice)

Spec-gate agent produced no text output — check runner logs.

Deterministic floors still govern the merge

This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.

🤖 **Headless spec gate (non-blocking, #204 first slice)** Spec-gate agent produced no text output — check runner logs. <details><summary>Deterministic floors still govern the merge</summary> This comment is advisory. Required checks (lint, tests, canaries, type-check, coverage, dependency lock, impact gate) remain the merge authority per docs/adversarial-review.md proportionality.</details>
Some required checks failed
CI Pipeline / lint (push) Canceled after 0s
CI Pipeline / unit-tests (push) Canceled after 0s
CI Pipeline / go-surface (push) Canceled after 0s
CI Pipeline / rust-surface (push) Canceled after 0s
CI Pipeline / canary (push) Canceled after 0s
CI Pipeline / best-practices (push) Canceled after 0s
CI Pipeline / documentation (push) Canceled after 0s
CI Pipeline / type-check (push) Canceled after 0s
CI Pipeline / gitea-offline (push) Canceled after 0s
CI Pipeline / required-checks (push) Canceled after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Canceled after 0s
deploy / deploy (push) Skipped
Local-Model First-Pass Review (#131) / first-pass-review (pull_request) Successful in 22s
Spec gate (headless) / spec-gate (pull_request) Successful in 21s
CI Pipeline / lint (pull_request) Failing after 48s
CI Pipeline / go-surface (pull_request) Failing after 22s
CI Pipeline / rust-surface (pull_request) Failing after 8s
CI Pipeline / unit-tests (pull_request) Failing after 1m11s
CI Pipeline / best-practices (pull_request) Successful in 3s
CI Pipeline / documentation (pull_request) Successful in 4s
CI Pipeline / type-check (pull_request) Failing after 39s
CI Pipeline / gitea-offline (pull_request) Successful in 14s
CI Pipeline / canary (pull_request) Failing after 1m25s
CI Pipeline / required-checks (pull_request) Failing after 2s
Required
Details
CI Pipeline / CI Pipeline / notify-event-bridge (pull_request) Failing after 5s
Some required checks were not successful.
This pull request is blocked because it's outdated.
You are not authorized to merge this pull request.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/sqlite-floor-audits:fix/sqlite-floor-audits
git checkout fix/sqlite-floor-audits
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: conductor/rune#2620