Wave 2's PR-9, whose authority is "mechanical PR" and which is gated on no
ruling. Widened by the 2026-07-28 triage from the accrual guard alone to all
three broad `except` blocks on the turn spine.
Each guard is DELIBERATE and stays: accrual is additive and must never crash a
turn; a pack/catalog failure must not take down logos authority; a probe
failure must not touch the served surface. Narrowing them to ImportError/
OSError — as an external assessment proposed — would convert a malformed
decision object into a turn-spine crash, trading silent failure for
served-surface failure. What was wrong is not the tolerance, it is that each
wrote a value INDISTINGUISHABLE FROM ITS HEALTHY CASE:
- a raising read->realize->determine chain left the same None accrual a quiet
turn leaves;
- a logos decision that raised looked exactly like a turn where logos was
never consulted (both: logos_decision_kind == "");
- a crashed geometric probe recorded the same empty neighborhood as a probe
that ran and found nothing — in the block whose entire job is producing the
data that prices the anti-unification roadmap.
Silence, in the one layer whose constitution is "failures are typed, never
silent" (INV-34).
chat/runtime.py _accrual_swallows / _last_accrual_error, read via
accrual_swallow_telemetry(). _last_turn_accrual is
still None on failure, so _maybe_surface_determination
returns byte-identically — ADDITIVE BY CONSTRUCTION,
and pinned as such.
cognition/result.py logos_error on CognitiveTurnResult.
cognition/pipeline.py logos_error recorded; probe_error,
neighbor_scan_errors, graph_anti_unify_error on the
OOV telemetry.
tests/test_accrual_swallow_telemetry.py — 7 pins. The two behavioral ones were
OBSERVED RED against a build carrying the fields with the recording stripped,
so they discriminate rather than merely pass. Two test bugs of mine were fixed
along the way (wrong logos module path; CognitiveTurnResult has required
fields) — the tests were wrong, not the code.
Registered in BOTH TEST_SUITES["smoke"] and smoke.yml on creation, per #136.
Local/CI delta verified unchanged at exactly ten (local 25, CI 15, CI-only 0),
so this settles nothing R-14 has to rule.
Cleanup as found: three dead imports removed from chat/runtime.py
(_COGNITION_PACK_ID, _TEACHING_CORPUS_ID, engine_identity_for_config), each
confirmed to have no re-export dependence first — workbench/readers.py imports
engine_identity_for_config straight from core.engine_identity. ruff 4 -> 1 on
these paths; the survivor is a pre-existing structural E402.
Registers: H-11 CLOSED; PR-9 marked LANDED in the plan.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
65 lines
2.1 KiB
YAML
65 lines
2.1 KiB
YAML
name: smoke
|
|
|
|
# Fast PR gate — runs the smoke suite on every PR push.
|
|
# Covers: chat runtime, pipeline, architectural invariants, audio sensorium
|
|
# (tests/test_audio_*.py — compiler/eval-gates/mount/CRDT-merge/teachers, ~3s),
|
|
# identity falsifiability (tests/test_pack_measurements_phase2.py, ADR-0043
|
|
# — ratified packs diverge directionally; pack-invariant refusal floor; no
|
|
# fabrication; adds ~4 min but blocks-on-regression), and the register axis
|
|
# (tests/test_register_substantive_consumption.py, ADR-0069/0071/0077 — terse/
|
|
# convivial registers must actually differ from neutral on served surfaces;
|
|
# promoted after a 2-day silent regression, generalization-arc Tier S).
|
|
#
|
|
# Post-merge on main: full-pytest.yml runs the FAST lane
|
|
# (-m "not quarantine and not slow"). Soak / proof / register-matrix coverage
|
|
# is nightly-full-pytest.yml (not on the PR critical path).
|
|
# See docs/testing-lanes.md.
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: smoke-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
smoke:
|
|
name: smoke (-m "not quarantine")
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: set up uv
|
|
uses: astral-sh/setup-uv@v5
|
|
with:
|
|
python-version: '3.12.13'
|
|
enable-cache: true
|
|
|
|
- name: install dependencies
|
|
run: |
|
|
uv sync --locked --extra dev
|
|
|
|
- name: pytest smoke suite
|
|
env:
|
|
PYTHONPATH: ${{ github.workspace }}
|
|
run: |
|
|
uv run pytest -m "not quarantine" --tb=short -q \
|
|
tests/test_chat_runtime.py \
|
|
tests/test_achat.py \
|
|
tests/test_runtime_config.py \
|
|
tests/test_cognitive_turn_pipeline.py \
|
|
tests/test_architectural_invariants.py \
|
|
tests/test_audio_*.py \
|
|
tests/test_pack_measurements_phase2.py \
|
|
tests/test_register_substantive_consumption.py \
|
|
tests/test_speculative_subject_lifecycle.py \
|
|
tests/test_accrual_swallow_telemetry.py
|