Skip to content

Epic 20 post-V1 capabilities, and four guards that had frozen the world - #10

Merged
varinderpratap merged 2 commits into
masterfrom
dev
Aug 29, 2026
Merged

Epic 20 post-V1 capabilities, and four guards that had frozen the world#10
varinderpratap merged 2 commits into
masterfrom
dev

Conversation

@varinderpratap

Copy link
Copy Markdown
Collaborator

Delivers Epic 20 (FR38/FR39/FR40) and the corrections a checkpoint review of it found. One commit, f5eaf93, 38 files.

Opened as a PR rather than pushed to master on purpose. audit-ci.yml triggers on master/main pushes and on PRs targeting them — nothing runs on dev. This change has passed only the local suite, and "local green while CI is red" is the exact condition under which v1.0.0 shipped with stale release surfaces. The gates should run before this lands, not after.

Epic 20

Three post-V1 capabilities, all disposed library-seam: built, typed, tested, and reachable from nothing — no importer in argus/, no cli.py reference, no console script. DF-20-1-A/-2-A/-3-A file the gap; the PRD records it at the destination.

  • argus.parsers — tree-sitter adapters for TS/JS, Go, Java (FR40)
  • argus.remediation — unified-diff patch generation with dry-run AST verification (FR38)
  • argus.adapters.lsp — LSP 3.17 diagnostics over stdio and socket (FR39)

The remediation engine proposed patches that break the test

Story 20.2's review flagged the no-assignable-state fallbacks as vacuous, then closed it on assert len(locals()) > 0, recorded as "inspects local state". Measured at checkpoint: that predicate is False in a scope holding no locals, and in both cases the suite pinned, the patched scope holds none. Executed, not inferred — both patched sources raise AssertionError. A vacuous test that passed became a test that fails.

Nothing could see it: verify_patch_dry_run validates AST syntax, and the patch is syntactically perfect; the two unit tests asserted the emitted string, not the behaviour of the patched test.

All five fallback sites now decline when no prior assignment is in scope — propose nothing rather than fabricate an assertion.

Four guards had encoded "no release has ever happened" as a fact

Same class as the two 8c05a10 fixed, found by walking the rest of the family:

Guard Was Now
TC-DOCS-001-55b Required the interim caveats be on disk, while -55 required their removal once a tag exists — the pair could not both be green after a real release Pre-release corpus simulated, as direction 1 already simulated a deletion
TC-DOCS-001-71 Checked tokens the superseded sentence still satisfies, so it would pass on an inverted measurement Pins the live result too, and requires the two to disagree
TC-RELEASE-001-10 Required "has never executed" in release.yml, which -55 requires removed Asserts one of the two honest states D2/D13 allow: disclaims execution, or cites a run
_FIGURE_CLAIMS Pinned literal argus_agent-0.1.0.tar.gz; at 1.0.0 matched nothing, failing with "a published measurement was DELETED" De-versioned

_Delivery.same_act was a self-certifying exemption from an honesty guard — a bare boolean nothing measured. It is now derived from the PRD's own amendments: record and verified to discriminate: FR29 and FR7 both fail it.

Verification

  • Full suite green, exit 0. One skip: naming's exemption list is empty, the intended end state.
  • mypy argus/ clean over 108 source files.
  • Distribution figures re-derived from a fresh build, not re-typed: 108 modules, 108 importable, 116 wheel entries, 115 sdist members.
  • argus.spec ignored rather than committed — build-binaries.yml invokes PyInstaller with CLI flags and never reads a spec file, and sprint-change-proposal-2026-08-10 records as measured fact that no .spec exists in this tree.

Left open deliberately

DF-20-1-A/-2-A/-3-A (the three seams reach no surface), DF-10-2-A (C/C++/Ruby/Rust ground but extract no definitions), and the ≥80% attested-externalization gate, which nothing here measures.

🤖 Generated with Claude Code

Delivers Epic 20 (FR38/FR39/FR40) and corrects what a checkpoint review of it
found. All three capabilities are disposed `library-seam`: built, typed, tested,
and reachable from nothing -- no importer in argus/, no cli.py reference, no
console script. The PRD says so at the destination; DF-20-1-A/-2-A/-3-A file it.

THE REMEDIATION ENGINE PROPOSED PATCHES THAT BREAK THE TEST.

Story 20.2's review round 1 flagged the no-assignable-state fallbacks as vacuous
(Medium #2). Round 2 closed it on `assert len(locals()) > 0`, recorded as
"inspects local state". Measured at checkpoint: that predicate is False in a
scope holding no locals, and in BOTH cases the suite pinned -- an empty `pass`
body, and a vacuous assert standing before its assignment -- the patched scope
holds none. Executed, not inferred: both patched sources raise AssertionError.
A vacuous test that passed became a test that fails.

`verify_patch_dry_run` could not see it: it validates AST syntax, and the patch
is syntactically perfect. The two unit tests could not see it either -- they
asserted the emitted STRING, not the behaviour of the patched test.

All five fallback sites now DECLINE when no prior assignment is in scope.
AR10 honest degradation: propose nothing rather than fabricate an assertion.
AC2's "concrete, non-vacuous" requirement beats its enumeration of shapes; the
tension is stated in the story rather than buried.

FOUR GUARDS HAD ENCODED "NO RELEASE HAS EVER HAPPENED" AS A FACT.

Same class as the two 8c05a10 fixed, found by walking the rest of the family:

  * TC-DOCS-001-55b asserted the interim caveats were ON DISK while -55 demanded
    they be removed once a tag exists. The pair could not both be green after a
    real release -- the guard that polices a transition could not survive it.
    The pre-release corpus is now simulated, as direction 1 already simulated a
    deletion. No real tag, and now no real caveat either.
  * TC-DOCS-001-71 checked tokens that the SUPERSEDED sentence still satisfies,
    so it would have passed unchanged on a measurement that had inverted
    underneath it. The live result is pinned too, and the two must disagree.
  * TC-RELEASE-001-10 required "has never executed" in release.yml, which -55
    requires REMOVED once a tag exists. Now asserts the header is in one of the
    two honest states D2/D13 allow: disclaims execution, or cites a run.
  * _FIGURE_CLAIMS pinned the literal `argus_agent-0.1.0.tar.gz`. At 1.0.0 it
    matches nothing, and the failure it raises is "a published measurement was
    DELETED" -- pointing the next reader at a deletion that never happened.

`_Delivery.same_act` was a self-certifying exemption from an honesty guard: a
bare boolean asserting "admitted and disposed in one act" that nothing measured.
It is now derived from the PRD's own `amendments:` record -- named in exactly
one amendment, dated the day it was disposed. Verified to discriminate: FR29
(2026-08-11) and FR7 (unnamed) both fail it.

Distribution figures re-derived from a fresh build rather than re-typed:
108 modules, 108 importable, 116 wheel entries, 115 sdist members. README's
0.1.0 artifact filenames corrected struck-not-deleted.

argus.spec is ignored, not committed: build-binaries.yml invokes pyinstaller
with CLI flags and never reads a spec file, and sprint-change-proposal-2026-08-10
records as measured fact that no `.spec` exists in this tree. Committing it
would falsify that line with no guard to catch it.

Full suite green, exit 0 (one skip: naming's exemption list is empty, which is
the intended end state). mypy argus/ clean over 108 source files.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 29, 2026

Copy link
Copy Markdown

🛡️ Agent-Argus Code Quality & Assurance Report

Hello! Agent-Argus has audited your commit (c3b53f8).

ArgusAgent coverage ledger (schema 1)

file_path depth claim_present recording_ids
_bmad-output/design-artifacts/ArgusAgent/research/investigate-per-call-scoping.py audited_deep true []
_bmad-output/design-artifacts/ArgusAgent/research/measure-flag-rate-inversion.py audited_deep true []
_bmad-output/design-artifacts/ArgusAgent/research/measure-heuristic-arms.py audited_deep true []
_bmad-output/design-artifacts/ArgusAgent/research/measure-mock-binding-idioms.py audited_deep true []
_bmad-output/design-artifacts/ArgusAgent/research/measure-vacuous-population-split.py audited_deep true []
_bmad-output/design-artifacts/ArgusAgent/research/revalidate-fact-b-widening.py audited_deep true []
_bmad/scripts/memlog.py audited_deep true []
_bmad/scripts/resolve_config.py audited_deep true []
_bmad/scripts/resolve_customization.py audited_deep true []
_bmad/scripts/sync_skills.py audited_deep true []
argus/init.py audited_shallow false []
argus/adapters/init.py audited_shallow false []
argus/adapters/lsp/init.py audited_shallow false []
argus/adapters/lsp/adapter.py audited_deep true []
argus/adapters/lsp/models.py audited_deep true []
argus/adapters/lsp/server.py audited_deep true []
argus/assets/init.py audited_shallow false []
argus/assets/commands/init.py audited_shallow false []
argus/audit/init.py audited_shallow false []
argus/audit/deep_audit.py audited_deep true []
argus/audit/deep_pass.py audited_deep true []
argus/audit/grounding.py audited_deep true []
argus/audit/minions_llm_adapter.py audited_deep true []
argus/audit/open_llm_adapter.py audited_deep true []
argus/audit/ports.py audited_deep true []
argus/cache/init.py audited_shallow false []
argus/cache/invalidation.py audited_deep true []
argus/cache/key.py audited_deep true []
argus/cache/memo_store.py audited_deep true []
argus/cache/stage_memo.py audited_deep true []
argus/cli.py audited_deep true []
argus/commands/init.py audited_shallow false []
argus/commands/hosts.py audited_deep true []
argus/commands/installer.py audited_deep true []
argus/cost/init.py audited_shallow false []
argus/cost/budget_governor.py audited_deep true []
argus/cost/exhaustion.py audited_deep true []
argus/cost/resume.py audited_deep true []
argus/detectors/init.py audited_shallow false []
argus/detectors/assertion_strength.py audited_deep true []
argus/detectors/base.py audited_deep true []
argus/detectors/orphan_code.py audited_deep true []
argus/detectors/provenance_scan.py audited_deep true []
argus/detecto

💡 Student Tip: Make sure you have no bare tests or committed API keys in your repository before submitting!

Mechanical follow-up to Epic 20, kept as a SEPARATE commit because the operator
ruling of 2026-08-12 requires it: a regeneration is legitimate only through the
artifacts' own renderers at a truthful sha, never by hand, and never by loosening
the assertion that caught it (DF-8-5-B).

Produced by `python scripts/regenerate_dogfood_artifacts.py`, which refuses a
dirty argus/ tree and re-reads each file to assert it equals the renderer's
return value. Cited sha f5eaf93; 108 tracked source files, 35885 total LOC.

WHY THIS WAS RED IN CI AND GREEN LOCALLY, because the answer is not a hole.

The artifacts describe TRACKED argus/. While Epic 20's twelve modules were
untracked the tracked tree had genuinely not moved, so TC-DOGFOOD-001-50 was
correctly green -- committing f5eaf93 is what made the artifacts stale, moving
argus/ by 12 files and 1296 insertions since the 91c5124 they cited. That is the
bootstrap ordering DF-10-4-D named and the regeneration script states in its own
docstring: commit first, then regenerate. Six tests failed on PR #10 across the
3.10/3.11/3.12 matrix, all on this one cause: every figure these artifacts
publish -- population, total LOC, cut edges, partition_ids, the sized ceiling $X,
the NFR-C1 baseline ratio -- is derived from argus/** content, so all six were
claims about a tree nobody was running.

Full suite green, exit 0 (one skip: naming's exemption list is empty, the
intended end state).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@varinderpratap
varinderpratap merged commit 071eeda into master Aug 29, 2026
4 checks passed
@varinderpratap
varinderpratap deleted the dev branch August 29, 2026 16:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant