@echopath-labs/forgerail 0.1.0-alpha.2 → 0.1.0-alpha.3
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 +2 -3
- package/CHANGELOG.md +8 -1
- package/README.md +4 -4
- package/README.zh-CN.md +4 -4
- package/directory/README.md +1 -1
- package/directory/release-notes-alpha3.md +7 -0
- package/directory/submission-candidate.json +5 -6
- package/docs/installation.md +8 -7
- package/docs/installation.zh-CN.md +8 -8
- package/docs/release-alpha3.md +25 -0
- package/docs/release-alpha3.zh-CN.md +25 -0
- package/package.json +1 -1
- package/scripts/build-universal-directory-candidate.mjs +2 -2
- package/scripts/forgerail.mjs +1 -1
- package/scripts/shadow-comparison.mjs +1 -1
- package/scripts/validate-release.mjs +6 -6
- package/scripts/validate-universal-directory.mjs +17 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forgerail",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.3",
|
|
4
4
|
"description": "Engineering guidance and governance for coding agents, with workspace diagnosis and composable capability packs.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "EchoPath Labs",
|
|
@@ -33,8 +33,7 @@
|
|
|
33
33
|
"defaultPrompt": [
|
|
34
34
|
"Use ForgeRail to govern this engineering task.",
|
|
35
35
|
"Diagnose this workspace before recommending governance changes.",
|
|
36
|
-
"Review
|
|
37
|
-
"Trace duplicate capability ownership and identify the smallest remaining implementation boundary."
|
|
36
|
+
"Review workspace health or audit duplicated architecture ownership using the matching independent ForgeRail Skill."
|
|
38
37
|
],
|
|
39
38
|
"brandColor": "#B45309"
|
|
40
39
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -4,13 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
No shipping changes yet.
|
|
6
6
|
|
|
7
|
+
## 0.1.0-alpha.3 - 2026-08-31
|
|
8
|
+
|
|
9
|
+
- Keep the main Agent Plugin within Codex's maximum of three `defaultPrompt` entries while preserving discovery and direct invocation for all four ForgeRail Skills.
|
|
10
|
+
- Route the third starter prompt to either Workspace Health Review or the independently owned Architecture Convergence Audit without merging their ownership or activation boundaries.
|
|
11
|
+
- Add deterministic prompt-cardinality validation and a fresh disposable-host compatibility check; classify unrelated `openai-primary-runtime/template-creator` icon warnings as external observations rather than ForgeRail failures.
|
|
12
|
+
- Preserve the Skills-only, no-project-Node, no-implicit-`.forgerail/`, Apache-2.0, optional scoped npm CLI, and unscoped reservation boundaries from alpha.2.
|
|
13
|
+
|
|
7
14
|
## 0.1.0-alpha.2 - 2026-08-30
|
|
8
15
|
|
|
9
16
|
- Add the built-in, independently invoked `architecture-convergence-audit` Pack with Analyze First, read-only behavior, evidence-backed ownership maps, retention burden, deletion-first slices, and no external-write or persisted-state authority.
|
|
10
17
|
- Add private capability-harvest shadows plus sanitized Diagnosis and Health separation fixtures without changing existing Core nouns or creating a second Health Pack.
|
|
11
18
|
- Prepare a Skills-only Universal Plugins Directory candidate with root-confined visual assets, five positive and three negative evaluations, deterministic validation, and no project Node.js or `.forgerail/` requirement.
|
|
12
19
|
- Add ForgeRail-specific Privacy and Terms documents, GitHub Issues support, a confirmed Productivity category, and an all-platform-supported-regions intent while keeping publisher, permission, portal-format, submission, and publication gates explicit.
|
|
13
|
-
- Preserve exact-tag Marketplace installation as the
|
|
20
|
+
- Preserve exact-tag Marketplace installation as the available route and keep the scoped npm CLI optional; alpha.2 subsequently completed its separately approved remote integration and prerelease publication.
|
|
14
21
|
|
|
15
22
|
## 0.1.0-alpha.1 - 2026-08-13
|
|
16
23
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeRail is an engineering guidance and governance framework for Coding Agents.
|
|
4
4
|
|
|
5
|
-
This canonical source is preparing `0.1.0-alpha.
|
|
5
|
+
This canonical source is preparing the local `0.1.0-alpha.3` / `v0.1.0-alpha.3` forward-fix candidate. It is not yet remotely integrated, released, or listed in the Universal Plugins Directory; the currently installable public version remains alpha.2.
|
|
6
6
|
|
|
7
7
|
It observes a workspace, recommends improvements only when evidence warrants them, composes applicable rules, launches the host Agent with explicit scope and approval boundaries, and verifies observable results. It does not replace the Agent or force a new specification system onto the project.
|
|
8
8
|
|
|
@@ -53,7 +53,7 @@ node scripts/forgerail.mjs adoption-plan --workspace scripts/fixtures/workspaces
|
|
|
53
53
|
The optional official npm package is `@echopath-labs/forgerail`; it exposes the same deterministic CLI through the short `forgerail` binary shim. The unscoped `forgerail` package remains a reservation and is not the product install path.
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
npm install --global @echopath-labs/forgerail@0.1.0-alpha.
|
|
56
|
+
npm install --global @echopath-labs/forgerail@0.1.0-alpha.2
|
|
57
57
|
forgerail validate
|
|
58
58
|
forgerail diagnose --workspace .
|
|
59
59
|
forgerail adoption-plan --workspace . --host codex
|
|
@@ -64,7 +64,7 @@ forgerail adoption-plan --workspace . --host codex
|
|
|
64
64
|
The intended future default is the Universal Plugins Directory UI, but ForgeRail is not listed there yet. Until a separate submission, review, and publication complete, install the released exact ForgeRail Marketplace snapshot:
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.
|
|
67
|
+
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.2
|
|
68
68
|
codex plugin add forgerail@echopath-labs
|
|
69
69
|
```
|
|
70
70
|
|
|
@@ -74,4 +74,4 @@ The Agent Plugin does not require Node.js or `package.json` in the target projec
|
|
|
74
74
|
|
|
75
75
|
## Status
|
|
76
76
|
|
|
77
|
-
The immutable public alpha.
|
|
77
|
+
The immutable public alpha.2 remains the current install source. Alpha.3 is a local source-first forward fix that limits the main Plugin to three starter prompts while keeping all four Skills independently discoverable and invokable. Its proposed version and tag do not authorize public projection application, remote integration, release, or Directory submission/publication.
|
package/README.zh-CN.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeRail 是面向 Coding Agent 的工程引航与治理框架。
|
|
4
4
|
|
|
5
|
-
当前 canonical source
|
|
5
|
+
当前 canonical source 正在准备本地 `0.1.0-alpha.3` / `v0.1.0-alpha.3` forward-fix 候选。该候选尚未完成远端集成、发布或 Universal Plugins Directory 上线;当前可安装的公开版本仍是 alpha.2。
|
|
6
6
|
|
|
7
7
|
它观察工作区,在证据表明存在缺口时提出建议,组装适用规约,以明确的范围和审批边界发起宿主 Agent 工作,并核验可观察结果。它不替代 Agent,也不强迫项目采用新的规格系统。
|
|
8
8
|
|
|
@@ -30,7 +30,7 @@ Control System 迁移现已加入版本化 Workspace/Profile、Task Control、Re
|
|
|
30
30
|
可选官方 npm 包为 `@echopath-labs/forgerail`,安装后仍提供简短的 `forgerail` 命令入口,用于离线校验、只读诊断和合同闭环;Agent Plugin 本身不依赖该 CLI 才能使用。未作用域 `forgerail` 只保留名称占位,不是正式安装入口。
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npm install --global @echopath-labs/forgerail@0.1.0-alpha.
|
|
33
|
+
npm install --global @echopath-labs/forgerail@0.1.0-alpha.2
|
|
34
34
|
forgerail validate
|
|
35
35
|
```
|
|
36
36
|
|
|
@@ -39,7 +39,7 @@ forgerail validate
|
|
|
39
39
|
未来面向人的默认入口是 Universal Plugins Directory 界面,但 ForgeRail 当前尚未在该目录上线。在独立提交、审查与发布完成前,请安装已经发布的精确 ForgeRail Marketplace 快照:
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.
|
|
42
|
+
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.2
|
|
43
43
|
codex plugin add forgerail@echopath-labs
|
|
44
44
|
```
|
|
45
45
|
|
|
@@ -47,4 +47,4 @@ codex plugin add forgerail@echopath-labs
|
|
|
47
47
|
|
|
48
48
|
Agent Plugin 不要求目标项目安装 Node.js 或存在 `package.json`;npm/npx 始终只是可选维护与验证工具。
|
|
49
49
|
|
|
50
|
-
不可变 public alpha.
|
|
50
|
+
不可变 public alpha.2 仍是当前安装来源。Alpha.3 是本地 source-first forward fix:主 Plugin 收敛为三条 starter prompts,同时四个 Skills 继续独立发现与调用。拟议版本/tag 不授权应用公开投影、远端集成、发布或 Directory submit/publish。
|
package/directory/README.md
CHANGED
|
@@ -9,7 +9,7 @@ The candidate follows the OpenAI submission guidance observed on 2026-08-30:
|
|
|
9
9
|
- <https://developers.openai.com/plugins/build/plugins>
|
|
10
10
|
- <https://developers.openai.com/plugins/deploy/submission>
|
|
11
11
|
|
|
12
|
-
The alpha.
|
|
12
|
+
The alpha.3 forward-fix candidate records the user-confirmed `Productivity` category, GitHub Issues support, repository Privacy and Terms URLs, and an intent to make ForgeRail available in all platform-supported regions. It also keeps the main Plugin within Codex's maximum of three starter prompts while preserving four independently owned Skills. The live portal's exact region enumeration remains `pending_confirmation`; no country list is invented locally.
|
|
13
13
|
|
|
14
14
|
Before any Platform draft or submission, a human must still verify the publisher identity, Apps Management Write permission, live portal region encoding, accepted asset format, and exact final public source. `submission-candidate.json` records every unresolved item; `evaluations.json` contains the local positive and negative evaluation cases. Remote Git integration cannot grant Directory submission or publication authority.
|
|
15
15
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# ForgeRail 0.1.0-alpha.3 release notes candidate
|
|
2
|
+
|
|
3
|
+
ForgeRail alpha.3 is a narrow host-compatibility forward fix. The main Agent Plugin now exposes three reviewed starter prompts, which stays within the Codex host limit, while all four Skills remain independently discoverable and directly invokable.
|
|
4
|
+
|
|
5
|
+
The third prompt is an either-or router: it directs a workspace-health request to `$workspace-health-review` or a duplicated-architecture-ownership request to `$architecture-convergence-audit`. It does not merge those Skills, make either depend on the other, or activate both implicitly.
|
|
6
|
+
|
|
7
|
+
The candidate retains the alpha.2 Skills-only Directory shape, public Privacy and Terms, GitHub Issues support, Productivity category, all-platform-supported-regions intent, optional scoped npm CLI, no project Node.js requirement, and no implicit `.forgerail/` state. Directory submission, release, and lifecycle approvals remain separate and are not granted by this candidate.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": "1.0",
|
|
3
3
|
"candidateType": "openai-universal-plugin-directory",
|
|
4
4
|
"submissionType": "skills_only",
|
|
5
|
-
"status": "
|
|
5
|
+
"status": "local_alpha3_forward_fix_candidate",
|
|
6
6
|
"approval": { "type": "submission_approval", "status": "not_granted" },
|
|
7
7
|
"officialBaseline": {
|
|
8
8
|
"observedAt": "2026-08-30",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"plugin": {
|
|
15
15
|
"id": "forgerail",
|
|
16
|
-
"version": "0.1.0-alpha.
|
|
16
|
+
"version": "0.1.0-alpha.3",
|
|
17
17
|
"manifest": ".codex-plugin/plugin.json",
|
|
18
18
|
"skills": [
|
|
19
19
|
"forgerail",
|
|
@@ -43,8 +43,7 @@
|
|
|
43
43
|
"starterPrompts": [
|
|
44
44
|
"Use ForgeRail to govern this engineering task.",
|
|
45
45
|
"Diagnose this workspace before recommending governance changes.",
|
|
46
|
-
"Review
|
|
47
|
-
"Audit this architecture for duplicated capability ownership."
|
|
46
|
+
"Review workspace health or audit duplicated architecture ownership using the matching independent ForgeRail Skill."
|
|
48
47
|
]
|
|
49
48
|
},
|
|
50
49
|
"availability": {
|
|
@@ -58,8 +57,8 @@
|
|
|
58
57
|
},
|
|
59
58
|
"releaseNotes": {
|
|
60
59
|
"state": "candidate",
|
|
61
|
-
"path": "./directory/release-notes-
|
|
62
|
-
"value": "ForgeRail alpha.
|
|
60
|
+
"path": "./directory/release-notes-alpha3.md",
|
|
61
|
+
"value": "ForgeRail alpha.3 keeps all four independent Skills discoverable while reducing the main Plugin to three reviewed starter prompts, matching the Codex host limit without changing Skill ownership, invocation, or project mutation boundaries."
|
|
63
62
|
},
|
|
64
63
|
"evaluationFile": "./directory/evaluations.json",
|
|
65
64
|
"unresolvedGates": [
|
package/docs/installation.md
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeRail is primarily an Agent Plugin. The npm package is an optional deterministic CLI and compatibility payload.
|
|
4
4
|
|
|
5
|
-
The canonical source currently proposes `@echopath-labs/forgerail@0.1.0-alpha.
|
|
5
|
+
The canonical source currently proposes the local `@echopath-labs/forgerail@0.1.0-alpha.3` / `v0.1.0-alpha.3` forward fix, but that candidate is not yet remotely integrated or released. Do not construct an installation command from a local version proposal. The commands below remain bound to the currently released alpha.2.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
The intended default human route is the Universal Plugins Directory in ChatGPT or Codex. ForgeRail is **not currently available there**: the local Skills-only candidate still needs separately approved submission, OpenAI review, and developer publication. When a verified ForgeRail listing becomes available, use that interface and confirm the publisher and requested capabilities before installation.
|
|
10
10
|
|
|
11
|
-
The current available Agent Plugin route is the immutable `v0.1.0-alpha.
|
|
11
|
+
The current available Agent Plugin route is the immutable `v0.1.0-alpha.2` EchoPath Labs Marketplace snapshot:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.
|
|
14
|
+
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.2
|
|
15
15
|
codex plugin add forgerail@echopath-labs
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -20,6 +20,7 @@ Start a new Codex task after installation so discovery uses the installed snapsh
|
|
|
20
20
|
- `$forgerail`;
|
|
21
21
|
- `$forgerail-workspace-diagnosis`;
|
|
22
22
|
- `$workspace-health-review`.
|
|
23
|
+
- `$architecture-convergence-audit`.
|
|
23
24
|
|
|
24
25
|
This Agent Plugin route does not require the target project to have Node.js, `package.json`, `node_modules`, or the optional npm CLI.
|
|
25
26
|
|
|
@@ -47,14 +48,14 @@ Host task/thread APIs are not portable. Codex, Claude Code, Cursor, and other ho
|
|
|
47
48
|
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:
|
|
48
49
|
|
|
49
50
|
```bash
|
|
50
|
-
npx --yes @echopath-labs/forgerail@0.1.0-alpha.
|
|
51
|
-
npx --yes @echopath-labs/forgerail@0.1.0-alpha.
|
|
51
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.2 validate
|
|
52
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.2 diagnose --workspace .
|
|
52
53
|
```
|
|
53
54
|
|
|
54
55
|
For a persistent CLI shim:
|
|
55
56
|
|
|
56
57
|
```bash
|
|
57
|
-
npm install --global @echopath-labs/forgerail@0.1.0-alpha.
|
|
58
|
+
npm install --global @echopath-labs/forgerail@0.1.0-alpha.2
|
|
58
59
|
forgerail validate
|
|
59
60
|
```
|
|
60
61
|
|
|
@@ -91,4 +92,4 @@ Re-register the last validated Marketplace tag and reinstall the selected Plugin
|
|
|
91
92
|
|
|
92
93
|
Creating or submitting a Universal Plugins Directory draft, publishing a reviewed listing, publishing npm, moving `latest`, pushing a public candidate, tagging, creating a GitHub Release, or changing AGW lifecycle requires its own exact approval and receipt.
|
|
93
94
|
|
|
94
|
-
See the historical [ForgeRail 0.1.0-alpha.1 Release Runbook](release.md)
|
|
95
|
+
See the historical [ForgeRail 0.1.0-alpha.1 Release Runbook](release.md), the [ForgeRail 0.1.0-alpha.2 Candidate Runbook](release-alpha2.md), and the proposed [ForgeRail 0.1.0-alpha.3 Forward-Fix Runbook](release-alpha3.md). None grants execution authority.
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeRail 的主要形态是 Agent Plugin;npm 包是可选的确定性 CLI 与兼容载荷。
|
|
4
4
|
|
|
5
|
-
canonical source
|
|
5
|
+
canonical source 当前拟议本地 `@echopath-labs/forgerail@0.1.0-alpha.3` / `v0.1.0-alpha.3` forward fix,但该候选尚未远端集成或发布。不要根据本地版本提案自行拼装安装命令。以下命令继续绑定当前已发布 alpha.2。
|
|
6
6
|
|
|
7
7
|
面向人的目标默认入口是 ChatGPT 或 Codex 中的 Universal Plugins Directory。ForgeRail **当前尚未在该目录上线**:本地 Skills-only 候选仍需独立提交审批、OpenAI 审查和开发者发布。以后只有在核对真实 ForgeRail listing、publisher 和能力请求后,才应从界面安装。
|
|
8
8
|
|
|
9
|
-
当前可用的 Agent Plugin 路径是不可变的 EchoPath Labs Marketplace `v0.1.0-alpha.
|
|
9
|
+
当前可用的 Agent Plugin 路径是不可变的 EchoPath Labs Marketplace `v0.1.0-alpha.2` 快照:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.
|
|
12
|
+
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.2
|
|
13
13
|
codex plugin add forgerail@echopath-labs
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
安装后启动一个新的 Codex 任务,使插件发现基于已安装快照。新任务必须发现 `$forgerail`、`$forgerail-workspace-diagnosis` 和 `$
|
|
16
|
+
安装后启动一个新的 Codex 任务,使插件发现基于已安装快照。新任务必须发现 `$forgerail`、`$forgerail-workspace-diagnosis`、`$workspace-health-review` 和 `$architecture-convergence-audit`。需要可复现安装时,不要用可变分支替代精确 tag。
|
|
17
17
|
|
|
18
18
|
通过该 Agent Plugin 路径使用 ForgeRail,不要求目标项目安装 Node.js,也不要求存在 `package.json`、`node_modules` 或可选 npm CLI。
|
|
19
19
|
|
|
@@ -54,13 +54,13 @@ alpha.1 只有 Codex Host Adapter 是 `supported`;Claude Code 与 Cursor 以 `
|
|
|
54
54
|
Agent Plugin 不依赖 npm CLI。官方包名为 `@echopath-labs/forgerail`;未作用域 `forgerail` 只保留名称占位,不是安装或回滚来源。registry 发布后,可用精确 scoped 版本执行离线校验和只读诊断:
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
npx --yes @echopath-labs/forgerail@0.1.0-alpha.
|
|
58
|
-
npx --yes @echopath-labs/forgerail@0.1.0-alpha.
|
|
59
|
-
npm install --global @echopath-labs/forgerail@0.1.0-alpha.
|
|
57
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.2 validate
|
|
58
|
+
npx --yes @echopath-labs/forgerail@0.1.0-alpha.2 diagnose --workspace .
|
|
59
|
+
npm install --global @echopath-labs/forgerail@0.1.0-alpha.2
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
升级时注册新的精确 Marketplace tag,重新安装已选择的插件,再启动新的 Codex 任务验证 Skill 发现与只读诊断;npm CLI 只能在精确 `@echopath-labs/forgerail` 版本之间升级。回滚时重新注册最近已验证 tag,或退回冻结的 AGW 版本;卸载可选 CLI 使用 `npm uninstall --global @echopath-labs/forgerail`,不得删除项目记录、Agent instructions 或 Git 历史。
|
|
63
63
|
|
|
64
64
|
创建或提交 Universal Plugins Directory draft、发布已审查 listing、npm 发布、移动 `latest`、推送公共候选、tag、GitHub Release 和 AGW 生命周期变更都属于各自独立的精确审批门。
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
历史门序见 [ForgeRail 0.1.0-alpha.1 发布 Runbook](release.zh-CN.md)与 [ForgeRail 0.1.0-alpha.2 候选 Runbook](release-alpha2.zh-CN.md),拟议 forward-fix 门序见 [ForgeRail 0.1.0-alpha.3 Runbook](release-alpha3.zh-CN.md)。这些文档都不授予执行权限。
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# ForgeRail 0.1.0-alpha.3 Forward-Fix Runbook
|
|
2
|
+
|
|
3
|
+
This source-first runbook governs the proposed `@echopath-labs/forgerail@0.1.0-alpha.3`, tag `v0.1.0-alpha.3`, and matching Agent Plugin projection. It does not grant `remote_integration_approval`, `release_approval`, `submission_approval`, `rollback_approval`, or `lifecycle_change_approval`. The unscoped `forgerail@0.0.0-reserved.0` remains a reservation and must never receive product code or serve as an install or rollback source.
|
|
4
|
+
|
|
5
|
+
## Candidate integration
|
|
6
|
+
|
|
7
|
+
The public candidate is an ordinary child of the observed remote `main`. That observed base is exactly `dba155d7f7092a3f852bf2c0244a35bd153fcedb`. A future exact `remote_integration_approval` may push only the signed commit to `codex/forgerail-alpha3-scoped`, create one Draft PR, and observe Node.js 22 and 24 Plugin Contracts CI. The Draft PR base and publication comparison baseline remain bound to the observed remote `main`.
|
|
8
|
+
|
|
9
|
+
Any correction is an ordinary source-first successor commit. Do not force push, rewrite the candidate, transition the PR to Ready, merge, tag, publish, or create a release under remote-integration authority. Install and discover each external Capability Pack separately; availability never implies authentication, enablement, or mutation authority.
|
|
10
|
+
|
|
11
|
+
## Compatibility proof
|
|
12
|
+
|
|
13
|
+
The main Plugin must expose no more than three `defaultPrompt` entries while all four Skills remain independently discoverable and directly invokable. The third prompt is an either-or router between Workspace Health Review and Architecture Convergence Audit; it does not merge their ownership or activate both. Validate the exact projection in a fresh disposable Codex host and fail only on a ForgeRail-owned prompt-overflow warning. Icon path warnings owned by `openai-primary-runtime/template-creator` are external observations and must not be repaired by copying or editing that Plugin.
|
|
14
|
+
|
|
15
|
+
## Separate release gate
|
|
16
|
+
|
|
17
|
+
Only a later exact `release_approval` can authorize Ready/merge, scoped npm publication, dist-tags, annotated tag, GitHub prerelease, and disposable consumer verification. The merged public `main` tree must equal the final signed projection tree before release validation begins.
|
|
18
|
+
|
|
19
|
+
Run Node.js 22 and 24 checks for Core, contracts, external Packs, frozen AGW behavior coverage, release source, Directory readiness, disposable consumer lifecycle, pack metadata, and audit. Verify GitHub API/SSH/npm identity as `chasechou007` without exposing credentials. Preserve Apache-2.0, the unscoped reservation, and the immutable alpha.1 and alpha.2 package/tag history.
|
|
20
|
+
|
|
21
|
+
Do not unpublish or move an immutable version or Git tag. A shipped defect requires a forward version. Installation and diagnosis must leave project files unchanged unless the user separately approves an exact managed binding; return a Host Binding Receipt and confirm no implicit `.forgerail/` state.
|
|
22
|
+
|
|
23
|
+
## Independent Directory and lifecycle gates
|
|
24
|
+
|
|
25
|
+
Universal Plugins Directory draft, submission, review publication, verified publisher identity, Apps Management Write, portal regions and assets remain under a separate `submission_approval` or publication gate. AGW deprecation, redirect, archive, or deletion requires `lifecycle_change_approval`. No approval is transitive.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# ForgeRail 0.1.0-alpha.3 Forward-Fix Runbook
|
|
2
|
+
|
|
3
|
+
本 source-first runbook 约束拟议的 `@echopath-labs/forgerail@0.1.0-alpha.3`、tag `v0.1.0-alpha.3` 与对应 Agent Plugin 投影。文档本身不授予 `remote_integration_approval`、`release_approval`、`submission_approval`、`rollback_approval` 或 `lifecycle_change_approval`。未作用域 `forgerail@0.0.0-reserved.0` 继续只作占位,不得接收产品代码,也不是安装或回滚来源。
|
|
4
|
+
|
|
5
|
+
## 候选集成
|
|
6
|
+
|
|
7
|
+
公共候选是已观测远端 `main` 的普通子 commit。该基线精确为 `dba155d7f7092a3f852bf2c0244a35bd153fcedb`。未来精确 `remote_integration_approval` 只能把签名 commit 推到 `codex/forgerail-alpha3-scoped`,创建一个 Draft PR,并观察 Node.js 22 and 24 Plugin Contracts CI。Draft PR base 与 publication comparison baseline 继续绑定已观测远端 `main`。
|
|
8
|
+
|
|
9
|
+
任何修正都必须形成普通的 source-first successor commit。remote integration 权限不允许 force push、历史重写、转 Ready、merge、tag、publish 或创建 Release。每个外部 Capability Pack 分别安装与发现;可用不等于认证、启用或获得 mutation authority。
|
|
10
|
+
|
|
11
|
+
## 兼容性证明
|
|
12
|
+
|
|
13
|
+
主 Plugin 的 `defaultPrompt` 不得超过三条,同时四个 Skills 必须继续独立发现与直接调用。第三条只是 Workspace Health Review 与 Architecture Convergence Audit 的二选一路由,不合并 owner,也不同时激活两者。必须在 fresh disposable Codex host 验证精确投影,只有 ForgeRail 自有 prompt overflow warning 才判失败。归属 `openai-primary-runtime/template-creator` 的 icon 路径告警是 external observation,不得通过复制或修改该外部 Plugin 修复。
|
|
14
|
+
|
|
15
|
+
## 独立发布门
|
|
16
|
+
|
|
17
|
+
只有后续精确 `release_approval` 才能授权 Ready/merge、scoped npm 发布、dist-tag、annotated tag、GitHub prerelease 与一次性消费者验证。发布验证开始前,合并后的公共 `main` tree 必须等于最终签名 projection tree。
|
|
18
|
+
|
|
19
|
+
在 Node.js 22 和 24 上运行 Core、contracts、external Packs、冻结 AGW 行为覆盖、release source、Directory readiness、一次性 consumer、pack metadata 与 audit。不得暴露凭据地确认 GitHub API/SSH/npm 身份为 `chasechou007`。保持 Apache-2.0、未作用域占位,以及不可变 alpha.1/alpha.2 package/tag 历史。
|
|
20
|
+
|
|
21
|
+
Do not unpublish 或移动不可变 version/tag。已发布缺陷使用前向版本修复。安装和诊断默认不修改项目;只有用户另行批准精确 managed binding 后才写入,并返回 Host Binding Receipt,确认没有隐式 `.forgerail/` 状态。
|
|
22
|
+
|
|
23
|
+
## 独立 Directory 与生命周期门
|
|
24
|
+
|
|
25
|
+
Universal Plugins Directory draft、submit、review publication、verified publisher identity、Apps Management Write、portal regions/assets 继续属于独立 `submission_approval` 或 publication gate。AGW deprecation、redirect、archive 或 deletion 需要 `lifecycle_change_approval`。任何审批都不传递。
|
package/package.json
CHANGED
|
@@ -54,8 +54,8 @@ const result = {
|
|
|
54
54
|
approvalStatus: candidate.approval.status,
|
|
55
55
|
product: manifest.name,
|
|
56
56
|
pluginVersion: manifest.version,
|
|
57
|
-
privateBaseline: "
|
|
58
|
-
sourceDate: "2026-08-
|
|
57
|
+
privateBaseline: "ebf1851300b549c97cd909cbe7354c32661f5063",
|
|
58
|
+
sourceDate: "2026-08-31",
|
|
59
59
|
inventory,
|
|
60
60
|
contentDigest: sha256(JSON.stringify(inventory)),
|
|
61
61
|
unresolvedGates: candidate.unresolvedGates,
|
package/scripts/forgerail.mjs
CHANGED
|
@@ -229,7 +229,7 @@ function validatePlugin() {
|
|
|
229
229
|
const manifestPath = resolve(root, ".codex-plugin/plugin.json");
|
|
230
230
|
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
231
231
|
if (manifest.name !== "forgerail") errors.push("Plugin name must be forgerail");
|
|
232
|
-
if (manifest.version !== "0.1.0-alpha.
|
|
232
|
+
if (manifest.version !== "0.1.0-alpha.3") errors.push("Plugin version must be 0.1.0-alpha.3");
|
|
233
233
|
if (manifest.license !== "Apache-2.0") errors.push("Plugin license must be Apache-2.0");
|
|
234
234
|
const expectedSkills = ["architecture-convergence-audit", "forgerail", "forgerail-workspace-diagnosis", "workspace-health-review"];
|
|
235
235
|
const actualSkills = readdirSync(resolve(root, "skills"), { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort();
|
|
@@ -87,7 +87,7 @@ for (const scenario of scenarios) {
|
|
|
87
87
|
const result = {
|
|
88
88
|
schemaVersion: "1.0",
|
|
89
89
|
agwBaseline: "plugins/agent-workflow-governance@0.2.0-canonical",
|
|
90
|
-
forgeRailCandidate: "plugins/forgerail@0.1.0-alpha.
|
|
90
|
+
forgeRailCandidate: "plugins/forgerail@0.1.0-alpha.3-canonical",
|
|
91
91
|
scenarios,
|
|
92
92
|
covered: scenarios.filter((item) => item.passed).length,
|
|
93
93
|
unresolved: scenarios.filter((item) => !item.passed).map((item) => item.id),
|
|
@@ -6,9 +6,9 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
|
|
7
7
|
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
8
8
|
const expectedPackageName = "@echopath-labs/forgerail";
|
|
9
|
-
const expectedVersion = "0.1.0-alpha.
|
|
9
|
+
const expectedVersion = "0.1.0-alpha.3";
|
|
10
10
|
const expectedTag = `v${expectedVersion}`;
|
|
11
|
-
const expectedDate = "2026-08-
|
|
11
|
+
const expectedDate = "2026-08-31";
|
|
12
12
|
const expectedPlugins = [
|
|
13
13
|
"forgerail",
|
|
14
14
|
"forgerail-cross-workspace-orchestration",
|
|
@@ -101,7 +101,7 @@ for (const name of expectedPlugins) {
|
|
|
101
101
|
|
|
102
102
|
const installation = `${read("docs/installation.md")}\n${read("docs/installation.zh-CN.md")}`;
|
|
103
103
|
for (const phrase of [
|
|
104
|
-
"codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.
|
|
104
|
+
"codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.2",
|
|
105
105
|
"codex plugin add forgerail@echopath-labs",
|
|
106
106
|
"codex plugin add forgerail-cross-workspace-orchestration@echopath-labs",
|
|
107
107
|
"codex plugin add forgerail-github-rulesets@echopath-labs",
|
|
@@ -136,8 +136,8 @@ record("package-adapters", packageJson.files?.includes("adapters/"), packageJson
|
|
|
136
136
|
record("package-templates", packageJson.files?.includes("templates/"), packageJson.files ?? null);
|
|
137
137
|
record("no-apply-adoption-script", !read("scripts/forgerail.mjs").includes('command === "apply-adoption"'), "no apply-adoption command");
|
|
138
138
|
|
|
139
|
-
const releaseEnglish = read("docs/release-
|
|
140
|
-
const releaseChinese = read("docs/release-
|
|
139
|
+
const releaseEnglish = read("docs/release-alpha3.md");
|
|
140
|
+
const releaseChinese = read("docs/release-alpha3.zh-CN.md");
|
|
141
141
|
const releaseDocs = `${releaseEnglish}\n${releaseChinese}`;
|
|
142
142
|
for (const phrase of [
|
|
143
143
|
"remote_integration_approval",
|
|
@@ -146,7 +146,7 @@ for (const phrase of [
|
|
|
146
146
|
expectedVersion,
|
|
147
147
|
expectedTag,
|
|
148
148
|
"Node.js 22 and 24",
|
|
149
|
-
"codex/forgerail-
|
|
149
|
+
"codex/forgerail-alpha3-scoped",
|
|
150
150
|
"Do not unpublish",
|
|
151
151
|
"AGW",
|
|
152
152
|
"Host Binding Receipt",
|
|
@@ -64,11 +64,11 @@ function validateMarkdownLinks(relativePath) {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
assert(candidate.submissionType === "skills_only", "candidate is Skills-only");
|
|
67
|
-
assert(candidate.status === "
|
|
67
|
+
assert(candidate.status === "local_alpha3_forward_fix_candidate", "candidate status is local alpha.3 forward-fix preparation");
|
|
68
68
|
assert(candidate.approval.status === "not_granted", "submission approval is not granted");
|
|
69
69
|
assert(candidate.plugin.id === manifest.name, "candidate and manifest Plugin identity match");
|
|
70
70
|
assert(candidate.plugin.version === manifest.version, "candidate and manifest version match");
|
|
71
|
-
assert(candidate.plugin.version === "0.1.0-alpha.
|
|
71
|
+
assert(candidate.plugin.version === "0.1.0-alpha.3", "candidate version is alpha.3");
|
|
72
72
|
assert(packageJson.version === candidate.plugin.version, "optional scoped package version matches candidate");
|
|
73
73
|
assert(candidate.plugin.mcpServers.length === 0, "candidate has no MCP server requirement");
|
|
74
74
|
assert(candidate.plugin.authentication === "none", "candidate has no authentication requirement");
|
|
@@ -76,6 +76,18 @@ assert(candidate.plugin.coreRequirements.projectPackageJson === false, "Core req
|
|
|
76
76
|
assert(candidate.plugin.coreRequirements.projectNodeModules === false, "Core requires no project node_modules");
|
|
77
77
|
assert(candidate.plugin.coreRequirements.npmCli === "optional", "npm CLI is optional");
|
|
78
78
|
|
|
79
|
+
const expectedDefaultPrompts = [
|
|
80
|
+
"Use ForgeRail to govern this engineering task.",
|
|
81
|
+
"Diagnose this workspace before recommending governance changes.",
|
|
82
|
+
"Review workspace health or audit duplicated architecture ownership using the matching independent ForgeRail Skill.",
|
|
83
|
+
];
|
|
84
|
+
assert(Array.isArray(manifest.interface.defaultPrompt), "defaultPrompt is an array");
|
|
85
|
+
assert(manifest.interface.defaultPrompt.length <= 3, "defaultPrompt stays within the Codex maximum of three");
|
|
86
|
+
assert(manifest.interface.defaultPrompt.length === expectedDefaultPrompts.length, "defaultPrompt exposes the three reviewed intents");
|
|
87
|
+
assert(new Set(manifest.interface.defaultPrompt).size === manifest.interface.defaultPrompt.length, "defaultPrompt entries are unique");
|
|
88
|
+
assert(manifest.interface.defaultPrompt.every((prompt) => typeof prompt === "string" && prompt.trim().length > 0), "defaultPrompt entries are non-empty strings");
|
|
89
|
+
assert(JSON.stringify(manifest.interface.defaultPrompt) === JSON.stringify(expectedDefaultPrompts), "defaultPrompt entries match the reviewed governance, diagnosis, and either-or review router");
|
|
90
|
+
|
|
79
91
|
for (const skill of candidate.plugin.skills) {
|
|
80
92
|
assert(existsSync(resolve(pluginRoot, "skills", skill, "SKILL.md")), `declared Skill exists: ${skill}`);
|
|
81
93
|
}
|
|
@@ -96,8 +108,8 @@ for (const field of ["websiteUrl", "supportUrl", "privacyPolicyUrl", "termsOfSer
|
|
|
96
108
|
}
|
|
97
109
|
assert(candidate.availability.intent.state === "confirmed_by_user" && candidate.availability.intent.value === "all_platform_supported_regions", "all-platform-supported-regions intent is user-confirmed");
|
|
98
110
|
assert(candidate.availability.portalEnumeration.state === "pending_confirmation" && candidate.availability.portalEnumeration.values.length === 0, "portal region enumeration remains pending without an invented country list");
|
|
99
|
-
assert(candidate.releaseNotes.state === "candidate" && candidate.releaseNotes.path === "./directory/release-notes-
|
|
100
|
-
assert(existsSync(resolve(pluginRoot, candidate.releaseNotes.path)), "alpha.
|
|
111
|
+
assert(candidate.releaseNotes.state === "candidate" && candidate.releaseNotes.path === "./directory/release-notes-alpha3.md", "alpha.3 release notes path is explicit");
|
|
112
|
+
assert(existsSync(resolve(pluginRoot, candidate.releaseNotes.path)), "alpha.3 release notes file exists");
|
|
101
113
|
|
|
102
114
|
const privacy = readFileSync(resolve(pluginRoot, "PRIVACY.md"), "utf8");
|
|
103
115
|
const terms = readFileSync(resolve(pluginRoot, "TERMS.md"), "utf8");
|
|
@@ -107,7 +119,7 @@ for (const phrase of ["Skills-only Agent Plugin", "does not operate its own serv
|
|
|
107
119
|
for (const phrase of ["Apache License 2.0", "without warranties", "You are responsible", "external actions", "does not provide legal advice", "service-level agreement"]) {
|
|
108
120
|
assert(terms.includes(phrase), `Terms contain required boundary: ${phrase}`);
|
|
109
121
|
}
|
|
110
|
-
for (const path of ["PRIVACY.md", "TERMS.md", "README.md", "README.zh-CN.md", "docs/installation.md", "docs/installation.zh-CN.md", "docs/release-
|
|
122
|
+
for (const path of ["PRIVACY.md", "TERMS.md", "README.md", "README.zh-CN.md", "docs/installation.md", "docs/installation.zh-CN.md", "docs/release-alpha3.md", "docs/release-alpha3.zh-CN.md"]) {
|
|
111
123
|
validateMarkdownLinks(path);
|
|
112
124
|
}
|
|
113
125
|
|