Skip to content

fix(sources): retarget shared imports to gominimal and regenerate locks#104

Merged
norrietaylor merged 4 commits into
mainfrom
chore/retarget-source-imports-to-gominimal
May 21, 2026
Merged

fix(sources): retarget shared imports to gominimal and regenerate locks#104
norrietaylor merged 4 commits into
mainfrom
chore/retarget-source-imports-to-gominimal

Conversation

@norrietaylor
Copy link
Copy Markdown
Owner

Summary

  • Repointed all 8 sdd-*.md source imports: from norrietaylor/spectacles/shared/*.md@main to gominimal/spectacles/shared/*.md@main so the canonical source of shared fragments is this repo, not the legacy org.
  • Re-ran gh aw compile; commits the 8 regenerated .lock.yml files alongside their sources.

Root cause

The lint workflow's compile job runs gh aw compile --no-check-update then fails if any .lock.yml drifts. CI started failing on main after fast-path content (ADR 0012) was added to norrietaylor/spectacles@main's shared/sdd-interaction.md without the matching recompile-and-commit landing here. Pinning at the upstream org meant every push pulled fresh content gh-aw inlined into locks — locks committed before that change were stale.

Reproduced locally on main:

gh aw compile --no-check-update
git status --porcelain -- '.github/workflows' | grep '\.lock\.yml'
# → 8 modified locks

Why this scope (not PR #103)

PR #103 retargets the wrapper-side uses: refs. This PR retargets the source-side imports: refs and ships the resulting lock regeneration. Disjoint file sets; either can merge first.

Follow-up not in this PR

scripts/quick-setup.sh:10,232 still references norrietaylor/spectacles (installer header comment + sed pattern that rewrites consumer-side uses: lines). Belongs with #103 or a dedicated installer PR.

Test plan

  • lint / compile job goes green on this PR
  • leak-scan, docs, MCP smoke test remain green
  • After merge, lint on main push goes green
  • gh aw compile on a fresh clone produces no drift

🤖 Generated with Claude Code

The 8 sdd-* sources pinned shared/* at norrietaylor/spectacles@main, but
this repo lives at gominimal/spectacles. The drift was masked while the
two orgs' shared/ contents matched; once norrietaylor/main advanced
(ADR 0012 fast-path), the committed locks fell behind and CI's lint
drift gate started failing on main.

Retargets every sdd-*.md imports: block from norrietaylor/spectacles to
gominimal/spectacles and re-runs gh aw compile so the inlined locks come
from this repo's own shared/ on @main.

Pairs with #103 (which retargets the wrappers' uses: lines). After both
land, scripts/quick-setup.sh still references norrietaylor in its
installer sed pattern and header comment - follow-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 21, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0f342690-b02f-4042-86c3-0b80be982bcf

📥 Commits

Reviewing files that changed from the base of the PR and between 772facf and c3d6163.

📒 Files selected for processing (2)
  • .github/workflows/sdd-validate.lock.yml
  • .github/workflows/sdd-validate.md

📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Updated workflow automation metadata and regenerated agent prompts/config assemblies across CI flows.
  • Documentation
    • Clarified lifecycle behavior (fast-path vs full-path), misclassification reset (removes current lifecycle label then returns to spec), and refined command vocabulary (/spec, /fastpath, /approve, /dispatch), including dispatch no-op messaging before/after approve.
  • Style
    • Regenerated embedded template/heredoc markers and prompt delimiters (no functional config changes).

Walkthrough

Switch workflow imports from norrietaylor to gominimal, regenerate compiled prompts and lockfile metadata (heredoc IDs, safe-output-tools insertion, MCP tool fragments), and update embedded SDD interaction contract to document fast-path states and revised command semantics.

Changes

Spectacles Source Migration and Fast-Path Interaction Updates

Layer / File(s) Summary
Unified workflow + lockfile changes
.github/workflows/*.md, .github/workflows/*.lock.yml
All workflow definitions and compiled lockfiles were updated to reference gominimal/spectacles/shared/*@main`` fragments and had their compiled prompt assemblies and heredoc delimiters regenerated.
Fast-path lifecycle and command vocabulary edits
shared/sdd-interaction.md, .github/workflows/*.lock.yml
Embedded human-interaction contract sections (lifecycle-label state machine and comment-command vocabulary) were expanded to include fast-path states/transitions, add /fastpath, refine /spec reset semantics, and clarify /approve and /dispatch behavior (including /dispatch noop guidance on fast-path).
Prompt construction, safe-outputs, and MCP config regeneration
.github/workflows/*.lock.yml
System prompt heredoc identifiers and the <safe-output-tools> insertion points were regenerated; MCP tool prompt fragments were re-included under new markers; Safe Outputs config.json and MCP gateway config heredoc markers were re-emitted (visible JSON/config contents preserved except where noted).
Lockfile metadata/frontmatter updates
.github/workflows/*.lock.yml
gh-aw-metadata frontmatter hashes were regenerated across lockfiles to reflect recompilation with the new shared fragment sources and prompt assemblies.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

  • gominimal/min-aw#243: Overlaps because this PR updates the same SDD shared fragments the route-v2 proposal would import.
  • gominimal/inbox#148: Related because the PR changes sdd-triage/shared fragments and fast-path semantics that downstream inbox/triage agents reuse.

Possibly related PRs

  • gominimal/spectacles#98: Updates lifecycle state-machine documentation that validator scripts check; overlaps with these contract edits.
  • gominimal/spectacles#101: Similar regenerated prompt/contract changes introducing fast-path lifecycle semantics and /dispatch guidance.
  • gominimal/spectacles#103: Related migration of workflow references from norrietaylor to gominimal across wrappers/workflows.

Poem

🐰 From norrietaylor to gominimal I bound,
Heredocs renamed and prompts rewound,
Fast-path whispers now sit in the guide,
/dispatch learns patience, /approve at its side,
The rabbit polishes docs and hops along.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main changeset: retargeting shared imports from norrietaylor to gominimal and regenerating lock files.
Description check ✅ Passed The description is well-detailed and directly related to the changeset, explaining the motivation (CI failures due to stale locks), the specific changes made, and the test plan.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/sdd-execute-haiku.lock.yml (1)

891-897: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

The misclassification reset targets the wrong lifecycle label.

Step 2 already moved the tracking issue from sdd:fastpath to sdd:in-progress before implementation starts (Lines 777-790). By the time this escalation path runs, sdd:fastpath is no longer present, so a reset that removes only sdd:fastpath can leave the issue stuck in sdd:in-progress. This reset description should clear sdd:in-progress (or otherwise describe the real transition) before returning to sdd:spec.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/sdd-execute-haiku.lock.yml around lines 891 - 897, The
misclassification-reset text currently only removes sdd:fastpath but must also
clear the lifecycle label sdd:in-progress before adding sdd:spec; update the
escalation description so the reset removes sdd:in-progress (and sdd:fastpath if
present), then adds sdd:spec and triggers the full pipeline with the stub spec
as the starting point, ensuring the issue does not remain stuck in
sdd:in-progress.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/sdd-dispatch.lock.yml:
- Line 411: The `/dispatch` noop handling currently redirects fast-path
`sdd:in-progress` users to `/approve`; change the branching so the `/approve`
redirect is emitted only for `sdd:fastpath` and `sdd:fastpath-review`, and for
`sdd:in-progress` produce a noop comment that clearly states execution is
already running (no `/approve` suggestion). Locate the code that decides noop
comments for `/dispatch` (references: `/dispatch`, `sdd:ready`,
`sdd:in-progress`, `sdd:fastpath`, `sdd:fastpath-review`, `/approve`) and update
the conditional logic and message text accordingly so `sdd:in-progress` does not
reference `/approve`.

In @.github/workflows/sdd-triage.lock.yml:
- Around line 445-449: The workflow prompt must explicitly guard phase C tree
materialization against fast-path issues: update the source prompt text that
defines behavior for the `/approve` and `/dispatch` commands so that if the
tracking issue has label/state `sdd:fastpath` (or fast-path states like
`sdd:fastpath-review`/`sdd:in-progress`) the agent does NOT perform full
Unit/task tree materialization or advance to `sdd:ready`; instead it should
dispatch a single `sdd-execute-{tier}` per ADR 0012 and make `/dispatch` a noop
with an explanatory comment. Locate the strings mentioning `/approve`,
`/dispatch`, `sdd:fastpath`, `sdd-triage`, and ADR 0012 in the prompt source,
add the fast-path conditional/guard before phase C behavior, then recompile the
lockfile to regenerate .github/workflows/sdd-triage.lock.yml.

In @.github/workflows/sdd-validate.lock.yml:
- Around line 368-381: The workflow still advances any clean implementation pass
to the sdd:review label; update the prompt logic and the safe-output label
allowlist so that fast-path flows (labels sdd:fastpath and the fast-path
implementation from sdd:in-progress) transition directly to sdd:done instead of
sdd:review. Concretely, modify the state-advancement logic that currently maps
sdd:validate -> sdd:review to exclude issues carrying sdd:fastpath (and
sdd:fastpath-review) and add a branch mapping sdd:validate (fast-path case) or
sdd:in-progress+ sdd:fastpath -> sdd:done; also update the safe-output label
allowlist to not require sdd:review for fast-path runs, then recompile the
workflow so the new prompt and allowlist are applied.

---

Outside diff comments:
In @.github/workflows/sdd-execute-haiku.lock.yml:
- Around line 891-897: The misclassification-reset text currently only removes
sdd:fastpath but must also clear the lifecycle label sdd:in-progress before
adding sdd:spec; update the escalation description so the reset removes
sdd:in-progress (and sdd:fastpath if present), then adds sdd:spec and triggers
the full pipeline with the stub spec as the starting point, ensuring the issue
does not remain stuck in sdd:in-progress.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 69f94603-bf3a-4c70-bcc3-3e61a1f72f44

📥 Commits

Reviewing files that changed from the base of the PR and between 8d62989 and 0f0c5ac.

📒 Files selected for processing (16)
  • .github/workflows/sdd-dispatch.lock.yml
  • .github/workflows/sdd-dispatch.md
  • .github/workflows/sdd-execute-haiku.lock.yml
  • .github/workflows/sdd-execute-haiku.md
  • .github/workflows/sdd-execute-opus.lock.yml
  • .github/workflows/sdd-execute-opus.md
  • .github/workflows/sdd-execute-sonnet.lock.yml
  • .github/workflows/sdd-execute-sonnet.md
  • .github/workflows/sdd-review.lock.yml
  • .github/workflows/sdd-review.md
  • .github/workflows/sdd-spec.lock.yml
  • .github/workflows/sdd-spec.md
  • .github/workflows/sdd-triage.lock.yml
  • .github/workflows/sdd-triage.md
  • .github/workflows/sdd-validate.lock.yml
  • .github/workflows/sdd-validate.md

Comment thread .github/workflows/sdd-dispatch.lock.yml
Comment thread .github/workflows/sdd-triage.lock.yml
Comment thread .github/workflows/sdd-validate.lock.yml
…ispatch noop

Addresses three CodeRabbit findings on PR #104 (one skipped as
already-guarded). All fixes are in source .md prompts; the matching
.lock.yml diff is regenerated for source-side fragments. The shared/
fragment change does not propagate into .lock.yml until merge (locks
import shared/* via pinned-ref @main per ADR 0002/0004) - this is
expected and propagates on the next compile after merge.

- shared/sdd-interaction.md (finding 1): split the /dispatch noop
  semantics by lifecycle state. For a fast-path tracking issue at
  sdd:fastpath / sdd:fastpath-review the noop comment continues to
  point at /approve; for a fast-path sdd:in-progress the comment now
  states that execution is already running and /approve must not be
  used again.

- sdd-validate (finding 3): add sdd:done to the add-labels allowlist
  and route the clean-implementation-boundary move to sdd:done on a
  fast-path feature (linked tracking issue carrying sdd:fastpath /
  sdd:fastpath-review or showing fast-path history), preserving
  sdd:in-progress -> sdd:review on a full-path feature. Updates the
  procedure, idempotence rule, summary, and verification section to
  match. Per ADR 0012, a fast-path feature never carries sdd:review.

- sdd-execute-{haiku,opus,sonnet} (finding 4): reword the
  misclassification-escalation reset description so it is
  label-agnostic. Once this agent has flipped sdd:fastpath ->
  sdd:in-progress, an escalation /spec must clear sdd:in-progress,
  not sdd:fastpath; before that flip the reset still clears
  sdd:fastpath / sdd:fastpath-review. The description now says the
  reset removes whichever lifecycle label is currently present.

Finding 2 (sdd-triage fast-path guard) skipped: wrappers/sdd-triage.yml
already detects sdd:fastpath / sdd:fastpath-review on /approve and
routes to a separate fastpath-approve job that dispatches sdd-execute,
never the sdd-triage agent. /dispatch is handled by sdd-dispatch, not
sdd-triage. The lock-file lines the reviewer cited are imported
documentation (sdd-interaction.md), not sdd-triage agent behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@norrietaylor
Copy link
Copy Markdown
Owner Author

CodeRabbit findings — verification + fixes

Verified each finding against current code; pushed 772facf.

# Finding Verdict Action
1 /dispatch noop wording (fast-path sdd:in-progress shouldn't be redirected to /approve) VALID Updated shared/sdd-interaction.md table cell + prose to split the noop semantics by lifecycle state
2 sdd-triage source must guard against fast-path SKIPPED wrappers/sdd-triage.yml:128-131 already detects sdd:fastpath/sdd:fastpath-review and routes /approve to a separate fastpath-approve job that dispatches sdd-execute, never the sdd-triage agent. /dispatch is sdd-dispatch's domain. The lock lines cited (445-449) are imported documentation, not sdd-triage agent behavior. Prompt-level guards would be dead doc noise
3 sdd-validate must move fast-path to sdd:done, not sdd:review VALID Added sdd:done to add-labels allowlist; added fast-path branch to the lifecycle-move procedure, the summary, and the verification section
4 Misclass-reset must clear sdd:in-progress, not just sdd:fastpath VALID Reworded the reset description in all three sdd-execute-*.md sources to be label-agnostic (removes whichever lifecycle label is currently present)

Note on finding 1 lock-file propagation

Source fix lives in shared/sdd-interaction.md. Per ADR 0002/0004, sdd-dispatch and sdd-triage import this fragment via pinned-ref gominimal/spectacles/shared/sdd-interaction.md@main, so gh aw compile fetches the remote version at the @main SHA, not the local edit. The matching .lock.yml diff will therefore appear on the next compile after this PR merges — expected, not a drift. The lint drift gate is satisfied either way because no .lock.yml regenerated for sdd-dispatch/sdd-triage on this push.

Findings 3 + 4 are agent-source edits, so their lock content is updated in this commit (sdd-validate.lock.yml, sdd-execute-{haiku,opus,sonnet}.lock.yml).

norrietaylor and others added 2 commits May 20, 2026 21:28
…s sdd:done

The previous commit (772facf) added sdd:done to sdd-validate's
add-labels allowlist and prose so fast-path features would skip
sdd:review. That violated the single-writer invariant defined in
scripts/lifecycle-states.yml: sdd-execute is the declared writer of
sdd:done, and the lifecycle state-machine test fails fast on two
writers for the same label. The safe-output allowlist test also
flagged the new prose ("Add the next lifecycle label") as not matching
the imperative "Add the X label" pattern, masking both sdd:review and
sdd:done from the parser.

Corrected approach for the same CodeRabbit finding (fast-path must not
pass through sdd:review): on a fast-path feature this agent posts the
findings comment but performs no lifecycle move. sdd-execute, as the
declared writer of sdd:done, handles the
sdd:in-progress -> sdd:done transition when the implementation PR
merges (ADR 0012). The allowlist returns to [needs-human, sdd:review]
and the prose returns to imperative "Add the sdd:review label" for the
full-path branch only.

Verified locally:
- python3 scripts/test-lifecycle-state-machine.py - OK
- python3 scripts/test-safe-output-allowlists.py - OK

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@norrietaylor norrietaylor enabled auto-merge May 21, 2026 04:39
@norrietaylor norrietaylor merged commit d985d3d into main May 21, 2026
10 of 11 checks passed
@norrietaylor norrietaylor deleted the chore/retarget-source-imports-to-gominimal branch May 21, 2026 04:39
norrietaylor added a commit that referenced this pull request May 21, 2026
chore: regenerate locks after #104 merge (unblock main lint)
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