@echopath-labs/forgerail 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +37 -0
- package/CHANGELOG.md +17 -0
- package/CONTRIBUTING.md +7 -0
- package/LICENSE +201 -0
- package/NOTICE +4 -0
- package/PLUGIN.md +11 -0
- package/README.md +65 -0
- package/README.zh-CN.md +39 -0
- package/SECURITY.md +7 -0
- package/adapters/claude-code.json +20 -0
- package/adapters/codex.json +20 -0
- package/adapters/cursor.json +20 -0
- package/contracts/adoption-plan.schema.json +53 -0
- package/contracts/capability-pack.schema.json +23 -0
- package/contracts/effective-profile.schema.json +42 -0
- package/contracts/host-adapter.schema.json +43 -0
- package/contracts/host-binding-receipt.schema.json +47 -0
- package/contracts/launch-contract.schema.json +15 -0
- package/contracts/profile-change-candidate.schema.json +21 -0
- package/contracts/return-receipt.schema.json +23 -0
- package/contracts/task-envelope.schema.json +21 -0
- package/docs/adoption.md +51 -0
- package/docs/adoption.zh-CN.md +51 -0
- package/docs/agw-coverage-baseline.json +21 -0
- package/docs/agw-coverage-baseline.md +21 -0
- package/docs/agw-frozen-baseline.json +51 -0
- package/docs/architecture-acceptance.md +38 -0
- package/docs/context-cost.md +13 -0
- package/docs/external-capability-packs.md +25 -0
- package/docs/installation.md +88 -0
- package/docs/installation.zh-CN.md +60 -0
- package/docs/migration-from-agw.md +12 -0
- package/docs/pack-authoring.md +17 -0
- package/docs/release.md +50 -0
- package/docs/release.zh-CN.md +50 -0
- package/package.json +48 -0
- package/packs/workspace-health-review.json +15 -0
- package/scripts/disposable-consumer.mjs +143 -0
- package/scripts/fixtures/contracts/adoption-plan.multi-host.valid.json +44 -0
- package/scripts/fixtures/contracts/adoption-plan.mutating.invalid.json +18 -0
- package/scripts/fixtures/contracts/adoption-plan.single-host.valid.json +27 -0
- package/scripts/fixtures/contracts/effective-profile.valid.json +29 -0
- package/scripts/fixtures/contracts/host-adapter.claude-code.profile-only.valid.json +14 -0
- package/scripts/fixtures/contracts/host-adapter.codex.valid.json +17 -0
- package/scripts/fixtures/contracts/host-adapter.cursor.profile-only.valid.json +14 -0
- package/scripts/fixtures/contracts/host-binding-receipt.unverified.invalid.json +27 -0
- package/scripts/fixtures/contracts/host-binding-receipt.valid.json +27 -0
- package/scripts/fixtures/contracts/launch-contract.valid.json +19 -0
- package/scripts/fixtures/contracts/profile-change-candidate.valid.json +13 -0
- package/scripts/fixtures/contracts/profile-input.available-pack.json +26 -0
- package/scripts/fixtures/contracts/profile-input.conflict.json +20 -0
- package/scripts/fixtures/contracts/profile-input.external-rulesets.json +11 -0
- package/scripts/fixtures/contracts/profile-input.orchestration-available.json +11 -0
- package/scripts/fixtures/contracts/return-receipt.deviation.invalid.json +15 -0
- package/scripts/fixtures/contracts/return-receipt.valid.json +15 -0
- package/scripts/fixtures/contracts/task-envelope.overlap.invalid.json +13 -0
- package/scripts/fixtures/contracts/task-envelope.valid.json +13 -0
- package/scripts/fixtures/workspaces/empty-records/README.md +3 -0
- package/scripts/fixtures/workspaces/markdown-existing/AGENTS.md +3 -0
- package/scripts/fixtures/workspaces/markdown-existing/docs/adr/0001-record-strategy.md +3 -0
- package/scripts/fixtures/workspaces/markdown-existing/package.json +7 -0
- package/scripts/forgerail.mjs +210 -0
- package/scripts/lib/adoption.mjs +158 -0
- package/scripts/lib/bundle.mjs +77 -0
- package/scripts/lib/composition.mjs +96 -0
- package/scripts/lib/contracts.mjs +316 -0
- package/scripts/lib/diagnosis.mjs +93 -0
- package/scripts/shadow-comparison.mjs +98 -0
- package/scripts/validate-external-packs.mjs +27 -0
- package/scripts/validate-release.mjs +194 -0
- package/skills/forgerail/SKILL.md +53 -0
- package/skills/forgerail/agents/openai.yaml +7 -0
- package/skills/forgerail/references/adoption.md +13 -0
- package/skills/forgerail/references/contracts.md +57 -0
- package/skills/forgerail/references/profile-resolution.md +14 -0
- package/skills/forgerail-workspace-diagnosis/SKILL.md +42 -0
- package/skills/forgerail-workspace-diagnosis/agents/openai.yaml +7 -0
- package/skills/forgerail-workspace-diagnosis/references/record-strategies.md +13 -0
- package/skills/workspace-health-review/SKILL.md +27 -0
- package/skills/workspace-health-review/agents/openai.yaml +7 -0
- package/skills/workspace-health-review/references/health-review.md +21 -0
- package/templates/FORGERAIL.md +15 -0
- package/templates/bindings/claude-code-thin.md +5 -0
- package/templates/bindings/codex-compact.md +5 -0
- package/templates/bindings/codex-thin.md +5 -0
- package/templates/bindings/cursor-thin.mdc +7 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/host-binding-receipt-v1.json",
|
|
4
|
+
"title": "ForgeRail Host Binding Receipt",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "planId", "workspace", "adoptionLevel", "contractPath", "hosts", "changedFiles", "validationEvidence", "discoveredSkills", "activationVerification", "confirmedNonMutations", "deviations", "closeout"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"planId": { "type": "string", "pattern": "^[a-zA-Z0-9._:-]+$" },
|
|
11
|
+
"workspace": { "type": "string", "minLength": 1 },
|
|
12
|
+
"adoptionLevel": { "enum": ["plugin-only", "lightweight-adoption", "persisted-governance"] },
|
|
13
|
+
"contractPath": { "type": ["string", "null"] },
|
|
14
|
+
"hosts": {
|
|
15
|
+
"type": "array",
|
|
16
|
+
"minItems": 1,
|
|
17
|
+
"items": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"additionalProperties": false,
|
|
20
|
+
"required": ["adapterId", "target", "baseSha256", "appliedSha256", "status", "verification"],
|
|
21
|
+
"properties": {
|
|
22
|
+
"adapterId": { "type": "string", "pattern": "^[a-z][a-z0-9-]+$" },
|
|
23
|
+
"target": { "type": "string", "minLength": 1 },
|
|
24
|
+
"baseSha256": { "type": ["string", "null"], "pattern": "^[0-9a-f]{64}$" },
|
|
25
|
+
"appliedSha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
26
|
+
"status": { "enum": ["verified", "unverified", "failed"] },
|
|
27
|
+
"verification": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"changedFiles": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
|
|
32
|
+
"validationEvidence": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
33
|
+
"discoveredSkills": { "type": "array", "items": { "type": "string", "pattern": "^[a-z][a-z0-9-]+$" }, "uniqueItems": true },
|
|
34
|
+
"activationVerification": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": ["mode", "verified"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"mode": { "enum": ["new-task", "equivalent-supported-discovery", "host-specific"] },
|
|
40
|
+
"verified": { "type": "boolean" }
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"confirmedNonMutations": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
44
|
+
"deviations": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
|
|
45
|
+
"closeout": { "enum": ["complete", "incomplete", "blocked"] }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/launch-contract-v1.json",
|
|
4
|
+
"title": "ForgeRail Launch Contract",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "envelope", "effectiveRuleSources", "hostAgent", "executionOwner"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"envelope": { "$ref": "task-envelope.schema.json" },
|
|
11
|
+
"effectiveRuleSources": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
12
|
+
"hostAgent": { "type": "string", "minLength": 1 },
|
|
13
|
+
"executionOwner": { "const": "host-agent" }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/profile-change-candidate-v1.json",
|
|
4
|
+
"title": "ForgeRail Profile Change Candidate",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "candidateId", "workspace", "ruleId", "proposedValue", "evidence", "targetOwner", "targetSource", "reason", "requiresConfirmation", "status"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"candidateId": { "type": "string", "pattern": "^[a-zA-Z0-9._:-]+$" },
|
|
11
|
+
"workspace": { "type": "string", "minLength": 1 },
|
|
12
|
+
"ruleId": { "type": "string", "pattern": "^[a-z][a-z0-9.-]+$" },
|
|
13
|
+
"proposedValue": {},
|
|
14
|
+
"evidence": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
15
|
+
"targetOwner": { "type": "string", "minLength": 1 },
|
|
16
|
+
"targetSource": { "type": "string", "minLength": 1 },
|
|
17
|
+
"reason": { "type": "string", "minLength": 1 },
|
|
18
|
+
"requiresConfirmation": { "const": true },
|
|
19
|
+
"status": { "const": "candidate" }
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/return-receipt-v1.json",
|
|
4
|
+
"title": "ForgeRail Return Receipt",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "taskId", "ownerWorkspace", "branch", "commit", "changedScope", "validationEvidence", "externalSideEffects", "confirmedNonMutations", "residualRisks", "rollbackOrRecovery", "deviations", "closeout"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"taskId": { "type": "string", "pattern": "^[a-zA-Z0-9._:-]+$" },
|
|
11
|
+
"ownerWorkspace": { "type": "string", "minLength": 1 },
|
|
12
|
+
"branch": { "type": ["string", "null"] },
|
|
13
|
+
"commit": { "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" },
|
|
14
|
+
"changedScope": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
15
|
+
"validationEvidence": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1 },
|
|
16
|
+
"externalSideEffects": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
17
|
+
"confirmedNonMutations": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
18
|
+
"residualRisks": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
19
|
+
"rollbackOrRecovery": { "type": "string", "minLength": 1 },
|
|
20
|
+
"deviations": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
21
|
+
"closeout": { "enum": ["complete", "incomplete", "blocked"] }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/task-envelope-v1.json",
|
|
4
|
+
"title": "ForgeRail Task Envelope",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "taskId", "intent", "nonGoals", "ownerWorkspace", "allowedOperations", "prohibitedOperations", "packs", "approvalGates", "validation", "returnContract"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"taskId": { "type": "string", "pattern": "^[a-zA-Z0-9._:-]+$" },
|
|
11
|
+
"intent": { "type": "string", "minLength": 1 },
|
|
12
|
+
"nonGoals": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
13
|
+
"ownerWorkspace": { "type": "string", "minLength": 1 },
|
|
14
|
+
"allowedOperations": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
|
|
15
|
+
"prohibitedOperations": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
|
|
16
|
+
"packs": { "type": "array", "items": { "type": "string", "pattern": "^[a-z][a-z0-9-]+$" }, "uniqueItems": true },
|
|
17
|
+
"approvalGates": { "type": "array", "items": { "type": "string", "pattern": "^[a-z][a-z0-9-]+$" }, "uniqueItems": true },
|
|
18
|
+
"validation": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
19
|
+
"returnContract": { "type": "string", "const": "forgerail-return-receipt-v1" }
|
|
20
|
+
}
|
|
21
|
+
}
|
package/docs/adoption.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Progressive Adoption
|
|
2
|
+
|
|
3
|
+
ForgeRail separates availability from project adoption. Installing the Agent Plugin or optional CLI makes capabilities available; it does not edit workspace instructions, create durable state, enable Capability Packs, or authorize external effects.
|
|
4
|
+
|
|
5
|
+
## Three Levels
|
|
6
|
+
|
|
7
|
+
### Level 0 — Plugin Only
|
|
8
|
+
|
|
9
|
+
This is the default. Skills are available to the host Agent, while the workspace remains unchanged. Use this level when occasional explicit or implicit Skill discovery is enough.
|
|
10
|
+
|
|
11
|
+
### Level 1 — Lightweight Adoption
|
|
12
|
+
|
|
13
|
+
Use this only after an Agent shows an exact Adoption Plan and the user confirms its writes.
|
|
14
|
+
|
|
15
|
+
- For one host with concise principles, ForgeRail proposes one versioned managed block in that host's native instruction entry.
|
|
16
|
+
- For multiple hosts, ForgeRail proposes `FORGERAIL.md` as the portable Adoption Contract plus thin host bindings that point to it.
|
|
17
|
+
|
|
18
|
+
The planner is read-only:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
forgerail adoption-plan --workspace . --host codex
|
|
22
|
+
forgerail adoption-plan --workspace . --host codex --host claude-code --host cursor
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Each proposal contains the current and proposed level, exact target paths and content, base SHA-256 digests, required confirmation, verification steps, support status, and confirmed non-mutations. There is deliberately no `apply-adoption` command. The host Agent must display the proposal or diff, wait for confirmation, make only the approved writes, then return a Host Binding Receipt.
|
|
26
|
+
|
|
27
|
+
### Level 2 — Persisted Governance
|
|
28
|
+
|
|
29
|
+
This level is reserved for evidence that cannot be represented coherently through existing workspace sources: machine-consumed configuration, CI enforcement, or repeated cross-host conflicts. ForgeRail alpha.1 neither creates nor proposes `.forgerail/` state. A future design must define ownership, precedence, migration, and deletion semantics before enabling it.
|
|
30
|
+
|
|
31
|
+
## Host Support
|
|
32
|
+
|
|
33
|
+
| Host | Native target | Alpha.1 status | Verification |
|
|
34
|
+
| --- | --- | --- | --- |
|
|
35
|
+
| Codex | `AGENTS.md` | `supported` | Start a new Codex task, verify the binding is in scope, and discover the three main Plugin Skills. |
|
|
36
|
+
| Claude Code | `CLAUDE.md` | `profile-only` | The target and thin binding are modeled, but end-to-end activation is not claimed until host-specific verification exists. |
|
|
37
|
+
| Cursor | `.cursor/rules/forgerail.mdc` | `profile-only` | The Rules target is modeled, but Skill discovery and end-to-end activation are not claimed. |
|
|
38
|
+
|
|
39
|
+
Unknown hosts require a reviewed Host Adapter before ForgeRail can generate a binding. A Host Adapter is a projection boundary, not the ForgeRail Core or a second policy source.
|
|
40
|
+
|
|
41
|
+
## Optional Cross-Workspace Orchestration
|
|
42
|
+
|
|
43
|
+
Do not promote the orchestration Pack into a workspace binding merely because it is installed. Recommend it only after observing multiple independent owner/repository/release boundaries and a safe parallel dependency wave. Keep ordinary single-repository work on ForgeRail Core.
|
|
44
|
+
|
|
45
|
+
If the project repeatedly uses this pattern, record the choice through its existing OpenSpec, Spec Kit, ADR, Markdown, issue, or instruction habit after exact durable-write confirmation. Do not create a new orchestration state directory. Task creation and every durable, remote, release, or lifecycle operation retain their own authorization.
|
|
46
|
+
|
|
47
|
+
## Verification And Removal
|
|
48
|
+
|
|
49
|
+
An adoption is complete only when the applied file digest matches the approved plan, supported-host discovery is verified in a new task or equivalent supported check, deviations are empty, and non-mutations are recorded. Profile-only hosts remain unverified until their own host check passes.
|
|
50
|
+
|
|
51
|
+
Removing ForgeRail does not silently remove adopted project instructions. Uninstall the Plugin separately; remove or revise managed blocks through another reviewed plan so unrelated project content is preserved.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 渐进式采用
|
|
2
|
+
|
|
3
|
+
ForgeRail 将“能力可用”与“项目采用”明确分开。安装 Agent Plugin 或可选 CLI,只让能力可用;不会修改工作区 instructions、创建持久化状态、启用 Capability Pack,也不会授权任何外部副作用。
|
|
4
|
+
|
|
5
|
+
## 三级模型
|
|
6
|
+
|
|
7
|
+
### Level 0 — Plugin Only
|
|
8
|
+
|
|
9
|
+
这是默认级别。宿主 Agent 可以发现 Skills,但工作区保持不变。偶尔显式调用或依靠 Agent 按描述判断触发已经足够时,应停留在此级别。
|
|
10
|
+
|
|
11
|
+
### Level 1 — Lightweight Adoption
|
|
12
|
+
|
|
13
|
+
只有在 Agent 展示精确 Adoption Plan、用户确认其中写入后才采用:
|
|
14
|
+
|
|
15
|
+
- 单宿主且原则简短时,只向宿主原生 instruction 入口提出一个带版本 managed block;
|
|
16
|
+
- 多宿主时,提出 `FORGERAIL.md` 作为可移植 Adoption Contract,各宿主只保留指向它的薄绑定。
|
|
17
|
+
|
|
18
|
+
planner 永远只读:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
forgerail adoption-plan --workspace . --host codex
|
|
22
|
+
forgerail adoption-plan --workspace . --host codex --host claude-code --host cursor
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
计划会给出当前/目标级别、精确路径与内容、基线 SHA-256、必需确认、验证步骤、宿主支持状态和明确非变更项。ForgeRail 刻意不提供 `apply-adoption` 命令;宿主 Agent 必须先展示候选或 diff,等待确认,只执行获批写入,再返回 Host Binding Receipt。
|
|
26
|
+
|
|
27
|
+
### Level 2 — Persisted Governance
|
|
28
|
+
|
|
29
|
+
只有现有工作区来源无法清楚承载的证据才可能需要此级别,例如机器读取配置、CI 强制或反复出现的跨宿主冲突。ForgeRail alpha.1 不创建也不提出 `.forgerail/` 状态;未来必须先定义 owner、优先级、迁移与删除语义。
|
|
30
|
+
|
|
31
|
+
## 宿主支持
|
|
32
|
+
|
|
33
|
+
| 宿主 | 原生入口 | alpha.1 状态 | 验证 |
|
|
34
|
+
| --- | --- | --- | --- |
|
|
35
|
+
| Codex | `AGENTS.md` | `supported` | 在采用范围内启动新的 Codex 任务,确认绑定生效并发现三个主插件 Skills。 |
|
|
36
|
+
| Claude Code | `CLAUDE.md` | `profile-only` | 已建模目标和薄绑定,但在宿主专项验证完成前不声称端到端激活。 |
|
|
37
|
+
| Cursor | `.cursor/rules/forgerail.mdc` | `profile-only` | 已建模 Rules 入口,但不声称 Skill 发现和端到端激活已验证。 |
|
|
38
|
+
|
|
39
|
+
未知宿主必须先有经过审查的 Host Adapter 才能生成绑定。Host Adapter 是投影边界,不是 ForgeRail Core,也不是第二套规则源。
|
|
40
|
+
|
|
41
|
+
## 可选跨工作区编排
|
|
42
|
+
|
|
43
|
+
不要因为安装了 orchestration Pack 就把它写进工作区 binding。只有观察到多个独立 owner/repository/release 边界和一个安全并行依赖波次后才建议采用;普通单仓工作继续使用 ForgeRail Core。
|
|
44
|
+
|
|
45
|
+
如果项目反复使用该模式,在取得精确 durable-write 确认后,沿用现有 OpenSpec、Spec Kit、ADR、Markdown、issue 或 instruction 习惯记录,不创建新的编排状态目录。创建任务以及每类 durable、远端、发布或 lifecycle 操作仍保留各自授权。
|
|
46
|
+
|
|
47
|
+
## 核验与移除
|
|
48
|
+
|
|
49
|
+
只有 applied digest 与获批 plan 一致、支持宿主在新任务或等价支持检查中完成发现、deviations 为空且非变更项已记录,采用才能 close 为 complete。`profile-only` 宿主在完成自身专项检查前仍保持未验证。
|
|
50
|
+
|
|
51
|
+
卸载 ForgeRail 不会静默删除项目已经采用的 instructions。插件卸载与项目绑定移除是两件事;修改或移除 managed block 也要经过新的审查计划,以保护无关项目内容。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0",
|
|
3
|
+
"source": "docs/agw-frozen-baseline.json",
|
|
4
|
+
"allowedDispositions": ["forgerail-core", "workspace-diagnosis", "workspace-profile", "task-envelope", "return-receipt", "capability-pack", "source-reference", "unresolved"],
|
|
5
|
+
"items": [
|
|
6
|
+
{ "id": "owner-workspace", "target": "forgerail-core", "status": "mapped" },
|
|
7
|
+
{ "id": "preserve-user-changes", "target": "forgerail-core", "status": "mapped" },
|
|
8
|
+
{ "id": "durable-record-decision", "target": "workspace-diagnosis", "status": "mapped" },
|
|
9
|
+
{ "id": "git-lifecycle", "target": "source-reference", "status": "mapped" },
|
|
10
|
+
{ "id": "validation-and-impact", "target": "task-envelope", "status": "mapped" },
|
|
11
|
+
{ "id": "independent-approval-gates", "target": "forgerail-core", "status": "mapped" },
|
|
12
|
+
{ "id": "machine-readable-closeout", "target": "return-receipt", "status": "mapped" },
|
|
13
|
+
{ "id": "workspace-health-review", "target": "capability-pack", "status": "mapped" },
|
|
14
|
+
{ "id": "release-safety", "target": "capability-pack", "status": "mapped" },
|
|
15
|
+
{ "id": "thread-closure", "target": "capability-pack", "status": "mapped" },
|
|
16
|
+
{ "id": "github-rulesets", "target": "capability-pack", "status": "mapped" }
|
|
17
|
+
],
|
|
18
|
+
"behaviorCoverageReady": true,
|
|
19
|
+
"migrationReady": false,
|
|
20
|
+
"migrationBlockers": ["usable ForgeRail prerelease is not published", "real compatibility-period canaries are incomplete", "AGW lifecycle change is not approved"]
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# AGW To ForgeRail Coverage Baseline
|
|
2
|
+
|
|
3
|
+
This is the initial deterministic owner map. Behavioral equivalence still requires shadow tasks.
|
|
4
|
+
|
|
5
|
+
| AGW/WHR behavior | ForgeRail owner | State |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| smallest owner workspace | Core | mapped |
|
|
8
|
+
| preserve user changes and inspect Git state | Core | mapped |
|
|
9
|
+
| durable record decision using existing systems | Workspace Diagnosis + Profile | mapped |
|
|
10
|
+
| Git branch lifecycle | Profile/source reference | mapped; detailed baseline remains in AGW during compatibility |
|
|
11
|
+
| validation and impact evidence | Core + Task Envelope | mapped |
|
|
12
|
+
| independent approval gates | Core + Task Envelope | mapped |
|
|
13
|
+
| risk and context guardrails | Core + applicable pack | mapped |
|
|
14
|
+
| machine-readable closeout | Return Receipt | mapped |
|
|
15
|
+
| optional EchoPath integration | optional ecosystem contract | mapped conceptually; runtime integration pending |
|
|
16
|
+
| Workspace Health Review | built-in `workspace-health-review` pack | mapped; full historical signal parity pending |
|
|
17
|
+
| release and shared-environment safety | external `forgerail-release-safety` Plugin | mapped; project runbook and separate approval remain required |
|
|
18
|
+
| thread closure governance | external `forgerail-thread-closure` Plugin | mapped; durable write and lifecycle gates remain independent |
|
|
19
|
+
| GitHub Rulesets governance | external `forgerail-github-rulesets` Plugin | mapped; remote execution remains separately approved host-Agent work |
|
|
20
|
+
|
|
21
|
+
The local behavior map is complete, but migration is not ready merely because the map is complete. Remote integration/CI, a usable prerelease, canary evidence, and a separate AGW lifecycle approval remain independent gates.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0",
|
|
3
|
+
"canonicalSource": {
|
|
4
|
+
"repository": "echopath-private",
|
|
5
|
+
"commit": "d16f306d58841c575125d7ea53f3f9dbb715562f",
|
|
6
|
+
"pluginPath": "plugins/agent-workflow-governance",
|
|
7
|
+
"pluginVersion": "0.2.0",
|
|
8
|
+
"skills": [
|
|
9
|
+
{
|
|
10
|
+
"name": "agent-workflow-governance",
|
|
11
|
+
"entryBlob": "3bd3087aeab4de33638125980a7a48b83ee2c231"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "workspace-health-review",
|
|
15
|
+
"entryBlob": "acc042419c3a9f383c0e3cc52c1c84d23a600d1e"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"behaviorSources": [
|
|
19
|
+
{
|
|
20
|
+
"path": "plugins/agent-workflow-governance/skills/agent-workflow-governance/SKILL.md",
|
|
21
|
+
"blob": "3bd3087aeab4de33638125980a7a48b83ee2c231"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "plugins/agent-workflow-governance/skills/agent-workflow-governance/references/durable-record-decision.md",
|
|
25
|
+
"blob": "8987f030f8b89eeb304d4f3d6b4495f70ba463a2"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"path": "plugins/agent-workflow-governance/skills/workspace-health-review/SKILL.md",
|
|
29
|
+
"blob": "acc042419c3a9f383c0e3cc52c1c84d23a600d1e"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"publicEvidence": {
|
|
34
|
+
"repository": "echopath-labs/agent-workflow-governance",
|
|
35
|
+
"draftPullRequest": "https://github.com/echopath-labs/agent-workflow-governance/pull/2",
|
|
36
|
+
"candidateCommit": "94c01a8c2b1b7af54e30a565d87d2f55fe0f5fc1",
|
|
37
|
+
"statusAtFreeze": "release-approval-not-inherited-by-forgerail-work"
|
|
38
|
+
},
|
|
39
|
+
"installEntries": ["agent-workflow-governance", "workspace-health-review"],
|
|
40
|
+
"behaviorAssertions": {
|
|
41
|
+
"featureBranchRecords": ["smallest child workspace", "durable records", "git status"],
|
|
42
|
+
"dirtyWorktreePreservation": ["Preserve user changes"],
|
|
43
|
+
"existingRecordHabit": ["existing durable record system"],
|
|
44
|
+
"workspaceHealth": ["Workspace Health Review"],
|
|
45
|
+
"githubRulesets": ["project-specific workflow or safety checklist"],
|
|
46
|
+
"releaseSafety": ["project-specific release or operations checklist"],
|
|
47
|
+
"threadClosure": ["machine-readable closeout"]
|
|
48
|
+
},
|
|
49
|
+
"rollback": "Disable ForgeRail as core owner and restore the exact validated AGW Plugin candidate or last published AGW version without modifying project records.",
|
|
50
|
+
"lifecycle": "compatibility-baseline"
|
|
51
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# First Alpha Architecture Acceptance
|
|
2
|
+
|
|
3
|
+
Accepted on 2026-08-12:
|
|
4
|
+
|
|
5
|
+
- Core + Workspace Diagnosis + Workspace Health Review ship in the main Agent Plugin.
|
|
6
|
+
- GitHub Rulesets, Release Safety, and Thread Closure begin as external Capability Packs.
|
|
7
|
+
- Workspace Profile is computed from existing sources; no `.forgerail/profile.yaml` is created by default.
|
|
8
|
+
- A lightweight npm/npx CLI is approved for deterministic diagnosis, contract validation, installation inspection, and bundle construction; it is not a prerequisite for using the Agent Plugin.
|
|
9
|
+
- Adoption is progressive: Plugin Only by default, explicitly confirmed Lightweight Adoption through Host Adapters, and evidence-gated Persisted Governance deferred beyond alpha.1.
|
|
10
|
+
- Host instruction entries are projections of one portable Adoption Contract. Codex is supported; Claude Code and Cursor remain profile-only until host-specific activation is verified.
|
|
11
|
+
|
|
12
|
+
## Measurable Acceptance
|
|
13
|
+
|
|
14
|
+
The first usable prerelease must prove:
|
|
15
|
+
|
|
16
|
+
1. official Plugin and Skill validators accept the payload;
|
|
17
|
+
2. clean discovery of exactly three main-Plugin Skills;
|
|
18
|
+
3. bounded diagnosis inherits an existing Markdown/ADR practice without recommending OpenSpec;
|
|
19
|
+
4. a workspace with no observed record practice receives recommendations but no file mutation;
|
|
20
|
+
5. installed Workspace Health remains `available` unless enabled, required, or explicitly invoked;
|
|
21
|
+
6. conflicting allowed/prohibited operations fail validation;
|
|
22
|
+
7. a Return Receipt with unresolved deviations cannot close as complete;
|
|
23
|
+
8. deterministic bundle inventory and digest are reproducible;
|
|
24
|
+
9. disposable install, diagnosis, Launch/Receipt, upgrade, rollback, and uninstall smoke pass before public release;
|
|
25
|
+
10. adoption planning is read-only, exposes exact base/content digests, and cannot generate `.forgerail/` state;
|
|
26
|
+
11. a disposable Codex adoption candidate is explicitly applied by the consumer harness, verified through an equivalent supported discovery check, and closed with a valid Host Binding Receipt;
|
|
27
|
+
12. AGW remains the rollback baseline until shadow comparison and an explicitly approved migration gate complete.
|
|
28
|
+
|
|
29
|
+
## Representative Shadow Tasks
|
|
30
|
+
|
|
31
|
+
- normal feature work with branch and durable-record handling;
|
|
32
|
+
- bug fix with dirty-worktree preservation;
|
|
33
|
+
- documentation-only task using existing Markdown decisions;
|
|
34
|
+
- shared-environment release preparation requiring a project runbook;
|
|
35
|
+
- GitHub Rulesets assessment where no remote mutation is authorized;
|
|
36
|
+
- completed task requiring a workspace health or closure recommendation.
|
|
37
|
+
|
|
38
|
+
The compatibility period cannot end until all mapped AGW/WHR behaviors have owners, disposable and real canaries show no uncovered P0/P1 behavior, rollback is proven, and lifecycle change receives separate approval.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Context Cost And Progressive Loading
|
|
2
|
+
|
|
3
|
+
ForgeRail's default task entry is `skills/forgerail/SKILL.md`. Workspace Diagnosis and Workspace Health are separate Skills and do not load merely because the main Plugin is installed.
|
|
4
|
+
|
|
5
|
+
At the first alpha implementation point:
|
|
6
|
+
|
|
7
|
+
- Core `SKILL.md`: measured from the canonical file during validation;
|
|
8
|
+
- Workspace Diagnosis `SKILL.md`: separate entry, loaded for first-use, explicit, drift, or conflict diagnosis;
|
|
9
|
+
- Workspace Health `SKILL.md`: installed as `available` and independently invoked or enabled;
|
|
10
|
+
- Core references load only for Task Envelope/Receipt or Profile conflict work;
|
|
11
|
+
- external GitHub Rulesets, Release Safety, and Thread Closure packs are absent from the main runtime payload and use separate, non-implicit Skill entrypoints.
|
|
12
|
+
|
|
13
|
+
The fixture `profile-input.available-pack.json` proves that an installed Workspace Health pack in `available` state does not enter `activePacks`. The inactive-pack Launch fixture proves a task cannot request that pack until it is enabled or required.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# External Capability Packs
|
|
2
|
+
|
|
3
|
+
ForgeRail's first main Plugin keeps remote and release mutation domains outside its runtime payload.
|
|
4
|
+
|
|
5
|
+
## Cross-Workspace Orchestration
|
|
6
|
+
|
|
7
|
+
The `forgerail-cross-workspace-orchestration` Plugin is for a master task coordinating at least two genuinely independent owner workspaces, repositories, or release identities with safe parallel dependency stages. It governs owner assignment, waves, single-writer identities, independent approvals, stable handoff review, and recovery. Do not install or invoke it merely because one repository has several folders, packages, or agents.
|
|
8
|
+
|
|
9
|
+
It is read/plan/recommend by default. Host task creation, inspection, wait, messaging, and resume are Host Adapter capabilities; hosts without verified task APIs degrade to user-created sessions, stable handoffs, or serial work. RelayPact may carry delegation and returns, and EchoPath may provide authorized recovery context, but neither is required or owns ForgeRail acceptance.
|
|
10
|
+
|
|
11
|
+
## GitHub Rulesets
|
|
12
|
+
|
|
13
|
+
The `forgerail-github-rulesets` Plugin diagnoses applicability, inspects current rules and required checks, prepares an exact approval package, and verifies a returned GitHub receipt. Installation does not change Rulesets, branch protection, repository settings, or default branches.
|
|
14
|
+
|
|
15
|
+
## Release Safety
|
|
16
|
+
|
|
17
|
+
The `forgerail-release-safety` Plugin activates only for release, rollback, registry, image, CI/CD, or shared-environment work. It requires the project's own runbook and does not invent generic production procedures or contain release commands.
|
|
18
|
+
|
|
19
|
+
## Thread Closure
|
|
20
|
+
|
|
21
|
+
The `forgerail-thread-closure` Plugin activates only after implementation, validation, and task evidence are ready for closeout. It verifies ownership, durable-record status, recovery entry, Profile candidates, and context debt without implementing follow-up work or writing durable changes without confirmation.
|
|
22
|
+
|
|
23
|
+
These packs retain separate authentication, release cadence, risk, and rollback boundaries while using the same ForgeRail Profile, Task Envelope, and Return Receipt contracts.
|
|
24
|
+
|
|
25
|
+
All four are separately installed and explicitly invoked. Being present in the Marketplace means available, not recommended, enabled, required, authenticated, or authorized.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Installation And Adoption
|
|
2
|
+
|
|
3
|
+
ForgeRail is primarily an Agent Plugin. The npm package is an optional deterministic CLI and compatibility payload.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
After `v0.1.0-alpha.1` is published, register the immutable Marketplace snapshot and install the main Plugin:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.1
|
|
11
|
+
codex plugin add forgerail@echopath-labs
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Start a new Codex task after installation so discovery uses the installed snapshot. The new task must discover:
|
|
15
|
+
|
|
16
|
+
- `$forgerail`;
|
|
17
|
+
- `$forgerail-workspace-diagnosis`;
|
|
18
|
+
- `$workspace-health-review`.
|
|
19
|
+
|
|
20
|
+
The versioned Marketplace registration is the Plugin release identity; do not replace the tag with a mutable branch when reproducibility matters. For local canonical testing, build a disposable bundle or npm tarball; do not point production workspaces at an uncommitted source tree.
|
|
21
|
+
|
|
22
|
+
## Optional Capability Pack Plugins
|
|
23
|
+
|
|
24
|
+
Install only the packs the project needs. Installation makes a pack available; it does not authenticate, activate, require, or approve its external effects.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
codex plugin add forgerail-github-rulesets@echopath-labs
|
|
28
|
+
codex plugin add forgerail-release-safety@echopath-labs
|
|
29
|
+
codex plugin add forgerail-thread-closure@echopath-labs
|
|
30
|
+
codex plugin add forgerail-cross-workspace-orchestration@echopath-labs
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The Rulesets and Release Safety packs remain read-first. Ruleset mutations, repository protection changes, publishing, deployment, and lifecycle changes require their own exact approvals.
|
|
34
|
+
|
|
35
|
+
Install Cross-Workspace Orchestration only when a master task must coordinate multiple genuine owner/repository/release boundaries and dependency evidence exposes safe parallel stages. It is not for an ordinary single repository or monorepo folder split. Installation leaves it `available`; invoke it explicitly, or adopt it through existing project instructions only after review. It does not create tasks or durable records, and remote integration, release, and lifecycle approvals remain independent.
|
|
36
|
+
|
|
37
|
+
Host task/thread APIs are not portable. Codex, Claude Code, Cursor, and other hosts must provide verified create/inspect/wait/message/resume capabilities through a Host Adapter; otherwise use user-created sessions, stable handoffs, or serial execution. RelayPact is an optional delegation transport and EchoPath is an optional recovery/context source, not runtime dependencies.
|
|
38
|
+
|
|
39
|
+
## Optional npm CLI
|
|
40
|
+
|
|
41
|
+
The npm package is not required by the Agent Plugin. The official package is organization-scoped as `@echopath-labs/forgerail`; the unscoped `forgerail` package remains a reservation and is not an install or rollback source. After registry publication, use an exact scoped prerelease when validating or diagnosing a workspace:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.1 validate
|
|
45
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.1 diagnose --workspace .
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For a persistent CLI shim:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm install --global @echopath-labs/forgerail@0.1.0-alpha.1
|
|
52
|
+
forgerail validate
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Adoption
|
|
56
|
+
|
|
57
|
+
Installation makes capabilities available. It does not edit a project's `AGENTS.md`, create `.forgerail/`, install OpenSpec, or make Workspace Health mandatory. Project adoption is a separate, explicit decision.
|
|
58
|
+
|
|
59
|
+
ForgeRail uses progressive adoption:
|
|
60
|
+
|
|
61
|
+
1. **Plugin Only** is the default and leaves the workspace unchanged.
|
|
62
|
+
2. **Lightweight Adoption** requires an exact read-only plan and user confirmation. One host gets a versioned managed block; multiple hosts may share `FORGERAIL.md` through thin bindings.
|
|
63
|
+
3. **Persisted Governance** is evidence-gated and deferred in alpha.1; the CLI will not generate `.forgerail/` state.
|
|
64
|
+
|
|
65
|
+
The optional CLI can prepare, but never apply, a candidate:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
forgerail adoption-plan --workspace . --host codex
|
|
69
|
+
forgerail adoption-plan --workspace . --host codex --host claude-code --host cursor
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Codex is the only `supported` Host Adapter in alpha.1. Claude Code and Cursor are published as `profile-only` boundaries so their target files and limitations are explicit without claiming verified activation. The host Agent must show the exact proposal, obtain confirmation, preserve unrelated content, write only the approved paths, then verify discovery in a new task or equivalent supported check and return a Host Binding Receipt.
|
|
73
|
+
|
|
74
|
+
See [Progressive Adoption](adoption.md) for the full model, support matrix, verification, and removal semantics.
|
|
75
|
+
|
|
76
|
+
## Upgrade And Reinstall
|
|
77
|
+
|
|
78
|
+
Register the new exact Marketplace tag, reinstall the selected Plugin names from `echopath-labs`, then start a new Codex task. Repeat Skill discovery and a bounded read-only diagnosis smoke. Upgrade only between exact `@echopath-labs/forgerail` versions. Reinstall must preserve project files and Profile sources.
|
|
79
|
+
|
|
80
|
+
## Rollback And Uninstall
|
|
81
|
+
|
|
82
|
+
Re-register the last validated Marketplace tag and reinstall the selected Plugin names, or return to the frozen AGW version. Remove ForgeRail Plugins with the Codex plugin command surface and remove the optional CLI with `npm uninstall --global @echopath-labs/forgerail`; do not delete project records, Agent instructions, or Git history. AGW remains the compatibility rollback until the migration gate is separately approved.
|
|
83
|
+
|
|
84
|
+
## Release Boundary
|
|
85
|
+
|
|
86
|
+
Publishing npm, moving `latest`, pushing a public candidate, tagging, creating a GitHub Release, or changing AGW lifecycle requires separate approval and exact release receipts.
|
|
87
|
+
|
|
88
|
+
See [ForgeRail 0.1.0-alpha.1 Release Runbook](release.md) for the project-owned gate order and rollback boundary.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 安装与采用
|
|
2
|
+
|
|
3
|
+
ForgeRail 的主要形态是 Agent Plugin;npm 包是可选的确定性 CLI 与兼容载荷。
|
|
4
|
+
|
|
5
|
+
在 `v0.1.0-alpha.1` 发布后,注册不可变的 Marketplace 快照并安装主插件:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.1
|
|
9
|
+
codex plugin add forgerail@echopath-labs
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
安装后启动一个新的 Codex 任务,使插件发现基于已安装快照。新任务必须发现 `$forgerail`、`$forgerail-workspace-diagnosis` 和 `$workspace-health-review`。需要可复现安装时,不要用可变分支替代精确 tag。
|
|
13
|
+
|
|
14
|
+
GitHub Rulesets、Release Safety 与 Thread Closure 是单独插件,只按项目需要安装:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
codex plugin add forgerail-github-rulesets@echopath-labs
|
|
18
|
+
codex plugin add forgerail-release-safety@echopath-labs
|
|
19
|
+
codex plugin add forgerail-thread-closure@echopath-labs
|
|
20
|
+
codex plugin add forgerail-cross-workspace-orchestration@echopath-labs
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
安装只让能力可用,不等于认证、启用、要求或批准外部副作用。Ruleset、仓库保护、发布、部署和生命周期变更仍需各自的精确审批。
|
|
24
|
+
|
|
25
|
+
只有当主控任务需要协调多个真正独立的 owner workspace、repository 或 release identity,且依赖证据表明存在安全并行阶段时,才安装 Cross-Workspace Orchestration。普通单仓任务或 monorepo 目录拆分不适用。安装后状态仍是 `available`;必须显式调用,或在审查后沿用项目已有 instructions 采用。它不会自动创建任务或 durable record,远端集成、发布和 lifecycle 审批仍相互独立。
|
|
26
|
+
|
|
27
|
+
不同宿主不共享同一套 task/thread API。Codex、Claude Code、Cursor 等必须由 Host Adapter 明确声明并验证 create/inspect/wait/message/resume 能力;缺失时降级为用户创建的独立会话、稳定 handoff 或串行执行。RelayPact 只是可选委派 transport,EchoPath 只是可选恢复/上下文来源,均非运行时硬依赖。
|
|
28
|
+
|
|
29
|
+
安装只代表能力可用,不会修改项目 `AGENTS.md`、创建 `.forgerail/`、安装 OpenSpec 或要求项目启用 Workspace Health。项目采用、能力启用和长期规约变更都需要单独确认。
|
|
30
|
+
|
|
31
|
+
ForgeRail 采用渐进式三级模型:
|
|
32
|
+
|
|
33
|
+
1. **Plugin Only** 是默认状态,工作区零修改;
|
|
34
|
+
2. **Lightweight Adoption** 必须先生成精确只读计划并经用户确认;单宿主使用带版本 managed block,多宿主可使用 `FORGERAIL.md` 加薄绑定;
|
|
35
|
+
3. **Persisted Governance** 只在真实证据支持时考虑,alpha.1 延期且 CLI 不会生成 `.forgerail/` 状态。
|
|
36
|
+
|
|
37
|
+
可选 CLI 只生成候选,不会应用:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
forgerail adoption-plan --workspace . --host codex
|
|
41
|
+
forgerail adoption-plan --workspace . --host codex --host claude-code --host cursor
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
alpha.1 只有 Codex Host Adapter 是 `supported`;Claude Code 与 Cursor 以 `profile-only` 发布,明确目标入口与限制,但不声称已验证激活。宿主 Agent 必须展示精确候选、取得确认、保护无关内容、只写获批路径,再在新任务或等价支持检查中验证发现并返回 Host Binding Receipt。
|
|
45
|
+
|
|
46
|
+
完整模型、支持矩阵、验证与移除语义见[渐进式采用](adoption.zh-CN.md)。
|
|
47
|
+
|
|
48
|
+
Agent Plugin 不依赖 npm CLI。官方包名为 `@echopath-labs/forgerail`;未作用域 `forgerail` 只保留名称占位,不是安装或回滚来源。registry 发布后,可用精确 scoped 版本执行离线校验和只读诊断:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.1 validate
|
|
52
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.1 diagnose --workspace .
|
|
53
|
+
npm install --global @echopath-labs/forgerail@0.1.0-alpha.1
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
升级时注册新的精确 Marketplace tag,重新安装已选择的插件,再启动新的 Codex 任务验证 Skill 发现与只读诊断;npm CLI 只能在精确 `@echopath-labs/forgerail` 版本之间升级。回滚时重新注册最近已验证 tag,或退回冻结的 AGW 版本;卸载可选 CLI 使用 `npm uninstall --global @echopath-labs/forgerail`,不得删除项目记录、Agent instructions 或 Git 历史。
|
|
57
|
+
|
|
58
|
+
npm 发布、移动 `latest`、推送公共候选、tag、GitHub Release 和 AGW 生命周期变更都属于独立审批门。
|
|
59
|
+
|
|
60
|
+
项目专属门序与回滚边界见 [ForgeRail 0.1.0-alpha.1 发布 Runbook](release.zh-CN.md)。
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Migration From Agent Workflow Governance
|
|
2
|
+
|
|
3
|
+
ForgeRail does not rename AGW in place.
|
|
4
|
+
|
|
5
|
+
1. Freeze the exact AGW/WHR source, installation, behavior, docs, and rollback baseline.
|
|
6
|
+
2. Map every in-scope behavior to ForgeRail Core, a Capability Pack, Profile, source reference, Task Envelope, or unresolved status.
|
|
7
|
+
3. Run representative tasks in shadow without changing activation.
|
|
8
|
+
4. Canary ForgeRail with one explicit core owner and immediate AGW rollback.
|
|
9
|
+
5. Publish versioned upgrade, coexistence, rollback, and uninstall guidance.
|
|
10
|
+
6. Decide AGW repository and entrypoint lifecycle only through a separate approval.
|
|
11
|
+
|
|
12
|
+
Current rollback baseline is the existing Agent Workflow Governance Plugin at its validated `0.2.0` candidate source. Exact public release identity must be reverified before a ForgeRail release approval package is issued.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Capability Pack Authoring
|
|
2
|
+
|
|
3
|
+
A pack must provide a manifest that validates against `contracts/capability-pack.schema.json` and declare purpose, triggers, inputs, dependencies, conflicts, risk, approvals, validation, and receipt extensions.
|
|
4
|
+
|
|
5
|
+
Use an independent Skill inside the main Plugin only when context cost, authentication, risk, and release cadence remain coupled to Core. Use a separately distributed Plugin for high-risk remote operations or independent authentication.
|
|
6
|
+
|
|
7
|
+
Never interpret installation as enablement. Recommendations remain candidates; durable `enabled` or `required` state needs project authority or user confirmation.
|
|
8
|
+
|
|
9
|
+
The optional CLI composes a separately distributed pack only when its exact manifest is supplied:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
forgerail resolve-profile \
|
|
13
|
+
--file profile-input.json \
|
|
14
|
+
--pack-manifest /path/to/pack.json
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The manifest is validated before composition. Missing dependencies, declared conflicts, duplicate capability owners, or enabled packs without a supplied manifest fail closed.
|