Close two silent gaps: the Windows loader and the gate's fifth caller #1403

Merged
coilyco-ops merged 2 commits from aos/claude/ee98-gaps into main 2026-08-29 10:52:51 +00:00
Owner

#1208 - the Windows profile loader

The loader breaks on the clear-end marker, so it stopped reading before the exports block whenever the two common.sh blocks were ordered the other way. Every shared export vanished with no error and no empty value - the names were simply never set, while the clear still worked, so the file looked correctly read.

Reproduced under real pwsh against the shipped template rather than a transcription of it:

OLD exports-first: EDITOR=vim TAG=probe REF=
OLD clear-first:   EDITOR=    TAG=      REF=
NEW exports-first: EDITOR=vim TAG=probe REF=
NEW clear-first:   EDITOR=vim TAG=probe REF=

The issue asked for a test asserting the ordering. I fixed the loader instead: the clear-end marker now resets its flag and continues exactly as the exports-end marker does, so the constraint stops existing rather than being documented and guarded. Both orderings now load both blocks.

The regression test is structural (no break in the marker loop, both end markers clear their flag) because CI has no PowerShell. Verified it fails against the old template:

--- FAIL: TestProfileLoaderReadsBothBlocksInEitherOrder
    the marker loop must not break, or block order decides which block is read

#1212 - the gate's fifth caller

just repo-test-gate was the only caller of repo-test-gate.sh not wrapped in scripts/ci-command.sh, so it bypassed the egress proxy. That is the spelling an agent actually types, since this repo's own rule routes every dev command through the justfile.

The caller sweep in test_ci_egress_proxy.py scoped itself to workflows and scripts/ci/*.sh, which is why the justfile was invisible. It now includes the justfile. Verified the test bites by reverting the recipe.

Closes #1208
Closes #1212

## #1208 - the Windows profile loader The loader `break`s on the clear-end marker, so it stopped reading before the exports block whenever the two `common.sh` blocks were ordered the other way. Every shared export vanished with **no error and no empty value** - the names were simply never set, while the clear still worked, so the file looked correctly read. Reproduced under real `pwsh` against the shipped template rather than a transcription of it: ``` OLD exports-first: EDITOR=vim TAG=probe REF= OLD clear-first: EDITOR= TAG= REF= NEW exports-first: EDITOR=vim TAG=probe REF= NEW clear-first: EDITOR=vim TAG=probe REF= ``` The issue asked for a test asserting the ordering. I fixed the loader instead: the clear-end marker now resets its flag and continues exactly as the exports-end marker does, so **the constraint stops existing** rather than being documented and guarded. Both orderings now load both blocks. The regression test is structural (no `break` in the marker loop, both end markers clear their flag) because CI has no PowerShell. Verified it fails against the old template: ``` --- FAIL: TestProfileLoaderReadsBothBlocksInEitherOrder the marker loop must not break, or block order decides which block is read ``` ## #1212 - the gate's fifth caller `just repo-test-gate` was the only caller of `repo-test-gate.sh` not wrapped in `scripts/ci-command.sh`, so it bypassed the egress proxy. That is the spelling an agent actually types, since this repo's own rule routes every dev command through the justfile. The caller sweep in `test_ci_egress_proxy.py` scoped itself to workflows and `scripts/ci/*.sh`, which is why the justfile was invisible. It now includes the justfile. Verified the test bites by reverting the recipe. Closes #1208 Closes #1212
fix: two silent gaps, one in the Windows loader and one in the gate
All checks were successful
ci / aos-cli-tests (pull_request) Successful in 28s
ci / gate (pull_request) Successful in 55s
dba56a1479
The Windows profile loader `break`s on the clear-end marker, so it stopped
reading before the exports block whenever the two common.sh blocks were
ordered the other way. Every shared export vanished with no error and no
empty value. Reproduced under pwsh against the shipped template:

  OLD exports-first: EDITOR=vim TAG=probe
  OLD clear-first:   EDITOR=    TAG=

Rather than assert the ordering, the clear-end marker now resets its flag
and continues like the exports-end marker does, so the constraint stops
existing. Both orderings load both blocks.

`just repo-test-gate` was the fifth caller of the gate and the only one not
wrapped in scripts/ci-command.sh, so the spelling an agent actually types
was the one that bypassed the egress proxy. The caller sweep now includes
the justfile, which is what made it invisible.

Closes coilyco-flight-deck/agentic-os#1208
Closes coilyco-flight-deck/agentic-os#1212

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: platform
merge: bring main into the branch
All checks were successful
ci / aos-cli-tests (pull_request) Successful in 40s
ci / gate (pull_request) Successful in 55s
c9e615a04b
coilyco-ops deleted branch aos/claude/ee98-gaps 2026-08-29 10:52:52 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os!1403
No description provided.