From 3f6f0be7af0c1ec1bbef3b0999b93a9897055c47 Mon Sep 17 00:00:00 2001 From: Lex Date: Tue, 1 Sep 2026 23:38:41 +0800 Subject: [PATCH 1/3] chore(specgit): refresh delivery harness for specgit 1.10.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Re-run specgit init --force with the installed 1.10.1 CLI so fresh feature worktrees stop conflicting with the checked-in harness. - policy.yaml, AGENTS.md/CLAUDE.md managed blocks, hooks.json: 1.10.1 output is byte-identical; the curated required_checks (Typecheck, Unit Tests (linux)) are preserved by design (#310) — the canonical ids are not observable check-run names on the main-line matrix (b6473cc2c8) and stay out of the policy. - specgit-accept.yml: keep the repository-specialized workflow (main- only trigger, no workflow_dispatch, head-ref checkout with persist-credentials: false, global npm install -g specgit@^0.5.0, yaml-free wait step with the proven 40min deadline). The 1.10.1 template variant imports 'yaml' with no dependency installed and waits only 13min — shorter than the ~28min Unit Tests sibling. - specgit-merge-guard.sh: take the 1.10.1 improvement — the guard now also blocks glab mr merge, not only gh pr merge. - .husky/_/pre-push: untracked local pre-push guard (untracked model). Closes #488 --- .opencode/hooks/specgit-merge-guard.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.opencode/hooks/specgit-merge-guard.sh b/.opencode/hooks/specgit-merge-guard.sh index f261123f3..01981b809 100755 --- a/.opencode/hooks/specgit-merge-guard.sh +++ b/.opencode/hooks/specgit-merge-guard.sh @@ -26,7 +26,7 @@ esac command=$(printf '%s' "$payload" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>{try{const j=JSON.parse(s);process.stdout.write((j.tool_input&&j.tool_input.command)||'')}catch{process.stdout.write('')}})") case "$command" in - gh\ pr\ merge*) + gh\ pr\ merge*|glab\ mr\ merge*) exec node -e ' const { spawn } = require("child_process"); const fs = require("fs"); From 933646280d7226868a44c70096708e0ad61cebae Mon Sep 17 00:00:00 2001 From: Lex Date: Tue, 1 Sep 2026 23:42:15 +0800 Subject: [PATCH 2/3] chore: record delivery binding for refresh-specgit-harness --- .specgit.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.specgit.yaml b/.specgit.yaml index 26c1440be..9b281ea5f 100644 --- a/.specgit.yaml +++ b/.specgit.yaml @@ -1,11 +1,11 @@ version: 1 -delivery: tui-crashes-on +delivery: refresh-specgit-harness context: kind: branch - branch: fix/465-tui-crashes-on + branch: chore/refresh-specgit-harness issues: - - 465 + - 488 issueKinds: - - issue: 465 - kind: kind::fix -pr: 466 + - issue: 488 + kind: kind::chore +pr: 489 From ca978db0ea94a0d56306464e6a5ac7842265853d Mon Sep 17 00:00:00 2001 From: Lex Date: Tue, 1 Sep 2026 23:43:07 +0800 Subject: [PATCH 3/3] chore(specgit): refresh opencode command surface for issue bootstrap --- .opencode/command/specgit-issue.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.opencode/command/specgit-issue.md b/.opencode/command/specgit-issue.md index aff9adebd..7ad133cde 100644 --- a/.opencode/command/specgit-issue.md +++ b/.opencode/command/specgit-issue.md @@ -13,17 +13,18 @@ AGENTS.md SpecGit block; this command only launches it. 1. Collect the argument: `$ARGUMENTS` is either an issue title (create) or a pure number (reuse). Multiple arguments = N issues in one delivery. -2. Run from the repo root: +2. Run from the repo root — keep `$ARGUMENTS` UNQUOTED so each quoted title + arrives as its own argument: ```bash - specgit issue "$ARGUMENTS" --json + specgit issue $ARGUMENTS --json ``` 3. On success report the brief: issue URL(s), PR URL (draft), branch name — then fill each issue body it created (Why / Scope / Approach / Acceptance) from the discussion with `gh issue edit `, then implement. Fill in the draft PR's scaffold (Why / What changed / - Evidence) as you deliver; its placeholders are advisory, never gates, - and the closing references stay intact. + Evidence / Checklist) as you deliver; its placeholders are advisory, + never gates, and the closing references stay intact. 4. Switch to the delivery branch and begin the TDD loop. 5. On error, read `errors[].fix` and follow it — never bypass the record.