Skip to content
Merged
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
1 change: 1 addition & 0 deletions .claude/agent-memory/orchestrator/MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
- [#751: 5-round preflight for novel infra](project_issue_751_five_round_preflight_detached_launch_convention.md) - budget more rounds when a plan invents execution infra
- [A delegate may have no Bash tool](delegate-may-lack-bash-tool-verify-its-git-claims.md) - it cannot verify its own git claims; check them yourself
- [Coverage seam workaround for .claude worktrees](coverage-seam-workaround-for-claude-worktrees.md) - dot-source TWO files, explicit -TestAssembly
- [PoshQC gates for scripts/hygiene](poshqc-gates-observed-outputs-for-scripts-hygiene.md) - summary has no numbers; junit is the observable; coverage doc omits scripts/hygiene; scope analyze
- [isolation worktree spawn param kills the toolchain](isolation-worktree-spawn-param-kills-toolchain.md) - pwsh refused; isolation-dependent, NOT agent-type dependent
- [An analyzer control site can be UNCOMPILED](analyzer-control-site-can-be-uncompiled-not-just-commented.md) - legacy csproj have explicit Compile items, no wildcard; verify live code AND a Compile Include entry
- [Don't elect reviewer-declined optional changes](do-not-elect-reviewer-declined-optional-changes.md) - the substitute value was itself a defect; cost 2 rounds. Bar additive edits to keep a delta narrow
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: poshqc-gates-observed-outputs-for-scripts-hygiene
description: What the PoshQC MCP tools actually return for scripts/hygiene work (observed 2026-10-02, issue 961 prep): no numbers in the summary, coverage doc omits scripts/hygiene, whole-repo analyze already fails, junit is the test observable
metadata:
type: project
---

Observed while preparing issue 961 (hygiene-guard backup-file rule), read-only runs against a clean tree:

- `run_poshqc_test` / `_format` return only `ok:true` plus one sentence, no counts. The test observable is `artifacts/pester/pester-junit.xml` (root `tests`, `errors`, `failures`; testcase names are `<Describe>.<It name>`). Baseline for `tests/scripts/hygiene` is 31 tests (7 + 19 + 5), 0 failures. The file is git-ignored, so Grep needs the explicit path.
- `artifacts/pester/powershell-coverage.xml` from the PoshQC test run does NOT contain `scripts/hygiene` in its denominator (only `.claude` and `.codex` packages). A hygiene line-coverage figure cannot be read locally; CI `_pester.yml` asserts LINE at 80 over `scripts/hygiene`. Do not write a local coverage-percentage acceptance for that folder.
- `run_poshqc_analyze` with no `scan_folders` fails with 21 pre-existing PSScriptAnalyzer issues; scoped to `["scripts/hygiene", "tests/scripts/hygiene"]` it returns ok. Always scope analyze and format.
- Format is a write-mode tool: observe it by a before/after `git hash-object` of the files, not by the tool status (plan-gate rule G7).
- The hygiene guard itself flags drive-letter user-profile paths in any tracked file outside `.claude/`, so plans and evidence for this work must use a `<worktree-root>` placeholder and never the real path.
- A worktree-isolated shell refuses every `pwsh` form, so guard-run tasks need a non-isolated executor; the orchestrator itself can still call the PoshQC MCP tools.

**How to apply:** when planning or preflighting work under `scripts/hygiene` or other folders outside the PoshQC coverage scope, scope the MCP calls, observe junit counts, and record coverage as CI-measured. See [[preflight-without-build-access-cannot-clear-a-plan]] and [[worktree-isolation-blocks-pwsh-per-agent-type]].
2 changes: 1 addition & 1 deletion .github/workflows/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ references each gate with `uses:`. It contains no inline `steps:`.
| `_build-nullable.yml` | `windows-latest` | `msbuild /t:Rebuild` with `TreatWarningsAsErrors` | 30 min |
| `_mstest-coverage.yml` | `windows-latest` | Plain `msbuild /t:Build`, then `scripts/vscode/Invoke-MSTestWithCoverage.ps1`, which runs the suite under `dotnet-coverage`, post-processes the result into a first-party Cobertura projection, and asserts 80% line and 75% branch against it; uploads the Cobertura document as the `test-results` artifact | 30 min |
| `_pester.yml` | `windows-latest` | Pester over `tests/scripts/dependencies`, `tests/scripts/hygiene` and `tests/scripts/vscode` with JaCoCo coverage scoped to `scripts/dependencies`, `scripts/hygiene` and `scripts/vscode`; asserts the `LINE` figure at 80% and exits non-zero on any test failure; uploads the JaCoCo document as the `pester-coverage` artifact | 10 min |
| `_hygiene.yml` | `ubuntu-latest` | Runs scripts/hygiene/Test-RepositoryHygiene.ps1 over the tracked tree: fails on a raw test-platform or coverage-collector document (classified by content) or on a Windows user-profile path pattern in any tracked file outside .claude; prints path and line only | 10 min |
| `_hygiene.yml` | `ubuntu-latest` | Runs scripts/hygiene/Test-RepositoryHygiene.ps1 over the tracked tree: fails on a raw test-platform or coverage-collector document (classified by content), on a tracked backup file whose final extension is .bak (case-insensitive, finding line `HYGIENE backup-file <path>`) or on a Windows user-profile path pattern in any tracked file outside .claude; prints the rule name, the path and, for a profile path, a line number only | 10 min |

Structural properties that are deliberate and should not be changed casually:

Expand Down
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,7 @@ Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
*.csproj.bak
*.bak

# SQL Server files
*.mdf
Expand Down
Loading
Loading