Skip to content

fix(fleet-state): guard empty spotlight history + reconcile Sandbox note - #207

Merged
aaronjmars merged 1 commit into
aeonfun:mainfrom
antfleet-ops:fix/fleet-state-empty-history-and-sandbox-note
May 22, 2026
Merged

fix(fleet-state): guard empty spotlight history + reconcile Sandbox note#207
aaronjmars merged 1 commit into
aeonfun:mainfrom
antfleet-ops:fix/fleet-state-empty-history-and-sandbox-note

Conversation

@antfleet-ops

Copy link
Copy Markdown
Contributor

Two small follow-ups to #203, both surfaced by an AntFleet review of the fleet-state skill on the post-#203 main.

1) [Bug · High] Empty spotlight history aborts the digest

skills/fleet-state/SKILL.md lines 113-117. When contributor-spotlight-history.json's .history is empty (fresh install, no spotlight has ever run), the first jq emits nothing → SPOTLIGHT_PICK becomes the empty string → the subsequent echo "$SPOTLIGHT_PICK" | jq -r '.fork // empty' produces a parse error and the run aborts non-zero.

That contradicts the "degrade gracefully — a missing source produces a partial section, not a hard failure" intent stated a few lines up in the same section. Guarded with if [ -n "$SPOTLIGHT_PICK" ] so missing history leaves both fields empty and the existing SPOTLIGHT_DATE older than 8 days staleness branch handles the downstream render.

2) [Docs-gap · Low] Sandbox note contradicts Step 2's gh api calls

skills/fleet-state/SKILL.md lines 79-86 (Step 2 body) vs line 415 (Sandbox note). The Sandbox note claims No curl, no gh api calls, no env-var-in-headers. But Step 2 ("Resolve parent repo") calls both gh api repos/<self> and gh repo view when PARENT_OVERRIDE is empty.

An operator reading the security/sandbox section would believe the skill is hermetic local I/O when it actually shells out to GitHub on every non-override run. Note updated to disclose the one call honestly, with PARENT_OVERRIDE documented as the escape hatch.


Both findings surfaced by AntFleet review 1939cc1e on bench replay of #203. Receipt: AntFleet#32

🤖 Generated with Claude Code

Two small follow-ups to aeonfun#203, both surfaced by an AntFleet bench review
of the fleet-state skill on the post-aeonfun#203 main.

1) Empty spotlight history aborts the digest
   When `.history` in contributor-spotlight-history.json is empty (fresh
   install, no spotlight has run yet), the first jq emits nothing →
   SPOTLIGHT_PICK is "" → `echo "" | jq ...` produces a parse error and
   the digest exits non-zero. That contradicts the "degrade gracefully"
   intent stated a few lines up in the same section. Guard the secondary
   jq extractions so missing history leaves both fork+date empty and
   the existing `SPOTLIGHT_DATE older than 8 days` branch handles the
   downstream stale-render case.

2) Sandbox note contradicts Step 2's gh api calls
   The Sandbox note at the bottom claims "No `curl`, no `gh api` calls".
   But Step 2 ("Resolve parent repo") calls both `gh api repos/<self>`
   and `gh repo view` when PARENT_OVERRIDE is empty. An operator reading
   the security/sandbox section would believe the skill is hermetic
   local I/O when it actually shells out to GitHub on every non-override
   run. Update the note to disclose the one call honestly, and document
   the PARENT_OVERRIDE escape hatch for the operator who wants hermetic.
@imancipate

Copy link
Copy Markdown

Triage: ACCEPTED — clean against the contribution rubric (scope ✓ / format ✓ / originality ✓ / size ✓).
Thanks @antfleet-ops. A maintainer review pass will follow; in the meantime no changes requested from this triage layer.

@aaronjmars
aaronjmars merged commit 11cc2ef into aeonfun:main May 22, 2026
1 check passed
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.

3 participants