egm-bootstrap
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEGM Peanuts and Hay Bootstrap (egm-bootstrap
)
egm-bootstrapEGM Peanuts 与 Hay Bootstrap (egm-bootstrap
)
egm-bootstrapWhen running in Codex or ChatGPT Work, first read Codex integration.
In Claude Code or Cowork, read first.
${CLAUDE_PLUGIN_ROOT}/docs/claude.md在 Codex 或 ChatGPT Work 中运行时,请先阅读 Codex 集成。
在 Claude Code 或 Cowork 中,请先阅读 。
${CLAUDE_PLUGIN_ROOT}/docs/claude.mdOverview
概述
This skill automates the creation, correction, formatting, and correctness
verification of Elephant-and-Goldfish Model (EGM) compliant files
across a directory tree. It establishes clear architectural contracts
(interfaces, invariants, and side effects) for both human developers and AI
assistants.
README.md- Peanuts: Leaf-level Component Package READMEs containing specific file contracts.
- Hay: Parent-level Repository Blueprints that roll up child interface contracts into high-altitude indexes.
此 skill 自动化整个目录树中 Elephant-and-Goldfish Model(EGM)合规 文件的创建、修正、格式化和正确性验证。它为人类开发者和 AI 助手建立清晰的架构契约(接口、不变量和副作用)。
README.md- Peanuts:包含具体文件契约的叶级 Component Package README。
- Hay:父级 Repository Blueprint,将子级接口契约汇总为高层索引。
Delegation
委派
A Goldfish runs in a fresh context with no conversation history. Spawn each
subagent with your harness's subagent tool (Antigravity: ; Claude Code: ; Codex: ). Each subagent is defined in , and its
frontmatter (for example ) is the subagent type to request
where your harness registers named subagents. Otherwise spawn a general-purpose
subagent and tell it to read that persona file first. Pass the prompt verbatim
and wait for the report. If your harness cannot nest subagents,
use direct dispatch instead of the synthesizer. See .
If your harness has no subagent tool, run the scout steps inline.
invoke_subagentAgentspawn_agentagents/<file>.mdnameegm-zoom-outdocs/harnesses.mdGoldfish 在没有对话历史的新上下文中运行。使用 harness 的 subagent 工具启动每个 subagent(Antigravity:;Claude Code:;Codex:)。每个 subagent 定义在 中,其 frontmatter (例如 )是请求 subagent 类型时所用的名称,前提是 harness 注册了具名 subagent。否则,启动一个通用 subagent,并要求它先读取该 persona 文件。逐字传递 prompt 并等待报告。如果 harness 无法嵌套 subagent,则直接分派,而不要使用 synthesizer。参见 。
如果 harness 没有 subagent 工具,则内联执行 scout 步骤。
invoke_subagentAgentspawn_agentagents/<file>.mdnameegm-zoom-outdocs/harnesses.mdInputs
输入
- : The target root directory path to bootstrap (Required).
path - : Internal parameter.
is_workerif executing as a worker Sub-Orchestrator (Optional, default:true).false - : Internal parameter. The root path of the assigned subtree partition (Optional).
sub_tree_root - : Target contract filename to generate or update (Optional, default:
target_filename). Supports alternate blueprint filenames such as"README.md"when pre-existing human-maintained READMEs must not be modified."EGM.md"
- :要初始化的目标根目录路径(必填)。
path - :内部参数。以 worker Sub-Orchestrator 身份执行时为
is_worker(可选,默认:true)。false - :内部参数。已分配的子树分区根路径(可选)。
sub_tree_root - :要生成或更新的目标契约文件名(可选,默认:
target_filename)。也支持"README.md"等备用 Blueprint 文件名,适用于必须不修改现有人工维护 README 的情况。"EGM.md"
Execution Constraints (CRITICAL)
执行约束(关键)
- No Code Generation: You are strictly limited to documentation. Do not write or refactor any functional source code.
- VCS Isolation: Do not perform any version control commits (,
git commit). All filesystem changes must be written locally using standard file-writing tools. Tracking and submitting is deferred to the human user.git add - Temporary File Isolation: Parallel workers sharing the workspace must perform all status tracking, check-pointing, and log writing in independent, worker-specific directories outside the project repository workspace.
- Tool Usage (CRITICAL): Use your shell, file-reading, file-writing, and file-editing tools for directory discovery and contract/README
generation. Adhere to clean Markdown formatting directly during generation
(standard headers, tables, and fenced code blocks). If a project markdown
formatter (e.g. ) is explicitly configured in the repository, it may optionally be invoked.
npx prettier --write - Subagent Delegation: Spawn sub-orchestrator workers in parallel.
- Mandatory Safety Gate (CRITICAL): If you discover more than 15 subdirectories, you MUST immediately request user approval (using a structured question tool, if your harness has one, or plain chat) before proceeding with full-tree execution or unbounded subagent spawning.
- 不生成代码:严格限于文档处理。不得编写或重构任何功能性源代码。
- VCS 隔离:不得执行任何版本控制提交(、
git commit)。所有文件系统变更必须使用标准文件写入工具在本地写入。跟踪和提交工作延后由人工用户处理。git add - 临时文件隔离:共享工作区的并行 worker 必须在项目仓库工作区之外的独立 worker 专属目录中执行所有状态跟踪、检查点记录和日志写入。
- 工具使用(关键):使用 shell、文件读取、文件写入和文件编辑工具进行目录发现及契约/README 生成。生成时直接遵循整洁的 Markdown 格式(标准标题、表格和围栏代码块)。如果仓库中明确配置了 Markdown 格式化器(例如 ),也可以选择调用它。
npx prettier --write - Subagent 委派:并行启动 Sub-Orchestrator worker。
- 强制安全门控(关键):如果发现超过 15 个子目录,必须立即请求用户批准(如果 harness 提供结构化问题工具,则使用该工具,否则使用普通聊天),然后才能执行全树操作或不受限制地启动 subagent。
Workflow
工作流
Step 0: Ecosystem & Verification Discovery
步骤 0:生态系统与验证发现
- Inspect the repository root for package/build manifests:
- Node.js / TypeScript: ->
package.json(ornpm test/pnpm test)yarn test - Rust: ->
Cargo.tomlcargo test - Go: ->
go.modgo test ./... - Python: /
pyproject.toml/pytest.ini->setup.pypytest - C/C++ / Make: ->
Makefilemake test - Bazel: /
BUILD->BUILD.bazelbazel test //... - None found:
<test-command>
- Node.js / TypeScript:
- Record as to populate generated README contracts.
VerificationCommand
- 检查仓库根目录中的包管理或构建清单:
- Node.js / TypeScript:->
package.json(或npm test/pnpm test)yarn test - Rust:->
Cargo.tomlcargo test - Go:->
go.modgo test ./... - Python:/
pyproject.toml/pytest.ini->setup.pypytest - C/C++ / Make:->
Makefilemake test - Bazel:/
BUILD->BUILD.bazelbazel test //... - 未找到:
<test-command>
- Node.js / TypeScript:
- 记录为 ,用于填充生成的 README 契约。
VerificationCommand
Step 1: Startup Branching Control
步骤 1:启动分支控制
- Check the input parameter.
is_worker - If is
is_worker, jump directly to Step 4: Sub-Orchestrator Worker Flow to process the assignedtrue.sub_tree_root - If is
is_workeror unset, proceed as the Root Orchestrator to Step 2: Incremental Scoping & Safety Gate.false
- 检查 输入参数。
is_worker - 如果 为
is_worker,则直接跳转到 步骤 4:Sub-Orchestrator Worker 流程,处理分配的true。sub_tree_root - 如果 为
is_worker或未设置,则以 Root Orchestrator 身份继续执行 步骤 2:增量范围界定与安全门控。false
Step 2: Incremental Scoping & Safety Gate (Root Orchestrator)
步骤 2:增量范围界定与安全门控(Root Orchestrator)
-
Incremental BFS Discovery: Map the targettree level-by-level (BFS) using a directory queue, listing one directory level at a time. (CRITICAL: never run a recursive search such as
pathorfind.)ls -R- Preserve intermediate folder nodes.
- Ignore symbolic links to prevent infinite recursion.
- Ignore hidden/system directories (,
.git,.antigravity,node_modules,venv,dist,build).third_party - Read and
.gitignore(if present) and ignore matching glob patterns..egmignore - Preserve package and build manifests (,
package.json,Cargo.toml,go.mod,pyproject.toml,Makefile) in the discovery map to extract verification targets later.BUILD
-
Safety Gate & Unbounded Spawning Approval (CRITICAL): During the BFS loop, if the total running count of discovered directories exceeds 15, immediately pause discovery and request user approval (using a structured question tool, if your harness has one, or plain chat) to warn the user and request approval for full-tree execution:
- : "The target directory tree contains more than 15 subdirectories. This is a large execution scope. Do you want to proceed with full-tree bootstrapping?"
question - :
options["Yes, proceed with full tree bootstrapping", "No, abort execution"] - (CRITICAL: After requesting approval, you MUST wait for the user's response before continuing or spawning any workers).
- If the user selects abort, terminate execution immediately.
-
Bottom-up Post-Pruning Pass: Once mapping is complete (and approved), walk the mapped tree bottom-up (leaves to root). Filter out non-code and test-only directories:
- Source Code Files: Files matching recognized source code, schema, and
contract extensions:
- Systems & Compiled: ,
.c,.cc,.cpp,.cxx,.h,.hh,.hpp,.rs,.go,.zig.lean - Managed & Enterprise: ,
.java,.kt,.scala,.cs.fs - Scripting & Dynamic: ,
.py,.rb,.php,.lua,.sh.bash - Web & Mobile: ,
.ts,.tsx,.js,.jsx,.mjs,.cjs,.swift,.m.dart - Data & Schemas / IDLs: ,
.sql,.proto,.graphql,.gql,.thrift.prisma - Infrastructure / Declarative Code: ,
.tf,.hcl(Excludes build manifests, lockfiles, test fixtures, documentation, and generic data dumps like.cue,.csv,.tsv)..parquet
- Systems & Compiled:
- Test Directory Exclusion: Exclude directories containing exclusively
test code (e.g. named ,
tests,testing, or containing only files matchingtestdata,*_test.*,*Test.*, ortest_*.*).*.spec.* - Non-Code Filtering: Exclude any directory that contains no source code files AND contains no subdirectories with code. Retain empty intermediate folders only if they have child directories that contain code.
- Source Code Files: Files matching recognized source code, schema, and
contract extensions:
-
Calculate the total count of pruned directories and maximum depth. Proceed to Step 3: Execution Strategy Selection.
-
增量 BFS 发现:使用目录队列逐层映射目标树,每次仅列出一个目录层级。(关键:绝不运行
path或find等递归搜索。)ls -R- 保留中间文件夹节点。
- 忽略符号链接,以防止无限递归。
- 忽略隐藏或系统目录(、
.git、.antigravity、node_modules、venv、dist、build)。third_party - 读取 和
.gitignore(如果存在),并忽略与其中的 glob 模式匹配的内容。.egmignore - 在发现映射中保留包管理和构建清单(、
package.json、Cargo.toml、go.mod、pyproject.toml、Makefile),以便稍后提取验证目标。BUILD
-
安全门控与无界启动批准(关键):在 BFS 循环期间,如果已发现目录的总数超过 15,请立即暂停发现并请求用户批准(如果 harness 提供结构化问题工具,则使用该工具,否则使用普通聊天),提醒用户并请求批准执行全树操作:
- : "目标目录树包含超过 15 个子目录。这是一个大型执行范围。是否要继续对整个树进行 bootstrapping?"
question - :
options["是,继续对整个树进行 bootstrapping", "否,中止执行"] - (关键:请求批准后,必须等待用户响应,然后才能继续执行或启动任何 worker)。
- 如果用户选择中止,请立即终止执行。
-
自底向上的剪枝处理:映射完成(并获得批准)后,自底向上遍历映射树(从叶节点到根节点)。过滤非代码目录和仅含测试的目录:
- 源代码文件:匹配已知源代码、schema 和契约扩展名的文件:
- 系统与编译型:、
.c、.cc、.cpp、.cxx、.h、.hh、.hpp、.rs、.go、.zig.lean - 托管与企业级:、
.java、.kt、.scala、.cs.fs - 脚本与动态语言:、
.py、.rb、.php、.lua、.sh.bash - Web 与移动端:、
.ts、.tsx、.js、.jsx、.mjs、.cjs、.swift、.m.dart - 数据与 Schema / IDL:、
.sql、.proto、.graphql、.gql、.thrift.prisma - 基础设施与声明式代码:、
.tf、.hcl(不包括构建清单、锁文件、测试夹具、文档以及.cue、.csv、.tsv等通用数据转储。).parquet
- 系统与编译型:
- 测试目录排除:排除仅包含测试代码的目录,例如名为 、
tests、testing的目录,或只包含testdata、*_test.*、*Test.*、test_*.*文件的目录。*.spec.* - 非代码过滤:排除既不包含源代码文件、也不包含带代码子目录的目录。仅当空中间文件夹的子目录中包含代码时,才保留该文件夹。
- 源代码文件:匹配已知源代码、schema 和契约扩展名的文件:
-
计算剪枝后的目录总数和最大深度。然后进入 步骤 3:执行策略选择。
Step 3: Execution Strategy Selection (Root Orchestrator)
步骤 3:执行策略选择(Root Orchestrator)
-
Direct Execution Strategy (Directory Count <= 5):
- If the total count of pruned directories is 5 or fewer, execute the bottom-up documentation directly in the current thread.
- Jump to Step 4: Sub-Orchestrator Worker Flow (treating the Root
Orchestrator as the worker for the entire ), and then proceed to Step 5: Root Compilation & Termination.
path
-
Unbounded Parallel Subagent Swarm Strategy (Directory Count > 5):
- (CRITICAL: If Directory Count > 15, you MUST verify that you have received explicit user approval before proceeding. If not yet approved, request approval immediately and wait for the user's response before spawning workers).
- Partition the discovery map into independent subtree branches using the
Adaptive Depth Partitioning Algorithm:
- Set .
depth = 1 - Extract directory nodes from the discovery map located at the
current .
depth - If the count of nodes at is between 3 and 5: select these nodes as subtree partition roots.
depth - If the count of nodes at < 3: increment
depth(up to a max of 3) and repeat step 2.depth - If the count of nodes at > 5: group the largest branches (by total nested folder count) into 3-4 separate partitions, combine the remaining small branches into a single fallback partition subtree, and select these as partition roots.
depth - Fallback: If reaches 3 and count is still < 3, select the immediate children of the root (or fall back to sequential execution).
depth
- Set
- Spawn Unbounded Sub-Orchestrators: For each partition subtree root,
use your harness's subagent tool to spawn a parallel worker:
- Subagent: (
egm-bootstrap-orchestrator) (or a general-purpose subagent)agents/bootstrap_orchestrator.md - : "Run egm-bootstrap with path=
Prompt, is_worker=true, sub_tree_root=[path], target_filename=[partition_root]."[target_filename]
- Subagent:
- Unbounded Execution: Spawn all Sub-Orchestrators in parallel without artificial concurrency limits (as authorized by the user during the safety gate).
- Go idle and wait for all worker subagents to return their JSON subtree index payloads. Jump to Step 5: Root Compilation & Termination.
-
直接执行策略(目录数 <= 5):
- 如果剪枝后的目录总数不超过 5,则在当前线程中直接自底向上生成文档。
- 跳转到 步骤 4:Sub-Orchestrator Worker 流程,将 Root Orchestrator 视为负责整个 的 worker,随后进入 步骤 5:根节点编译与终止。
path
-
无界并行 Subagent 群集策略(目录数 > 5):
- (关键:如果目录数 > 15,必须确认已获得用户的明确批准。如果尚未批准,请立即请求批准,并在启动 worker 前等待用户响应。)
- 使用 自适应深度分区算法,将发现映射划分为相互独立的子树分支:
- 设置 。
depth = 1 - 从发现映射中提取位于当前 的目录节点。
depth - 如果 处的节点数介于 3 到 5 之间,则选择这些节点作为子树分区根节点。
depth - 如果 处的节点数小于 3,则将
depth增加 1(最多增加到 3),并重复步骤 2。depth - 如果 处的节点数大于 5,则按嵌套文件夹总数将最大的分支分为 3 到 4 个独立分区,将剩余的小分支合并为一个备用分区子树,并选择这些分支作为分区根节点。
depth - 备用方案:如果 增加到 3 后节点数仍小于 3,则选择根节点的直接子节点,或回退到顺序执行。
depth
- 设置
- 启动无界 Sub-Orchestrator:针对每个分区子树根节点,使用 harness 的 subagent 工具并行启动 worker:
- Subagent:(
egm-bootstrap-orchestrator),或使用通用 subagent。agents/bootstrap_orchestrator.md - :"使用 path=
Prompt、is_worker=true、sub_tree_root=[path]、target_filename=[partition_root]运行 egm-bootstrap。"[target_filename]
- Subagent:
- 无界执行:在用户通过安全门控授权后,不设置人为并发限制,并行启动所有 Sub-Orchestrator。
- 闲置并等待所有 worker subagent 返回 JSON 子树索引载荷。然后进入 步骤 5:根节点编译与终止。
Step 4: Sub-Orchestrator Worker Flow
步骤 4:Sub-Orchestrator Worker 流程
-
Scout Registration: Use a read-onlyscout. Where your harness supports defining subagents at runtime, register it with:
goldfish-explorer- :
namegoldfish-explorer - :
descriptionRead-only codebase explorer scout. - : >- You are a read-only codebase explorer. Your task is to analyze the source files in the target directory and return a concise, factual summary. Do not write or modify any files. Return a JSON object containing the directory's public symbols (interface), invariants, and side effects matching schema: {"interface": [], "invariants": [], "side_effects": []}. Never infer RPC methods, routes, status enums, or invariants from file or directory names alone; cite the exact
system_promptfor every entry, and output[file:symbol_or_flag]if no explicit invariants or side effects exist in code.["None"] - :
enable_write_toolsfalse - :
enable_subagent_toolsfalse
-
Post-Order Traversal: Walk the assigned(or
sub_tree_root) in post-order (deepest leaves first). For each directorypath:D-
Correction & Modification Policy: Check if(default:
target_filename) already exists inREADME.md.D- If exists, do not overwrite it completely. Instead, read its existing content.
target_filename - Scout Scan Requirement: Whether exists or not, always scan the source code using the
target_filenamescout forgoldfish-explorerto compile the true code symbol boundary.D - Legacy Extraction & Correction: If exists, call the reasoning LLM with prompt: > "Analyze the following unstructured documentation content. Extract all public symbol names, classes, interfaces, invariants, and side effects. Format your response strictly as a JSON object matching the following schema: { "interface": string[], "invariants": string[], "side_effects": string[] }." Merge these extracted symbols with the scout's code symbols. Use your file-editing tool (or your file-writing tool) to correct and update the existing contract file to be EGM compliant while preserving developer notes and descriptions.
target_filename
- If
-
Scout Spawning & Constraints: Spawnfor
goldfish-explorer.D- Scout Constraints: No per-directory or per-file byte cap; every
non-test file in is read in full. Bound each scout call to about 1,500 lines of source instead: list top-level definitions (class/func/def/route/flag lines) with your search tool, cut the directory's files into chunks at those boundaries (never mid-body; small files share a chunk), spawn one
Dper chunk in parallel, and merge their JSON. Give each chunk the file's imports and top-level definition list so it can judge visibility. Check build-manifest deps andgoldfish-explorer/importstatements before attributing an RPC service, schema, or message type to a local file. Read non-test files in this order:#include- Contracts, schemas, and build manifests (,
.h,.hh,.hpp,.proto,.graphql,.gql,.thrift,.prismaDDL, interface classes); extract exact DDL table names and exported build targets..sql - Module entry points (,
main.*,index.*,lib.*,mod.*, or files matching directory name), then production source/query files alphabetically.__init__.py - Templates and configs: up to 200 lines each (800 in config-only
directories); exclude /
.css..scss - Test files (,
*_test.*,*Test.*,test_*.*): ignore entirely, including in hybrid directories.*.spec.*
- Contracts, schemas, and build manifests (
- Child Fault Tolerance: If the scout fails or times out, log a
warning, use placeholder values , and continue execution.
["(Details pending/documentation failed)"]
- Scout Constraints: No per-directory or per-file byte cap; every
non-test file in
-
Parent Context Propagation: When processing a parent directory, retrieve the compiled interface summaries of its immediate child subdirectories.
P- Propagation Heuristics:
- If the child was documented during this run, retrieve its public interface directly from the in-memory execution cache.
- If the child was corrected/modified (Correction Policy), use the merged legacy extraction symbols.
- Pass these child symbol blocks as prompt context when invoking 's explorer scout.
P
- Propagation Heuristics:
-
Verification Command Target Lookup: Populate the Verification section using the discovered.
VerificationCommand- If the project uses Bazel/BUILD files: check if a file exists in
BUILDor the nearest ancestor, referencingD/bazel testwith valid target patterns (bazel buildor//[package_path]/..., never//[package_path]:allor//[package_path]...). Use//[package_path]:...for interactive runner targets.bazel run - If the project uses other manifests (,
package.json,Cargo.toml,go.mod,pyproject.toml), populate with the corresponding test runner command.Makefile - If no verification command is identified, omit or use a placeholder.
- If the project uses Bazel/BUILD files: check if a
-
Directory Classification & Template Generation: Generate or correctusing your file-writing tool or your file-editing tool based on
target_filename's classification.D- Component Package (Peanut): contains direct source code files. Use the Component Package README Template. (If it also has child subdirectories, include relative links to their contracts in the Interface section).
D - Repository Blueprint (Hay): contains no direct source code files, but contains subdirectories with code contracts. Use the Intermediate Blueprint README Template.
D - Link Formatting Policy (CRITICAL): Package contract files must use a
hybrid link formatting approach to balance portability and clarity:
- Relative Links to Existing Files Only: Use relative paths
(e.g., or
./child/${target_filename}) for child contracts and sibling file references within the same codebase subsystem. (CRITICAL: Only generate../sibling/${target_filename}links for child directories that exist in the pruned[Child](./child/${target_filename})and contain an actualsubtree_index. If a child directory contains a${target_filename}or other non-contract asset, link directly toSKILL.mdor format it as an unlinked bullet point. Never output speculative links to non-existent contract files)../child/SKILL.md - Absolute Links: Use standard URLs or repository paths for referencing files outside the package subsystem (e.g., cross-package dependencies).
- Relative Links to Existing Files Only: Use relative paths
(e.g.,
- Component Package (Peanut):
-
Markdown Formatting: Immediately after writing or correctingin
target_filename, ensure clean markdown formatting (valid headers, tables, and code fences). If a project markdown formatter (e.g.D) is configured in the repository, you may execute it onnpx prettier --write.target_filename
-
-
Worker Reporting: Once the assigned subtree is fully traversed, compile thearray containing the
subtree_index,path,summary,interface, andinvariantsfor every processed directory.side_effects -
Ifis
is_worker, read the Worker Return Interface Schema relative to this skill directory, then return a matching JSON payload to the Root Orchestrator and terminate. Iftrueisis_worker(sequential mode), proceed directly to Step 5: Root Compilation & Termination.false
-
Scout 注册:使用只读的scout。如果 harness 支持在运行时定义 subagent,请按如下方式注册:
goldfish-explorer- :
namegoldfish-explorer - :只读的代码库探索 scout。
description - :>- 你是一个只读的代码库探索者。你的任务是分析目标目录中的源文件,并返回简洁、基于事实的摘要。不得写入或修改任何文件。返回一个 JSON 对象,其中包含与以下 schema 匹配的目录公共符号(interface)、不变量(invariants)和副作用(side effects):{"interface": [], "invariants": [], "side_effects": []}。绝不能仅根据文件名或目录名推断 RPC 方法、路由、状态枚举或不变量;每个条目都必须引用准确的
system_prompt,如果代码中不存在明确的不变量或副作用,则输出[file:symbol_or_flag]。["None"] - :
enable_write_toolsfalse - :
enable_subagent_toolsfalse
-
后序遍历:以后序方式遍历分配的或
sub_tree_root,优先处理最深的叶节点。对于每个目录path:D-
修正与修改策略:检查中是否已存在
D(默认:target_filename)。README.md- 如果 已存在,不要完全覆盖它。应改为读取其现有内容。
target_filename - Scout 扫描要求:无论 是否存在,都始终使用
target_filenamescout 扫描goldfish-explorer的源代码,以确定真实的代码符号边界。D - 旧版内容提取与修正:如果 已存在,请使用以下 prompt 调用推理 LLM:> "分析以下非结构化文档内容。提取所有公共符号名称、类、接口、不变量和副作用。将响应严格格式化为与以下 schema 匹配的 JSON 对象:{"interface": string[], "invariants": string[], "side_effects": string[]}。" 将提取出的符号与 scout 提供的代码符号合并。使用文件编辑工具或文件写入工具,修正并更新现有契约文件,使其符合 EGM 要求,同时保留开发者备注和说明。
target_filename
- 如果
-
Scout 启动与约束:为启动
D。goldfish-explorer- Scout 约束:单个目录或单个文件不设字节上限;中的每个非测试文件都必须完整读取。改为将每次 scout 调用限制在约 1,500 行源代码以内:使用搜索工具列出顶层定义(class/func/def/route/flag 行),在这些边界处将目录文件切分为多个块(绝不能从函数体中间切分;小文件可以共用一个块),并行启动一个
D处理每个块,然后合并其 JSON。将文件的 imports 和顶层定义列表提供给每个块,以便其判断可见性。在将 RPC 服务、schema 或消息类型归属于某个本地文件之前,检查构建清单依赖以及goldfish-explorer/import语句。按以下顺序读取非测试文件:#include- 契约、schema 和构建清单(、
.h、.hh、.hpp、.proto、.graphql、.gql、.thrift、.prismaDDL、接口类);提取准确的 DDL 表名和导出的构建目标。.sql - 模块入口点(、
main.*、index.*、lib.*、mod.*,或与目录名称匹配的文件),然后按字母顺序处理生产源代码或查询文件。__init__.py - 模板和配置:每个最多 200 行,仅含配置的目录最多 800 行;排除 /
.css。.scss - 测试文件(、
*_test.*、*Test.*、test_*.*):完全忽略,包括混合目录中的测试文件。*.spec.*
- 契约、schema 和构建清单(
- 子项容错:如果 scout 执行失败或超时,请记录警告,使用占位值 ,然后继续执行。
["(Details pending/documentation failed)"]
- Scout 约束:单个目录或单个文件不设字节上限;
-
父级上下文传播:处理父目录时,检索其直接子目录的已编译接口摘要。
P- 传播启发式规则:
- 如果子目录在本次运行中已被记录,则直接从内存执行缓存中检索其公共接口。
- 如果子目录已按修正策略进行修正或修改,则使用合并后的旧版内容提取符号。
- 调用 的 explorer scout 时,将这些子级符号块作为 prompt 上下文传入。
P
- 传播启发式规则:
-
验证命令目标查找:使用发现的填充验证章节。
VerificationCommand- 如果项目使用 Bazel/BUILD 文件,检查 或最近的祖先目录中是否存在
D文件,并引用带有有效目标模式的BUILD/bazel test(bazel build或//[package_path]/...,绝不能使用//[package_path]:all或//[package_path]...)。对于交互式 runner 目标,使用//[package_path]:...。bazel run - 如果项目使用其他清单(、
package.json、Cargo.toml、go.mod、pyproject.toml),则填入相应的测试运行器命令。Makefile - 如果未识别出验证命令,则省略该章节或使用占位内容。
- 如果项目使用 Bazel/BUILD 文件,检查
-
目录分类与模板生成:根据的分类,使用文件写入工具或文件编辑工具生成或修正
D。target_filename- Component Package(Peanut):包含直接源代码文件。使用 Component Package README 模板。(如果它还包含子目录,请在 Interface 章节中加入指向这些目录契约的相对链接。)
D - Repository Blueprint(Hay):不包含直接源代码文件,但包含具有代码契约的子目录。使用 Intermediate Blueprint README 模板。
D - 链接格式策略(关键):Package 契约文件必须采用兼顾可移植性和清晰度的混合链接格式:
- 仅使用指向现有文件的相对链接:对于同一代码库子系统内的子级契约和同级文件引用,使用相对路径(例如 或
./child/${target_filename})。(关键:仅当子目录存在于剪枝后的../sibling/${target_filename}中且实际包含subtree_index时,才生成形如${target_filename}的链接。如果子目录包含[Child](./child/${target_filename})或其他非契约资产,则直接链接到SKILL.md,或将其格式化为无链接的项目符号。绝不能输出指向不存在契约文件的推测性链接。)./child/SKILL.md - 绝对链接:引用 Package 子系统外部的文件时,使用标准 URL 或仓库路径(例如跨 Package 依赖)。
- 仅使用指向现有文件的相对链接:对于同一代码库子系统内的子级契约和同级文件引用,使用相对路径(例如
- Component Package(Peanut):
-
Markdown 格式:写入或修正中的
D后,立即确保 Markdown 格式整洁(有效标题、表格和代码围栏)。如果仓库中配置了 Markdown 格式化器(例如target_filename),可以对npx prettier --write执行该格式化器。target_filename
-
-
Worker 报告:分配的子树完全遍历后,编译数组,其中包含每个已处理目录的
subtree_index、path、summary、interface和invariants。side_effects -
如果为
is_worker,请相对于此 skill 目录读取 Worker Return Interface Schema,然后向 Root Orchestrator 返回匹配的 JSON 载荷并终止。如果true为is_worker(顺序模式),则直接进入 步骤 5:根节点编译与终止。false
Step 5: Root Compilation & Termination (Root Orchestrator)
步骤 5:根节点编译与终止(Root Orchestrator)
-
Receive Worker Payloads: Collect the JSONpayloads returned by all parallel Sub-Orchestrators.
subtree_index- Root Fault Tolerance: If a parallel worker fails or times out, log a
warning, insert a placeholder warning link () in the root Blueprint's subdirectory index, and complete the remaining compilation. (Worker failures leaving partial files are handled as an incremental progress feature; the Correction Policy allows resuming on subsequent runs).
[Subtree Root] (Documentation failed / Subagent execution timeout)
- Root Fault Tolerance: If a parallel worker fails or times out, log a
warning, insert a placeholder warning link (
-
Intermediate Directory Documentation: Identify any intermediate directories sitting between the rootand the partitioned subtree roots.
path- Process these intermediate directories sequentially bottom-up.
- Generate Intermediate Blueprint contract files using the compiled summaries returned by the workers.
- Ensure clean formatting and valid relative links for each Intermediate Blueprint contract file.
-
Root Directory Documentation: The target rootof the execution is always classified as the Repository Root (Blueprint / Hay).
path- Check if already exists in
target_filename. If present, apply the Correction & Modification Policy to read and retain the existing title, metadata, and architectural overview at the top of the root contract file.path - Check if itself contains any direct source files. If present, spawn a
pathscout forgoldfish-explorerto extract local symbols and invariants, appending them under the optionalpathsection.## Local Interface & Invariants - Compile the final root using the Repository Root Blueprint Template, rolling up all top-level subdirectory boundaries. Ensure any root architecture or sequence diagrams strictly match the synchronous / asynchronous boundaries, operation names, and storage backends in the child
target_filenamepayloads without inventing unverified nodes.subtree_index - Write the root using your file-writing tool.
target_filename
- Check if
-
Final Correctness Verification (CRITICAL): You MUST perform a final verification pass across ALL created and modified contract files in the(including all child package contracts like
subtree_indexandpkg1/${target_filename}) as a correctness check before concluding work. You MUST explicitly read every single created or modified contract file to verify its content. Do not skip any child contract files. Verify:pkg2/${target_filename}- EGM Compliance & Code Grounding: Ensure ,
Interface, andInvariantssections exist, cite real code symbols/flags/tables from the scout extraction, and contain zero speculative or unverified claims.Side Effects - Markdown Syntax: Ensure clean headers, valid tables, and proper code block fences.
- Valid & Resolvable Links (CRITICAL): Ensure all subdirectory and
sibling links use valid relative paths (or
./subdir/${target_filename}), and explicitly verify that every referenced target file actually exists on the filesystem. Remove or correct any broken relative references../subdir/SKILL.md - Valid Targets: Verify verification targets match project test
configuration and use valid target syntax (for Bazel, or
/..., never:all).:...
- EGM Compliance & Code Grounding: Ensure
-
Optional Drift Review (CRITICAL): After verification, ask the user (using a structured question tool, if your harness has one, or plain chat) to offer running a drift report on the generated documentation updates:
- : "Do you want to run the EGM Drift Report on the generated contract updates to check for consistency with the codebase?"
question - :
options["(Recommended) Yes, run drift report on modified contracts", "No, skip drift review"] - If the user selects "Yes", run the skill targeting the modified contracts to verify both missing code coverage and doc-to-code hallucinations (verifying every documented method, route, enum, database table, and invariant against local source files and recording discrepancies in the drift report for human triage). (Note: While
egm-drift-reportis often used for design documents, it can be applied to EGM-compliant contracts as a variant).egm-drift-report
-
Terminate execution successfully.
-
接收 Worker 载荷:收集所有并行 Sub-Orchestrator 返回的 JSON载荷。
subtree_index- 根节点容错:如果并行 worker 执行失败或超时,请记录警告,在根 Blueprint 的子目录索引中插入占位警告链接 ,并完成其余编译工作。 (worker 失败后留下的部分文件被视为增量进度功能的一部分;修正策略允许在后续运行中继续处理。)
[Subtree Root](Documentation failed / Subagent execution timeout)
- 根节点容错:如果并行 worker 执行失败或超时,请记录警告,在根 Blueprint 的子目录索引中插入占位警告链接
-
中间目录文档:识别位于根与分区子树根节点之间的所有中间目录。
path- 自底向上依次处理这些中间目录。
- 使用 worker 返回的已编译摘要生成 Intermediate Blueprint 契约文件。
- 确保每个 Intermediate Blueprint 契约文件格式整洁且相对链接有效。
-
根目录文档:执行的目标根始终分类为 Repository Root(Blueprint / Hay)。
path- 检查 中是否已存在
path。如果存在,则应用 修正与修改策略,读取并保留根契约文件顶部的现有标题、元数据和架构概述。target_filename - 检查 本身是否包含任何直接源代码文件。如果包含,则为
path启动pathscout,以提取本地符号和不变量,并将其追加到可选的goldfish-explorer章节中。## Local Interface & Invariants - 使用 Repository Root Blueprint 模板编译最终根 ,汇总所有顶层子目录边界。确保根架构图或时序图严格符合子级
target_filename载荷中的同步或异步边界、操作名称和存储后端,且不引入未经验证的节点。subtree_index - 使用文件写入工具写入根 。
target_filename
- 检查
-
最终正确性验证(关键):结束工作前,必须对中所有已创建和修改的契约文件(包括
subtree_index和pkg1/${target_filename}等所有子级 Package 契约)执行最终验证。必须明确读取每一个已创建或修改的契约文件,不得跳过任何子级契约文件。验证以下内容:pkg2/${target_filename}- EGM 合规性与代码依据:确保存在 Interface、Invariants 和 Side Effects 章节,引用 scout 提取出的真实代码符号、标志或表,并且不包含任何推测性或未经验证的主张。
- Markdown 语法:确保标题、表格和代码块围栏整洁有效。
- 链接有效且可解析(关键):确保所有子目录和同级链接使用有效的相对路径(或
./subdir/${target_filename}),并明确验证每个被引用的目标文件确实存在于文件系统中。删除或修正所有无效的相对引用。./subdir/SKILL.md - 目标有效:验证目标与项目测试配置一致,并使用有效的目标语法;对于 Bazel,应使用 或
/...,绝不能使用:all。:...
-
可选漂移审查(关键):验证完成后,询问用户(如果 harness 提供结构化问题工具,则使用该工具,否则使用普通聊天),询问是否对生成的文档更新运行漂移报告:
- :"是否要对生成的契约更新运行 EGM Drift Report,以检查其与代码库的一致性?"
question - :
options["(推荐)是,对修改后的契约运行 drift report", "否,跳过 drift review"] - 如果用户选择“是”,则运行 skill,并将其目标设为已修改的契约,以验证代码覆盖缺口和文档到代码的幻觉;将每个已记录的方法、路由、枚举、数据库表和不变量与本地源文件进行核对,并把差异记录在漂移报告中,供人工分类处理。(注意:
egm-drift-report通常用于设计文档,但也可以作为变体应用于 EGM 合规契约。)egm-drift-report
-
成功终止执行。
Templates
模板
Before writing any contract file, read the
README templates relative to this skill directory.
It defines the Component Package (Peanuts), Repository Root (Blueprint /
Hay), and Intermediate Blueprint README templates referenced above.
写入任何契约文件之前,请相对于此 skill 目录读取 README 模板。其中定义了上文引用的 Component Package(Peanuts)、Repository Root(Blueprint / Hay) 和 Intermediate Blueprint README 模板。