Skip to content

Close the P3 Audit-Depth Gaps: G4 G5 G7 - #692

Merged
ptr727 merged 1 commit into
developfrom
feature/p3-audit-depth-dispositions
Aug 14, 2026
Merged

Close the P3 Audit-Depth Gaps: G4 G5 G7#692
ptr727 merged 1 commit into
developfrom
feature/p3-audit-depth-dispositions

Conversation

@ptr727

Copy link
Copy Markdown
Owner

Closes the three P3 audit-depth register rows in docs/fleet-map.md, each per the maintainer's recorded disposition.

G4: deletion sweeps miss prose

Split by what a pattern can reach. The named-path half is mechanized: a dead-path rule in scripts/prose_lint.py reports a Markdown mention (backtick span, inline link target, or reference definition) of a path git once tracked and the tree no longer holds. Keying on deletion history is what scopes it: proposed files a backlog names, another repository's layout, and refs like origin/develop have no history here and stay silent, and manifest-declared carried paths are exempt since the hub's own instances retire to catalog snippets. The rule joins the default set and the CI prose step, the CI checkout fetches full history (fetch-depth: 0) because the rule stands down loudly in a shallow clone rather than pass blind. The name-shaped half (a description naming no path) stays the manual RESYNC section 4 read, accepted as manual: no pattern reaches it.

The rule's first tree-wide run caught a real instance: docs/host-setup.md still described bind-mounts in the deleted .devcontainer/ definitions, fixed here by re-pointing at catalog/snippets/devcontainer/.

G5: intent-fidelity drift is invisible

The advisory ships in spec/audit.py: per applicable intent unit, the audit compares when the hub canonical and the repo copy each last changed, and a canonical changing later reports the copy as possibly trailing, at DRIFT and never failing. A copy content-identical to the canonical is skipped (current, and the fidelity_honesty.py promotion candidate). No reconciliation record exists anywhere, so last-modified is the implementable proxy, and the blind spot (a copy touched without reconciling reads current) is stated in RESYNC section 5, AUDIT.md, and spec/fidelity-model.md rather than papered over. Verified read-only against a fleet repo: carried intent files reported as trailing hub changes made weeks earlier, findings no prior check produced.

G7: operational develop PR-only is prose-enforced

Closed accepted, mirroring the spec/divergences.json vocabulary, recorded in STANDUP.md section 0B beside its uneven-protection warning. The allowance is the operational model's foundation per WORKFLOW.md "Branch Model", and the considered standup-time tightening (apply the release payload, swap after the closing audit) was declined: it adds a forgettable swap step and a window where the live ruleset contradicts the registry's declared model.

Also retires the stale G11 phase cell (P0 -> closed), which trailed its own closure, per the register's maintenance rule.

Verification

  • All seven scripts/test_*.py suites pass, including the new TestDeadPath (deletion signature, shallow stand-down, manifest exemption, tree-clean assertion).
  • prose_lint.py full default sweep clean with dead-path enabled, charset-unknown clean, build_dist.py --check current.
  • markdownlint and editorconfig-checker clean on every changed file, CRLF preserved, all 7 fleet-map.md mermaid blocks parse.
  • mypy and pyright report zero deltas against the develop baseline.

G4 splits by what a pattern can reach: a dead-path prose_lint rule ships
for mentions of paths git once tracked and the tree no longer holds, and
the name-shaped class stays the manual RESYNC section 4 read. G5 ships
the intent-staleness advisory in spec/audit.py, a last-modified
comparison at DRIFT, with the blind spot stated in the prose
authorities. G7 closes accepted, recorded in STANDUP.md section 0B. The
rule's first run caught docs/host-setup.md describing the deleted
devcontainer definitions, fixed by re-pointing at the catalog snippets.
CopilotAI lite review requested due to automatic review settings August 14, 2026 13:19

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR closes the remaining P3 audit-depth register gaps (G4, G5, G7) by adding deterministic tooling where feasible (dead-path prose lint; intent staleness advisory) and updating the governing docs/register to reflect the recorded dispositions.

Changes:

  • Add a new dead-path prose-lint rule (enabled by default and in CI) that flags Markdown mentions of previously git-tracked paths that no longer exist, with an explicit stand-down in shallow clones.
  • Add an intent-fidelity “staleness” advisory to spec/audit.py based on last-modified comparisons between hub canonicals and downstream copies (DRIFT-only).
  • Update fleet docs/register and related guidance (RESYNC/AUDIT/STANDUP/host-setup) to reflect the closure and link the new mechanisms.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
STANDUP.mdRecords the G7 disposition directly in the operational-branch protection warning; adds a link reference to the register.
spec/fidelity-model.mdUpdates the intent fidelity definition to include the new drift-only staleness advisory description.
spec/audit.pyImplements hub canonical last-change caching and an intent-staleness advisory check in the audit runner.
scripts/test_prose_lint.pyAdds TestDeadPath coverage for deletion-signature detection, shallow stand-down behavior, and repo-clean assertion.
scripts/prose_lint.pyIntroduces the dead-path rule, adds it to defaults, wires it into scanning, and announces shallow-stand-down behavior.
RESYNC.mdUpdates the deletion-sweep guidance to reference the new dead-path mechanized check and clarifies intent limitations/advisory.
docs/host-setup.mdRepoints Windows devcontainer bind-mount guidance from deleted .devcontainer/ files to catalog/snippets/devcontainer/.
docs/fleet-map.mdUpdates mermaid flows and the gap register rows to mark G4/G5/G7 (and the stale G11 phase cell) as closed with details.
AUDIT.mdDocuments the new intent staleness advisory as part of the mechanized deterministic subset.
.github/workflows/validate-task.ymlFetches full history for CI (required for dead-path detection) and enables the dead-path check in prose linting.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ptr727
ptr727 merged commit 549502f into developAug 14, 2026
7 checks passed
@ptr727
ptr727 deleted the feature/p3-audit-depth-dispositions branch August 14, 2026 13:40
ptr727 added a commit that referenced this pull request Aug 14, 2026
Closes out the actionable half of the fleet-map P4 roadmap item on STE
structural checks.
## What
- **`sentence-length` rule in `scripts/prose_lint.py`**: flags a
Markdown prose sentence over 25 words, ASD-STE100's descriptive cap.
Opt-in like `sentence-split` (not in `DEFAULT_RULES`, not in CI),
because the rule counts 1686 over-cap sentences in the corpus at
landing, so a default gate would fail whole files nobody is editing. A
table row, a heading, a link definition, and a blockquote are exempt, an
inline code span and a double-quoted quotation each count as one word.
Eight new cases in `scripts/test_prose_lint.py`, including one pinning
the opt-in status.
- **Decision recording**, per the fleet-map hook that the decision lands
when the first structural check ships: a `Sentence Structure` subsection
in GOVERNANCE.md `Documentation Style Conventions`, the full house-style
rules in the `comment-and-doc-style` skill (plugin regenerated), and a
`Decision` paragraph plus P4 row edit in `docs/fleet-map.md` per the
maintenance rule.
- **OPERATIONS.md staleness fix**: the runbook's mirrored prose gate
omitted `--check dead-path` after #692 added it to CI, and its rule
counts predated the rule. Both now match CI, and the opt-in note names
both unlinted rules.
## Why opt-in
The corpus measures 26 percent of sentences over 20 words and 1686 over
the 25-word cap, so the house style is adopted for new prose while the
check stays reachable by name and by `--diff` scoping. Promotion into
`DEFAULT_RULES` or CI is a separate decision, taken if and when the
corpus converges. The changed lines of this PR lint clean under the new
rule.
## Verification
- `python3 scripts/test_prose_lint.py` (243 tests), `test_repo_gate.py`,
`test_pr_review.py`, `test_build_dist.py`, `spec/audit.py --selftest`,
`gh-write-guard.py --selftest`: all pass
- `repo_gate.py`, `build_dist.py --check`, the CI prose gate including
`dead-path`, `charset-unknown` summary (0 findings), `spec/validate.py`,
`jq` sweep, `markdownlint-cli2` on the changed files: all clean
- `ruff` at latest adds no new finding over develop's pre-existing nine,
`mypy` passes
- Line endings byte-verified, CRLF Markdown and LF Python unchanged
Generated with [Claude Code](https://claude.com/claude-code)
ptr727 added a commit that referenced this pull request Aug 15, 2026
…Python CI Gates (#718)
Thirty-one squashes, `56f4d7d..d54862a`. 115 files, +20436/-5298.
**Merge with a merge commit, never a squash, and never with
`--delete-branch`.** This pull request's head is `develop` itself.
## What lands
**Fleet Skills.** The `.agents/skills/` source tree, the generated
`.claude-plugin/` distribution, `scripts/build_dist.py` with its
`--check` gate, and `scripts/skills_install.py` with its host stamp
(#676). Packaged as skills on top of the scaffold: PR review conduct and
Copilot instructions upkeep (#677), comment and doc style (#678),
resync-a-repo and fleet-conformance-check (#679), the per-language
codestyles (#680), git commit conventions and operational vs release
workflow (#681), stand up a repo (#683), and repo-worktree (#717).
Coverage gaps closed in three passes (#690, #691, #692) plus the P4
sentence-length opt-in (#697).
**Host setup.** The Windows host-setup tooling and its PowerShell gate
(#674), the Windows bootstrap loader (#682), Docker install and upgrade
on Linux and Windows with a version floor (#701, #705), a `uv` floor in
`spec/host-tools.json` (#698), self-healing of a shadowing `uv`, `jq`,
or `git-restore-mtime` copy (#689), node's real winget package id
(#696), and a README for the Linux host-setup nuances (#710).
**Python and CI.** Python tooling in CI with the script tests moved to
`scripts/tests` (#704), `ruff format` adopted and gated (#709), and the
PSScriptAnalyzer claim conditioned on repos that carry `.ps1` files
(#686).
**Conduct rules.** Triage-order and scope guardrails in
pr-review-conduct (#684), `pr_review.py wait` requesting a review rather
than only polling for one (#685), a tech-agnostic signed-commit
verification (#708), execution rather than analogy to verify
platform-specific code (#715), and a unique worktree for every task
(#717).
**Docs.** The fleet map and gap register with peer messaging declared
(#687), mermaid flow diagrams in the kept-authority docs (#702), and the
map pointed at the shipped diagrams and current tooling (#703).
## Issues this promotion closes
Each landed on `develop` on its own pull request. The keyword fires only
on a merge into `main`, so it sits here rather than on the feature pull
requests.
Closes#700Closes#707Closes#711Closes#712Closes#714Closes#688#699 stays open on purpose: #717 shipped the layout convention and the
skill, and the physical migration of existing checkouts is still tracked
there.
## Review record
Every squash closed its own Copilot loop on its own pull request before
merging to `develop`. This promotion carries no new content of its own,
so its review is the merged tree as a whole.
## Consequence worth stating
The `GOVERNANCE.md` and `AGENTS.md` sections these squashes changed
become the canonical the moment this reaches `main`, and every carrying
repository reads as drifted from that point until it resyncs. That is
the ordinary consequence of a canonical moving rather than a defect. The
Skills installer added here is also how a machine picks the new skills
up, so a session that keeps restating a rule already packaged as a skill
is the signal to run it.
Sign up for freeto 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.

2 participants

@ptr727