* chore(#3618): fold fallow-runner onto the canonical binary resolver Epic #3411 Phase 2. src/fallow-runner.cts was the fourth divergent implementation of Windows binary resolution the epic enumerated — candidateNames, isExecutableFile, findInPath, findInNodeModules, 40 lines. All four are deleted; resolveFallowBinary is one seam call. Two OPT-IN options were added to resolveExecutableBinary to make the fold behavior-preserving, both defaulting off so Phase 1's callers are byte-identical: prependPaths dirs searched before env.PATH, in order, through the identical per-directory candidate logic. This expresses node_modules/.bin-first precedence without env surgery — the rejected alternative re-introduced the spread-loses-the-proxy hazard the Windows lane caught in Phase 1, at every future call site instead of once. requireExecutable POSIX-only accessSync(X_OK); a no-op on win32 where mode bits do not mean execute. Opt-in rather than default because unconditional X_OK breaks #3445's suite, which stages candidates with plain writeFileSync and never sets an exec bit — the repo bans chmod in tests — so every one would resolve to null on POSIX. Deliberate behavior change on Windows: fallow's prior candidate list ended in a BARE fallow. The seam never tries a bare name there, so an extensionless file beside fallow.cmd is no longer resolved. That is the fix, not a regression — the extensionless file is npm's POSIX sh shim, which CreateProcess cannot run (#3275). Rows 7 and 8 of the design record it. Defect found while working, fixed inline: the resolution order was documented BACKWARDS as PATH-then-.bin in structural-pre-pass.md, docs/INVENTORY.md and four INVENTORY translations. The code has always been .bin first, and .bin first is correct — a project-local tool should beat a global one. The archived changeset is left alone as a historical record. fallow-runner had no test file at all. tests/fallow-runner.test.cjs is new (F1-F15) and the seam options are pinned by S1-S12 folded into the existing dispatch suite. RED proven by execution: with both source files stashed and build:lib re-run, 7 of 27 probe cases failed. Refs #3411 * chore(#3618): backfill changeset pr number 3633 * fix(#3618): assert both platform contracts in F4 instead of a POSIX-only premise Windows CI on #3633 failed F4. The test monkeypatched accessSync to throw and asserted resolveFallowBinary returned null — but that premise, that the X_OK check is consulted at all, is POSIX-only by design. requireExecutable is a deliberate no-op on win32 because Windows mode bits do not mean execute, so the staged fixture correctly resolved there. 40-design.md's negative-space section already states this carve-out verbatim. The test contradicted the design it was written from: fixtures were made platform-adaptive in the previous commit, and this assertion was left platform-blind. F4 now asserts BOTH contracts — null on POSIX, resolves on win32 — rather than skipping either. A t.skip on one lane would have been green and would have left the win32 carve-out unpinned by fallow's own entry point. Audited every other row for the same class. F1-F3, F5, F6, F11-F15 hold on both platforms; F7-F10 and S1-S12 inject platform explicitly and are unaffected. F4 was the only row with a single-platform premise. The local probe runs on one platform and structurally cannot catch this, which is why it was green — that limitation is now stated at the top of the probe so a green probe is not mistaken for platform coverage. The win32 branch was proven by injecting platform:'win32' with accessSync throwing and asserting it still resolves. Refs #3411 --------- Co-authored-by: sim <sim@local>
GSD Core ドキュメント
ドキュメントは 4 つの象限で構成されています。チュートリアルは実践で学ぶ、ハウツーガイドは特定のタスクを解決する、リファレンスは信頼できる情報を示す、解説はコンセプトと設計上の決定を探求する。
言語バージョン: English · Português (pt-BR) · 日本語 · 简体中文 · 한국어
チュートリアル
- はじめてのプロジェクト — インストールから最初のフェーズ出荷まで、確実な一本道
- 既存コードベースのオンボーディング — ブラウンフィールドのリポジトリに GSD Core を導入する
How-to guides
- ランタイムへのインストール — サポートされる全 16 ランタイムのランタイム別インストール手順
- フェーズを議論する — 計画を始める前に実装上の決定事項を記録する
- フェーズを計画する — リサーチを実行し、作業を分解し、計画の品質を検証する
- フェーズを実行する — 新鮮なコンテキストのサブエージェントで並列ウェーブとして計画を実行する
- 検証と出荷 — 完成した作業を確認し、障害を診断し、PR を作成する
- フェーズを自律的に実行する — 無人フェーズ実行に自律モードを使用する
- クイックおよびファストタスクを処理する — フェーズループ外のアドホック作業に
/gsd-quickと/gsd-fastを使用する - モデルプロファイルを設定する — クオリティ・バランス・バジェットのモデルティア間を切り替える
- クロス AI レビューをセットアップする — プライマリエージェントが生成したコードをレビューする 2 番目の AI を設定する
- ワークストリームで並列作業する — ワークストリームを使って独立した作業ラインを同時に実行する
- ワークスペースで作業を隔離する — ワークスペースを使って実験的またはリスクのある変更をサンドボックス化する
- 失敗した実行をデバッグする — 壊れたまたは不完全なフェーズ実行を診断・回復する
- スパイクとスケッチ — 計画を確定する前の探索的作業に
/gsd-spikeと/gsd-sketchを使用する - UI フェーズを設計する — フロントエンドおよびビジュアル作業に UI フェーズループを使用する
- トラッカーイシューから GSD を動かす — GitHub、Linear、または Jira のイシューからフェーズを開始する
- GSD 2 から移行する — 既存の GSD 2 プロジェクトを GSD Core にアップグレードする
- GSD をアップデートする — インストーラーを再実行して最新リリースを取得する
- 回復とトラブルシューティング — よくある問題を修正し、コンテキストを再構築し、アンインストールする
リファレンス
- コマンド — フラグと例を含むすべてのコマンド
- 設定 — 完全な設定スキーマ、モデルプロファイル、Git ブランチ戦略
- CLI ツール — ワークフローとエージェント向け
gsd-tools.cjsプログラマティック API - 機能 — 完全な機能インデックス
- インベントリ — インストール済みスキルとサーフェスマップ
- STATE.md スキーマ —
.planning/STATE.mdのフィールド別リファレンス - CONTEXT.md スキーマ —
.planning/phases/<N>/CONTEXT.mdのフィールド別リファレンス - PLAN.md スキーマ —
.planning/phases/<N>/PLAN.mdのフィールド別リファレンス - 計画アーティファクト — すべての
.planning/ファイルとその役割
解説
- コンテキストエンジニアリング — コンテキストの腐敗がどのように形成され、GSD Core がどのように防ぐか
- フェーズループ — Discuss → Plan → Execute → Verify → Ship サイクルの設計理念
- マルチエージェントオーケストレーション — サブエージェントがどのように生成・スコープ設定・調整されるか
- セキュリティモデル — 信頼境界、パーミッション、安全な自動化
- アーキテクチャ — システムアーキテクチャ、エージェントモデル、データフロー
- ディスカスモード —
/gsd-discuss-phaseの assumptions モードと interview モード - コンテキストモニタリング — コンテキストウィンドウ監視フックのアーキテクチャ
- イシュー駆動オーケストレーション — 既存のプリミティブを使ってトラッカーイシューから GSD を動かすレシピ
Related
- ルート README — ランディングページ、クイックスタート、ドキュメント概要
- 変更履歴 — リリース履歴