@echopath-labs/forgerail 0.1.0-alpha.1 → 0.1.0-alpha.2
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 +7 -3
- package/CHANGELOG.md +8 -0
- package/PLUGIN.md +2 -1
- package/PRIVACY.md +15 -0
- package/README.md +14 -2
- package/README.zh-CN.md +13 -2
- package/TERMS.md +19 -0
- package/adapters/codex.json +1 -1
- package/assets/forgerail-icon.svg +6 -0
- package/assets/forgerail-logo.svg +7 -0
- package/contracts/authority-evidence-v1.schema.json +48 -0
- package/contracts/cross-workspace-pack-composition-v1.schema.json +241 -0
- package/contracts/effective-profile-v2.schema.json +113 -0
- package/contracts/entry-mode-v1.schema.json +20 -0
- package/contracts/evidence-identity-v1.schema.json +48 -0
- package/contracts/execution-context-identity-v1.schema.json +76 -0
- package/contracts/gate-result-v1.schema.json +32 -0
- package/contracts/governance-source-v1.schema.json +30 -0
- package/contracts/host-adapter-observation-v1.schema.json +61 -0
- package/contracts/limited-reason-v1.schema.json +46 -0
- package/contracts/operation-authority-requirement-v1.schema.json +43 -0
- package/contracts/operation-grant-v1.schema.json +83 -0
- package/contracts/phase-slice-correlation-v1.schema.json +20 -0
- package/contracts/profile-explanation-v1.schema.json +91 -0
- package/contracts/provider-adapter-observation-v1.schema.json +87 -0
- package/contracts/return-receipt-v2.schema.json +55 -0
- package/contracts/review-authority-requirement-v1.schema.json +117 -0
- package/contracts/rollback-envelope-lineage-v1.schema.json +46 -0
- package/contracts/rule-claim-v1.schema.json +34 -0
- package/contracts/source-dependency-edge-v1.schema.json +37 -0
- package/contracts/task-control-revision-v1.schema.json +39 -0
- package/contracts/task-envelope-v2.schema.json +67 -0
- package/contracts/validation-result-v1.schema.json +57 -0
- package/contracts/validation-topology-v1.schema.json +55 -0
- package/contracts/workspace-identity-v1.schema.json +28 -0
- package/contracts/workspace-relationship-v1.schema.json +31 -0
- package/directory/README.md +23 -0
- package/directory/evaluations.json +78 -0
- package/directory/release-notes-alpha2.md +7 -0
- package/directory/submission-candidate.json +80 -0
- package/docs/composable-autonomy.zh-CN.md +183 -0
- package/docs/control-authority-validation-contracts.md +36 -0
- package/docs/control-authority-validation-contracts.zh-CN.md +36 -0
- package/docs/control-profile-contracts.md +35 -0
- package/docs/control-profile-contracts.zh-CN.md +35 -0
- package/docs/control-system-fixture-matrix.md +30 -0
- package/docs/control-system-fixture-matrix.zh-CN.md +30 -0
- package/docs/control-task-contracts.md +39 -0
- package/docs/control-task-contracts.zh-CN.md +39 -0
- package/docs/cross-workspace-pack-composition-contract.md +31 -0
- package/docs/cross-workspace-pack-composition-contract.zh-CN.md +31 -0
- package/docs/installation.md +9 -3
- package/docs/installation.zh-CN.md +9 -3
- package/docs/release-alpha2.md +21 -0
- package/docs/release-alpha2.zh-CN.md +21 -0
- package/package.json +9 -3
- package/packs/architecture-convergence-audit.json +30 -0
- package/scripts/build-universal-directory-candidate.mjs +72 -0
- package/scripts/disposable-consumer.mjs +1 -1
- package/scripts/fixtures/contracts/authority-evidence.revoked-without-invalidation.invalid.json +22 -0
- package/scripts/fixtures/contracts/authority-evidence.revoked.valid.json +32 -0
- package/scripts/fixtures/contracts/authority-evidence.valid.json +22 -0
- package/scripts/fixtures/contracts/capability-pack.missing-entry.invalid.json +14 -0
- package/scripts/fixtures/contracts/capability-pack.valid.json +15 -0
- package/scripts/fixtures/contracts/cross-workspace-pack-composition.authority-collapse.invalid.json +156 -0
- package/scripts/fixtures/contracts/cross-workspace-pack-composition.false-closure.invalid.json +138 -0
- package/scripts/fixtures/contracts/cross-workspace-pack-composition.valid.json +156 -0
- package/scripts/fixtures/contracts/effective-profile-v2.optional-unavailable-degraded.valid.json +36 -0
- package/scripts/fixtures/contracts/effective-profile-v2.required-unavailable-degraded.invalid.json +36 -0
- package/scripts/fixtures/contracts/effective-profile-v2.unresolved-claim-false-complete.invalid.json +34 -0
- package/scripts/fixtures/contracts/effective-profile-v2.valid.json +53 -0
- package/scripts/fixtures/contracts/effective-profile.duplicate-rule.invalid.json +23 -0
- package/scripts/fixtures/contracts/entry-mode.missing-evidence.invalid.json +6 -0
- package/scripts/fixtures/contracts/entry-mode.valid.json +6 -0
- package/scripts/fixtures/contracts/evidence-identity.unavailable-without-reason.invalid.json +21 -0
- package/scripts/fixtures/contracts/evidence-identity.valid.json +21 -0
- package/scripts/fixtures/contracts/execution-context-identity.unavailable-without-reason.invalid.json +31 -0
- package/scripts/fixtures/contracts/execution-context-identity.valid.json +31 -0
- package/scripts/fixtures/contracts/gate-result.satisfied-without-evidence.invalid.json +14 -0
- package/scripts/fixtures/contracts/gate-result.valid.json +14 -0
- package/scripts/fixtures/contracts/governance-source.unavailable-without-reason.invalid.json +16 -0
- package/scripts/fixtures/contracts/governance-source.valid.json +16 -0
- package/scripts/fixtures/contracts/host-adapter-observation.claims-authorization.invalid.json +23 -0
- package/scripts/fixtures/contracts/host-adapter-observation.valid.json +39 -0
- package/scripts/fixtures/contracts/host-adapter.codex.valid.json +1 -1
- package/scripts/fixtures/contracts/host-adapter.false-supported.invalid.json +14 -0
- package/scripts/fixtures/contracts/host-binding-receipt.valid.json +1 -1
- package/scripts/fixtures/contracts/launch-contract.execution-owner.invalid.json +19 -0
- package/scripts/fixtures/contracts/limited-reason.unbounded.invalid.json +11 -0
- package/scripts/fixtures/contracts/limited-reason.valid.json +11 -0
- package/scripts/fixtures/contracts/operation-authority-requirement.no-issuer.invalid.json +22 -0
- package/scripts/fixtures/contracts/operation-authority-requirement.valid.json +22 -0
- package/scripts/fixtures/contracts/operation-grant.missing-issuer-evidence.invalid.json +34 -0
- package/scripts/fixtures/contracts/operation-grant.valid.json +34 -0
- package/scripts/fixtures/contracts/phase-slice-correlation.aggregate-closure.invalid.json +12 -0
- package/scripts/fixtures/contracts/phase-slice-correlation.valid.json +12 -0
- package/scripts/fixtures/contracts/profile-change-candidate.unconfirmed.invalid.json +13 -0
- package/scripts/fixtures/contracts/profile-explanation.false-complete.invalid.json +36 -0
- package/scripts/fixtures/contracts/profile-explanation.valid.json +29 -0
- package/scripts/fixtures/contracts/provider-adapter-observation.unauthenticated-supported.invalid.json +43 -0
- package/scripts/fixtures/contracts/provider-adapter-observation.valid.json +62 -0
- package/scripts/fixtures/contracts/return-receipt-v2.changed-subject.valid.json +36 -0
- package/scripts/fixtures/contracts/return-receipt-v2.unverified-closeout.invalid.json +36 -0
- package/scripts/fixtures/contracts/return-receipt-v2.valid.json +36 -0
- package/scripts/fixtures/contracts/review-authority-requirement.transitive.invalid.json +33 -0
- package/scripts/fixtures/contracts/review-authority-requirement.valid.json +21 -0
- package/scripts/fixtures/contracts/rollback-envelope-lineage.reused-grant.invalid.json +24 -0
- package/scripts/fixtures/contracts/rollback-envelope-lineage.valid.json +24 -0
- package/scripts/fixtures/contracts/rule-claim.inferred-enforceable.invalid.json +16 -0
- package/scripts/fixtures/contracts/rule-claim.valid.json +16 -0
- package/scripts/fixtures/contracts/source-dependency-edge.unavailable-without-reason.invalid.json +18 -0
- package/scripts/fixtures/contracts/source-dependency-edge.valid.json +18 -0
- package/scripts/fixtures/contracts/task-control-revision.closed-without-receipt.invalid.json +37 -0
- package/scripts/fixtures/contracts/task-control-revision.valid.json +37 -0
- package/scripts/fixtures/contracts/task-envelope-v2.missing-workspace-identity.invalid.json +39 -0
- package/scripts/fixtures/contracts/task-envelope-v2.valid.json +54 -0
- package/scripts/fixtures/contracts/task-envelope-v2.workspace-mismatch.invalid.json +40 -0
- package/scripts/fixtures/contracts/validation-result.passed-without-evidence.invalid.json +29 -0
- package/scripts/fixtures/contracts/validation-result.valid.json +19 -0
- package/scripts/fixtures/contracts/validation-topology.dangling-requirement.invalid.json +32 -0
- package/scripts/fixtures/contracts/validation-topology.protected-environment.valid.json +32 -0
- package/scripts/fixtures/contracts/validation-topology.valid.json +32 -0
- package/scripts/fixtures/contracts/workspace-identity.missing-root.invalid.json +6 -0
- package/scripts/fixtures/contracts/workspace-identity.valid.json +14 -0
- package/scripts/fixtures/contracts/workspace-relationship.inferred-authority.invalid.json +13 -0
- package/scripts/fixtures/contracts/workspace-relationship.valid.json +13 -0
- package/scripts/fixtures/control-system/architecture-convergence-cases.json +25 -0
- package/scripts/fixtures/control-system/task-2.9-invalid-boundary-matrix.json +203 -0
- package/scripts/fixtures/control-system/task-4-diagnosis-health-separation.json +19 -0
- package/scripts/fixtures/workspaces/no-node-project/AGENTS.md +3 -0
- package/scripts/fixtures/workspaces/no-node-project/README.md +3 -0
- package/scripts/fixtures/workspaces/no-node-project/docs/adr/0001-durable-records.md +3 -0
- package/scripts/forgerail.mjs +467 -14
- package/scripts/lib/contracts.mjs +1132 -2
- package/scripts/shadow-comparison.mjs +1 -1
- package/scripts/validate-release.mjs +15 -15
- package/scripts/validate-universal-directory.mjs +151 -0
- package/skills/architecture-convergence-audit/SKILL.md +31 -0
- package/skills/architecture-convergence-audit/agents/openai.yaml +7 -0
- package/skills/architecture-convergence-audit/assets/github-issue-template.md +26 -0
- package/skills/architecture-convergence-audit/references/audit-contract.md +62 -0
- package/skills/workspace-health-review/references/health-review.md +15 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forgerail",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.2",
|
|
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",
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
"skills": "./skills/",
|
|
19
19
|
"interface": {
|
|
20
20
|
"displayName": "ForgeRail",
|
|
21
|
+
"composerIcon": "./assets/forgerail-icon.svg",
|
|
22
|
+
"logo": "./assets/forgerail-logo.svg",
|
|
21
23
|
"shortDescription": "Engineering guidance and guardrails for coding agents.",
|
|
22
24
|
"longDescription": "ForgeRail diagnoses workspace habits, composes applicable governance, launches coding agents with explicit boundaries, and verifies observable results without replacing the agent or the workspace's own record system.",
|
|
23
25
|
"developerName": "EchoPath Labs",
|
|
@@ -25,12 +27,14 @@
|
|
|
25
27
|
"capabilities": [
|
|
26
28
|
"Agent engineering governance",
|
|
27
29
|
"Read-only workspace diagnosis",
|
|
28
|
-
"Workspace health review"
|
|
30
|
+
"Workspace health review",
|
|
31
|
+
"Architecture convergence audit"
|
|
29
32
|
],
|
|
30
33
|
"defaultPrompt": [
|
|
31
34
|
"Use ForgeRail to govern this engineering task.",
|
|
32
35
|
"Diagnose this workspace before recommending governance changes.",
|
|
33
|
-
"Review this workspace for governance and recovery risks."
|
|
36
|
+
"Review this workspace for governance and recovery risks.",
|
|
37
|
+
"Trace duplicate capability ownership and identify the smallest remaining implementation boundary."
|
|
34
38
|
],
|
|
35
39
|
"brandColor": "#B45309"
|
|
36
40
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
No shipping changes yet.
|
|
6
6
|
|
|
7
|
+
## 0.1.0-alpha.2 - 2026-08-30
|
|
8
|
+
|
|
9
|
+
- 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
|
+
- Add private capability-harvest shadows plus sanitized Diagnosis and Health separation fixtures without changing existing Core nouns or creating a second Health Pack.
|
|
11
|
+
- 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
|
+
- 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 currently available route and keep the scoped npm CLI optional; alpha.2 remains a local source-first candidate until separately approved remote integration and release complete.
|
|
14
|
+
|
|
7
15
|
## 0.1.0-alpha.1 - 2026-08-13
|
|
8
16
|
|
|
9
17
|
- Establish the first ForgeRail Agent Plugin with Core, Workspace Diagnosis, and Workspace Health Review entrypoints.
|
package/PLUGIN.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# ForgeRail Agent Plugin
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The current private source exposes four separately addressable Skills:
|
|
4
4
|
|
|
5
5
|
- `forgerail` is the small task-governance Core.
|
|
6
6
|
- `forgerail-workspace-diagnosis` is a read-only, existing-habits-first diagnosis entry.
|
|
7
7
|
- `workspace-health-review` is the first built-in Capability Pack and keeps its established identity.
|
|
8
|
+
- `architecture-convergence-audit` is an independently invoked, medium-risk, read-only Pack for capability-owner duplication and minimal retained boundaries.
|
|
8
9
|
|
|
9
10
|
Availability is not activation. Installing this Plugin does not make every Skill or pack mandatory in every workspace.
|
|
10
11
|
|
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ForgeRail Privacy Notice
|
|
2
|
+
|
|
3
|
+
Effective date: 2026-08-30
|
|
4
|
+
|
|
5
|
+
ForgeRail is a Skills-only Agent Plugin. ForgeRail does not operate its own server, MCP endpoint, account system, or authentication service. The ForgeRail Plugin and optional local CLI do not themselves collect, transmit, or store telemetry or user content for EchoPath Labs.
|
|
6
|
+
|
|
7
|
+
ForgeRail Skills run through the host Agent or platform selected by the user. That host may process prompts, workspace files, command output, and other context under the host provider's own privacy terms and settings. Installing ForgeRail does not change those terms or data controls.
|
|
8
|
+
|
|
9
|
+
Optional external Capability Packs are separately installed and explicitly invoked. A Pack that connects to GitHub, a registry, or another provider is subject to that provider's privacy terms, credentials, permissions, and the Pack's disclosed behavior. Installing the main ForgeRail Plugin does not install, authenticate, enable, or authorize those external connections.
|
|
10
|
+
|
|
11
|
+
ForgeRail defaults to read-only observation where documented. It does not create `.forgerail/` state, edit project instructions, or transmit workspace material merely because the Plugin is installed. Any host-executed file change or external action remains subject to the user's explicit task scope and approval boundary.
|
|
12
|
+
|
|
13
|
+
For product support or privacy questions, use [ForgeRail GitHub Issues](https://github.com/echopath-labs/forgerail/issues). Do not include secrets, access tokens, private source code, personal data, or confidential logs in a public issue.
|
|
14
|
+
|
|
15
|
+
This notice describes ForgeRail-owned behavior. It does not replace the privacy terms of OpenAI, another host Agent, GitHub, npm, or any service the user chooses to connect.
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
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.2` / `v0.1.0-alpha.2`. The candidate is not yet remotely integrated, released, or listed in the Universal Plugins Directory; the currently installable public version remains alpha.1.
|
|
6
|
+
|
|
5
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.
|
|
6
8
|
|
|
7
9
|
## First Alpha Shape
|
|
@@ -9,6 +11,12 @@ It observes a workspace, recommends improvements only when evidence warrants the
|
|
|
9
11
|
- `$forgerail`: task-level guidance and guardrails.
|
|
10
12
|
- `$forgerail-workspace-diagnosis`: bounded read-only diagnosis that follows existing workspace habits first.
|
|
11
13
|
- `$workspace-health-review`: independently invokable workspace governance health pack.
|
|
14
|
+
- `$architecture-convergence-audit`: independently invoked, medium-risk, read-only capability-owner and minimal-boundary audit.
|
|
15
|
+
|
|
16
|
+
The Architecture Convergence Pack is a post-alpha source candidate. It remains
|
|
17
|
+
available rather than automatically enabled, does not require ForgeRail Core to
|
|
18
|
+
run first, and creates no Profile, task ledger, Receipt, `.forgerail/` state, or
|
|
19
|
+
external issue.
|
|
12
20
|
|
|
13
21
|
GitHub Rulesets, Release Safety, and Thread Closure are separately distributed Capability Packs because they have independent authentication, risk, lifecycle, and release boundaries.
|
|
14
22
|
|
|
@@ -27,6 +35,8 @@ ForgeRail composes four layers:
|
|
|
27
35
|
|
|
28
36
|
The Profile is computed by default. ForgeRail does not create `.forgerail/profile.yaml`, edit `AGENTS.md`, or install OpenSpec merely because it was invoked.
|
|
29
37
|
|
|
38
|
+
The Control System migration now includes versioned Workspace/Profile, Task Control, Review Authority, Validation Topology, Execution Context, Adapter Observation, and Cross-Workspace Pack composition contracts while preserving the alpha v1 contracts. See [Control Profile Contracts](docs/control-profile-contracts.md), [Control Task Contracts](docs/control-task-contracts.md), [Control Authority And Validation Contracts](docs/control-authority-validation-contracts.md), [Cross-Workspace Pack Composition Contract](docs/cross-workspace-pack-composition-contract.md), and the pre-evaluator [Control System Fixture Matrix](docs/control-system-fixture-matrix.md).
|
|
39
|
+
|
|
30
40
|
Workspace adoption is progressive: Plugin Only by default; user-confirmed lightweight bindings when durable guidance is valuable; persisted `.forgerail/` governance only for future evidence-backed machine configuration or repeated conflicts. Host-specific instruction files are adapters, not ForgeRail Core. Codex is supported for alpha.1; Claude Code and Cursor profiles are explicit but unverified.
|
|
31
41
|
|
|
32
42
|
## Local Validation
|
|
@@ -51,7 +61,7 @@ forgerail adoption-plan --workspace . --host codex
|
|
|
51
61
|
|
|
52
62
|
## Install The Prerelease
|
|
53
63
|
|
|
54
|
-
|
|
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:
|
|
55
65
|
|
|
56
66
|
```bash
|
|
57
67
|
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.1
|
|
@@ -60,6 +70,8 @@ codex plugin add forgerail@echopath-labs
|
|
|
60
70
|
|
|
61
71
|
Start a new Codex task after installation. Install high-risk Capability Packs separately and only when the project needs them. See [Installation And Adoption](docs/installation.md) and [Progressive Adoption](docs/adoption.md) for exact commands, adoption levels, Host Adapter status, upgrade, rollback, and uninstall boundaries.
|
|
62
72
|
|
|
73
|
+
The Agent Plugin does not require Node.js or `package.json` in the target project. npm/npx remains optional maintainer and validation tooling.
|
|
74
|
+
|
|
63
75
|
## Status
|
|
64
76
|
|
|
65
|
-
The public
|
|
77
|
+
The immutable public alpha.1 remains the current install source. Alpha.2 is a local source-first candidate containing Architecture Convergence, the reviewed Utopia capability harvest, Directory readiness, and ForgeRail-specific Privacy and Terms. 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,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
ForgeRail 是面向 Coding Agent 的工程引航与治理框架。
|
|
4
4
|
|
|
5
|
+
当前 canonical source 正在准备 `0.1.0-alpha.2` / `v0.1.0-alpha.2`。该候选尚未完成远端集成、发布或 Universal Plugins Directory 上线;当前可安装的公开版本仍是 alpha.1。
|
|
6
|
+
|
|
5
7
|
它观察工作区,在证据表明存在缺口时提出建议,组装适用规约,以明确的范围和审批边界发起宿主 Agent 工作,并核验可观察结果。它不替代 Agent,也不强迫项目采用新的规格系统。
|
|
6
8
|
|
|
7
9
|
## 首个 Alpha 形态
|
|
@@ -9,6 +11,11 @@ ForgeRail 是面向 Coding Agent 的工程引航与治理框架。
|
|
|
9
11
|
- `$forgerail`:任务级引航与围栏;
|
|
10
12
|
- `$forgerail-workspace-diagnosis`:优先沿用现有习惯的有界只读诊断;
|
|
11
13
|
- `$workspace-health-review`:可独立触发的工作区治理健康能力包。
|
|
14
|
+
- `$architecture-convergence-audit`:可独立触发、中风险、Analyze First 的只读能力 owner 与最小边界审计。
|
|
15
|
+
|
|
16
|
+
Architecture Convergence 是 alpha.1 之后的私有 source candidate。安装只令其
|
|
17
|
+
`available`,不会自动启用;它不要求先运行 ForgeRail Core,也不会创建 Profile、
|
|
18
|
+
task ledger、Receipt、`.forgerail/` 状态或外部 issue。
|
|
12
19
|
|
|
13
20
|
GitHub Rulesets、Release Safety 与 Thread Closure 由于具有独立身份、权限、风险与生命周期边界,作为单独分发、按需安装和显式触发的 Capability Packs。主插件被安装不代表这些能力包已安装、启用、认证或获批执行。
|
|
14
21
|
|
|
@@ -16,6 +23,8 @@ Cross-Workspace Orchestration 同样单独分发并显式使用。它只适用
|
|
|
16
23
|
|
|
17
24
|
ForgeRail 默认动态计算有效 Workspace Profile,不会因为被调用就创建 `.forgerail/profile.yaml`、修改 `AGENTS.md` 或安装 OpenSpec。
|
|
18
25
|
|
|
26
|
+
Control System 迁移现已加入版本化 Workspace/Profile、Task Control、Review Authority、Validation Topology、Execution Context、Adapter Observation 与 Cross-Workspace Pack composition 合同,同时保留 alpha v1 合同。详情见 [Control Profile 合同](docs/control-profile-contracts.zh-CN.md)、[Control Task 合同](docs/control-task-contracts.zh-CN.md)、[Control Authority 与 Validation 合同](docs/control-authority-validation-contracts.zh-CN.md)、[Cross-Workspace Pack Composition 合同](docs/cross-workspace-pack-composition-contract.zh-CN.md)与 pre-evaluator [Control System Fixture Matrix](docs/control-system-fixture-matrix.zh-CN.md)。
|
|
27
|
+
|
|
19
28
|
工作区采用遵循渐进式三级模型:默认 Plugin Only;只有用户确认后才使用轻量绑定;未来只有机器配置或反复冲突等证据充分时,才考虑持久化 `.forgerail/` 治理。宿主 instruction 文件只是 Adapter,不是 ForgeRail Core。alpha.1 支持 Codex;Claude Code 与 Cursor profile 会明确发布,但仍标记为未验证。
|
|
20
29
|
|
|
21
30
|
可选官方 npm 包为 `@echopath-labs/forgerail`,安装后仍提供简短的 `forgerail` 命令入口,用于离线校验、只读诊断和合同闭环;Agent Plugin 本身不依赖该 CLI 才能使用。未作用域 `forgerail` 只保留名称占位,不是正式安装入口。
|
|
@@ -27,7 +36,7 @@ forgerail validate
|
|
|
27
36
|
|
|
28
37
|
## 安装预发布版
|
|
29
38
|
|
|
30
|
-
|
|
39
|
+
未来面向人的默认入口是 Universal Plugins Directory 界面,但 ForgeRail 当前尚未在该目录上线。在独立提交、审查与发布完成前,请安装已经发布的精确 ForgeRail Marketplace 快照:
|
|
31
40
|
|
|
32
41
|
```bash
|
|
33
42
|
codex plugin marketplace add echopath-labs/forgerail --ref v0.1.0-alpha.1
|
|
@@ -36,4 +45,6 @@ codex plugin add forgerail@echopath-labs
|
|
|
36
45
|
|
|
37
46
|
安装后请启动一个新的 Codex 任务。GitHub Rulesets、Release Safety 与 Thread Closure 必须按项目实际需要单独安装;精确命令、三级采用模型、Host Adapter 状态、升级、回滚和卸载边界见[安装与采用](docs/installation.zh-CN.md)及[渐进式采用](docs/adoption.zh-CN.md)。
|
|
38
47
|
|
|
39
|
-
|
|
48
|
+
Agent Plugin 不要求目标项目安装 Node.js 或存在 `package.json`;npm/npx 始终只是可选维护与验证工具。
|
|
49
|
+
|
|
50
|
+
不可变 public alpha.1 仍是当前安装来源。Alpha.2 是本地 source-first 候选,包含 Architecture Convergence、已审查的 Utopia capability harvest、Directory readiness 和 ForgeRail 专属 Privacy/Terms。拟议版本/tag 不授权应用公开投影、远端集成、发布或 Directory submit/publish。
|
package/TERMS.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ForgeRail Terms
|
|
2
|
+
|
|
3
|
+
Effective date: 2026-08-30
|
|
4
|
+
|
|
5
|
+
ForgeRail is open-source software provided under the [Apache License 2.0](LICENSE). Your use, copying, modification, and distribution of the software are governed by that license.
|
|
6
|
+
|
|
7
|
+
ForgeRail provides engineering guidance, read-only diagnosis, validation, and governance workflows for host Agents. It does not guarantee that generated guidance, validation, or Agent output is complete, correct, secure, compliant, or suitable for a particular purpose. The software is provided without warranties or conditions except as required by applicable law; see the Apache License 2.0 for the controlling warranty and liability terms.
|
|
8
|
+
|
|
9
|
+
You are responsible for:
|
|
10
|
+
|
|
11
|
+
- reviewing suggested changes and validation evidence;
|
|
12
|
+
- granting only permissions you intend to grant;
|
|
13
|
+
- confirming authorization before file, repository, registry, release, deployment, or other external actions;
|
|
14
|
+
- complying with the terms and policies of the host Agent, platform, repository, registry, and external services you use; and
|
|
15
|
+
- protecting credentials, confidential data, and customer information.
|
|
16
|
+
|
|
17
|
+
Installation makes a capability available. It does not approve project adoption, enable an external Capability Pack, authenticate a provider, or authorize a remote or release operation. Optional external Packs and host platforms are governed by their own terms and permission boundaries.
|
|
18
|
+
|
|
19
|
+
ForgeRail does not provide legal advice, professional certification, an availability commitment, or a service-level agreement. Product support is available through [ForgeRail GitHub Issues](https://github.com/echopath-labs/forgerail/issues), without a guaranteed response or resolution time.
|
package/adapters/codex.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"activationBoundary": "new-task-required",
|
|
12
12
|
"verification": {
|
|
13
13
|
"mode": "new-task-discovery",
|
|
14
|
-
"expectedSkills": ["forgerail", "forgerail-workspace-diagnosis", "workspace-health-review"]
|
|
14
|
+
"expectedSkills": ["architecture-convergence-audit", "forgerail", "forgerail-workspace-diagnosis", "workspace-health-review"]
|
|
15
15
|
},
|
|
16
16
|
"limitations": [
|
|
17
17
|
"A binding is discovered only by a new Codex task started inside the applicable instruction scope.",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" role="img" aria-labelledby="title">
|
|
2
|
+
<title id="title">ForgeRail icon candidate</title>
|
|
3
|
+
<rect width="256" height="256" rx="48" fill="#1C1917"/>
|
|
4
|
+
<path d="M68 48h120v36H104v30h68v34h-68v60H68V48Z" fill="#F5F5F4"/>
|
|
5
|
+
<path d="M172 114h36v94h-36z" fill="#D97706"/>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 256" role="img" aria-labelledby="title">
|
|
2
|
+
<title id="title">ForgeRail logo candidate</title>
|
|
3
|
+
<rect width="960" height="256" rx="40" fill="#1C1917"/>
|
|
4
|
+
<path d="M64 48h120v36h-84v30h68v34h-68v60H64V48Z" fill="#F5F5F4"/>
|
|
5
|
+
<path d="M168 114h36v94h-36z" fill="#D97706"/>
|
|
6
|
+
<text x="244" y="164" fill="#F5F5F4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="88" font-weight="700" letter-spacing="-2">ForgeRail</text>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/authority-evidence-v1.json",
|
|
4
|
+
"title": "ForgeRail Authority Evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "authorityEvidenceId", "evidenceIdentityId", "requirementId", "workspaceIdentityId", "operation", "authorityClass", "subjectId", "actorId", "actorRelations", "scope", "coveredSurfaceIds", "lifecycle", "observedAt", "effectiveAt", "expiresAt", "invalidatedAt", "invalidationEvidenceIdentityId", "supersededByAuthorityEvidenceId", "limitedReason"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"authorityEvidenceId": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
11
|
+
"evidenceIdentityId": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
12
|
+
"requirementId": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
13
|
+
"workspaceIdentityId": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
14
|
+
"operation": { "type": "string", "minLength": 1 },
|
|
15
|
+
"authorityClass": { "enum": ["agent_review", "automated_validation", "peer_review", "ownership_approval", "security_approval", "release_approval", "environment_approval"] },
|
|
16
|
+
"subjectId": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
17
|
+
"actorId": { "type": "string", "minLength": 1 },
|
|
18
|
+
"actorRelations": { "type": "array", "items": { "enum": ["subject-author", "executor", "evidence-author", "surface-owner", "independent-reviewer"] }, "uniqueItems": true },
|
|
19
|
+
"scope": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
20
|
+
"coveredSurfaceIds": { "type": "array", "items": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" }, "uniqueItems": true },
|
|
21
|
+
"lifecycle": { "enum": ["current", "stale", "revoked", "dismissed", "expired", "superseded"] },
|
|
22
|
+
"observedAt": { "type": "string", "format": "date-time" },
|
|
23
|
+
"effectiveAt": { "type": "string", "format": "date-time" },
|
|
24
|
+
"expiresAt": { "type": ["string", "null"], "format": "date-time" },
|
|
25
|
+
"invalidatedAt": { "type": ["string", "null"], "format": "date-time" },
|
|
26
|
+
"invalidationEvidenceIdentityId": { "type": ["string", "null"], "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
27
|
+
"supersededByAuthorityEvidenceId": { "type": ["string", "null"], "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
28
|
+
"limitedReason": { "anyOf": [{ "$ref": "https://forgerail.dev/schemas/limited-reason-v1.json" }, { "type": "null" }] }
|
|
29
|
+
},
|
|
30
|
+
"allOf": [
|
|
31
|
+
{
|
|
32
|
+
"if": { "properties": { "lifecycle": { "const": "current" } }, "required": ["lifecycle"] },
|
|
33
|
+
"then": { "properties": { "invalidatedAt": { "const": null }, "invalidationEvidenceIdentityId": { "const": null }, "supersededByAuthorityEvidenceId": { "const": null }, "limitedReason": { "const": null } } }
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"if": { "properties": { "lifecycle": { "enum": ["stale", "revoked", "dismissed", "expired", "superseded"] } }, "required": ["lifecycle"] },
|
|
37
|
+
"then": { "properties": { "invalidatedAt": { "type": "string" }, "limitedReason": { "$ref": "https://forgerail.dev/schemas/limited-reason-v1.json" } } }
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"if": { "properties": { "lifecycle": { "enum": ["stale", "revoked", "dismissed", "superseded"] } }, "required": ["lifecycle"] },
|
|
41
|
+
"then": { "properties": { "invalidationEvidenceIdentityId": { "type": "string" } } }
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"if": { "properties": { "lifecycle": { "const": "superseded" } }, "required": ["lifecycle"] },
|
|
45
|
+
"then": { "properties": { "supersededByAuthorityEvidenceId": { "type": "string" } } }
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://forgerail.dev/schemas/cross-workspace-pack-composition-v1.json",
|
|
4
|
+
"title": "ForgeRail Cross-Workspace Pack Composition v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "compositionId", "packId", "packVersion", "coreCompatibility", "kernelInvariants", "workspaceSet", "nodes", "dependencyEdges", "phases", "workspaceReceiptBundle", "declaredAt"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": "1.0" },
|
|
10
|
+
"compositionId": { "$ref": "#/$defs/id" },
|
|
11
|
+
"packId": { "const": "forgerail-cross-workspace-orchestration" },
|
|
12
|
+
"packVersion": { "type": "string", "minLength": 1 },
|
|
13
|
+
"coreCompatibility": { "$ref": "#/$defs/coreCompatibility" },
|
|
14
|
+
"kernelInvariants": { "$ref": "#/$defs/kernelInvariants" },
|
|
15
|
+
"workspaceSet": { "$ref": "#/$defs/workspaceSet" },
|
|
16
|
+
"nodes": { "type": "array", "items": { "$ref": "#/$defs/node" }, "minItems": 2 },
|
|
17
|
+
"dependencyEdges": { "type": "array", "items": { "$ref": "#/$defs/dependencyEdge" } },
|
|
18
|
+
"phases": { "type": "array", "items": { "$ref": "#/$defs/phaseAggregation" }, "minItems": 1 },
|
|
19
|
+
"workspaceReceiptBundle": { "$ref": "#/$defs/workspaceReceiptBundle" },
|
|
20
|
+
"declaredAt": { "type": "string", "format": "date-time" }
|
|
21
|
+
},
|
|
22
|
+
"$defs": {
|
|
23
|
+
"id": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]+$" },
|
|
24
|
+
"ids": { "type": "array", "items": { "$ref": "#/$defs/id" }, "uniqueItems": true },
|
|
25
|
+
"coreCompatibility": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"additionalProperties": false,
|
|
28
|
+
"required": ["workspaceIdentityVersions", "taskEnvelopeVersions", "returnReceiptVersions", "phaseSliceCorrelationVersions", "status", "evidenceIdentityIds"],
|
|
29
|
+
"properties": {
|
|
30
|
+
"workspaceIdentityVersions": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
31
|
+
"taskEnvelopeVersions": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
32
|
+
"returnReceiptVersions": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
33
|
+
"phaseSliceCorrelationVersions": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "uniqueItems": true },
|
|
34
|
+
"status": { "enum": ["compatible", "incompatible", "unverified"] },
|
|
35
|
+
"evidenceIdentityIds": { "$ref": "#/$defs/ids" }
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"kernelInvariants": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"additionalProperties": false,
|
|
41
|
+
"required": ["stateModelRedefined", "operationGrantMinting", "authoritySubstitution", "waiverBroadening", "freshnessBroadening", "receiptVerificationBypass", "transportAsAcceptance"],
|
|
42
|
+
"properties": {
|
|
43
|
+
"stateModelRedefined": { "const": false },
|
|
44
|
+
"operationGrantMinting": { "const": false },
|
|
45
|
+
"authoritySubstitution": { "const": false },
|
|
46
|
+
"waiverBroadening": { "const": false },
|
|
47
|
+
"freshnessBroadening": { "const": false },
|
|
48
|
+
"receiptVerificationBypass": { "const": false },
|
|
49
|
+
"transportAsAcceptance": { "const": false }
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"workspaceSet": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"required": ["workspaceSetId", "ownerWorkspaceIdentityIds", "coordinatorWorkspaceIdentityId", "aggregateWriterId", "relationshipIds", "observedAt"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"workspaceSetId": { "$ref": "#/$defs/id" },
|
|
58
|
+
"ownerWorkspaceIdentityIds": { "type": "array", "items": { "$ref": "#/$defs/id" }, "minItems": 2, "uniqueItems": true },
|
|
59
|
+
"coordinatorWorkspaceIdentityId": { "anyOf": [{ "$ref": "#/$defs/id" }, { "type": "null" }] },
|
|
60
|
+
"aggregateWriterId": { "$ref": "#/$defs/id" },
|
|
61
|
+
"relationshipIds": { "$ref": "#/$defs/ids" },
|
|
62
|
+
"observedAt": { "type": "string", "format": "date-time" }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"coreEnvelopeReference": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"required": ["contract", "schemaVersion", "envelopeId", "envelopeRevisionId", "workspaceIdentityId", "subjectId"],
|
|
69
|
+
"properties": {
|
|
70
|
+
"contract": { "const": "task-envelope-v2" },
|
|
71
|
+
"schemaVersion": { "type": "string", "minLength": 1 },
|
|
72
|
+
"envelopeId": { "$ref": "#/$defs/id" },
|
|
73
|
+
"envelopeRevisionId": { "$ref": "#/$defs/id" },
|
|
74
|
+
"workspaceIdentityId": { "$ref": "#/$defs/id" },
|
|
75
|
+
"subjectId": { "$ref": "#/$defs/id" }
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"phaseSliceReference": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"additionalProperties": false,
|
|
81
|
+
"required": ["contract", "schemaVersion", "correlationId", "phaseId", "sliceId", "executionAttemptId"],
|
|
82
|
+
"properties": {
|
|
83
|
+
"contract": { "const": "phase-slice-correlation-v1" },
|
|
84
|
+
"schemaVersion": { "type": "string", "minLength": 1 },
|
|
85
|
+
"correlationId": { "$ref": "#/$defs/id" },
|
|
86
|
+
"phaseId": { "$ref": "#/$defs/id" },
|
|
87
|
+
"sliceId": { "$ref": "#/$defs/id" },
|
|
88
|
+
"executionAttemptId": { "$ref": "#/$defs/id" }
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"coreReceiptReference": {
|
|
92
|
+
"anyOf": [
|
|
93
|
+
{
|
|
94
|
+
"type": "object",
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"required": ["contract", "schemaVersion", "receiptId", "workspaceIdentityId", "envelopeId", "envelopeRevisionId", "controlRevisionId", "subjectId", "verificationStatus", "verificationGateResultId", "transportStatus", "coordinatorAcceptance", "coordinatorAcceptanceEvidenceIdentityIds", "observedAt"],
|
|
97
|
+
"properties": {
|
|
98
|
+
"contract": { "const": "return-receipt-v2" },
|
|
99
|
+
"schemaVersion": { "type": "string", "minLength": 1 },
|
|
100
|
+
"receiptId": { "$ref": "#/$defs/id" },
|
|
101
|
+
"workspaceIdentityId": { "$ref": "#/$defs/id" },
|
|
102
|
+
"envelopeId": { "$ref": "#/$defs/id" },
|
|
103
|
+
"envelopeRevisionId": { "$ref": "#/$defs/id" },
|
|
104
|
+
"controlRevisionId": { "$ref": "#/$defs/id" },
|
|
105
|
+
"subjectId": { "$ref": "#/$defs/id" },
|
|
106
|
+
"verificationStatus": { "enum": ["pending", "verified", "rejected", "stale"] },
|
|
107
|
+
"verificationGateResultId": { "anyOf": [{ "$ref": "#/$defs/id" }, { "type": "null" }] },
|
|
108
|
+
"transportStatus": { "enum": ["not_delivered", "delivered", "failed"] },
|
|
109
|
+
"coordinatorAcceptance": { "enum": ["pending", "accepted", "rejected", "stale"] },
|
|
110
|
+
"coordinatorAcceptanceEvidenceIdentityIds": { "$ref": "#/$defs/ids" },
|
|
111
|
+
"observedAt": { "type": "string", "format": "date-time" }
|
|
112
|
+
},
|
|
113
|
+
"allOf": [
|
|
114
|
+
{
|
|
115
|
+
"if": { "properties": { "verificationStatus": { "const": "verified" } }, "required": ["verificationStatus"] },
|
|
116
|
+
"then": { "properties": { "verificationGateResultId": { "$ref": "#/$defs/id" } } }
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"if": { "properties": { "coordinatorAcceptance": { "const": "accepted" } }, "required": ["coordinatorAcceptance"] },
|
|
120
|
+
"then": { "properties": { "verificationStatus": { "const": "verified" }, "coordinatorAcceptanceEvidenceIdentityIds": { "minItems": 1 } } }
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{ "type": "null" }
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
"node": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"additionalProperties": false,
|
|
130
|
+
"required": ["nodeId", "workspaceIdentityId", "workspaceIdentitySchemaVersion", "writerIdentityId", "coreEnvelope", "phaseSlice", "coreReceipt", "state"],
|
|
131
|
+
"properties": {
|
|
132
|
+
"nodeId": { "$ref": "#/$defs/id" },
|
|
133
|
+
"workspaceIdentityId": { "$ref": "#/$defs/id" },
|
|
134
|
+
"workspaceIdentitySchemaVersion": { "type": "string", "minLength": 1 },
|
|
135
|
+
"writerIdentityId": { "$ref": "#/$defs/id" },
|
|
136
|
+
"coreEnvelope": { "$ref": "#/$defs/coreEnvelopeReference" },
|
|
137
|
+
"phaseSlice": { "$ref": "#/$defs/phaseSliceReference" },
|
|
138
|
+
"coreReceipt": { "$ref": "#/$defs/coreReceiptReference" },
|
|
139
|
+
"state": { "enum": ["pending", "ready", "executing", "receipt_pending", "verification_pending", "acceptance_pending", "accepted", "blocked", "failed", "stale"] }
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"dependencyEdge": {
|
|
143
|
+
"type": "object",
|
|
144
|
+
"additionalProperties": false,
|
|
145
|
+
"required": ["edgeId", "predecessorNodeId", "successorNodeId", "kind", "required", "unlockCondition", "authorityTransfer", "operationGrantTransfer", "receiptSubstitution"],
|
|
146
|
+
"properties": {
|
|
147
|
+
"edgeId": { "$ref": "#/$defs/id" },
|
|
148
|
+
"predecessorNodeId": { "$ref": "#/$defs/id" },
|
|
149
|
+
"successorNodeId": { "$ref": "#/$defs/id" },
|
|
150
|
+
"kind": { "enum": ["delivery", "validation", "acceptance", "rollback"] },
|
|
151
|
+
"required": { "type": "boolean" },
|
|
152
|
+
"unlockCondition": { "const": "core-receipt-verified-and-coordinator-accepted" },
|
|
153
|
+
"authorityTransfer": { "const": false },
|
|
154
|
+
"operationGrantTransfer": { "const": false },
|
|
155
|
+
"receiptSubstitution": { "const": false }
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"phaseAggregation": {
|
|
159
|
+
"type": "object",
|
|
160
|
+
"additionalProperties": false,
|
|
161
|
+
"required": ["phaseId", "requiredNodeIds", "acceptedNodeIds", "pendingNodeIds", "failedNodeIds", "blockedNodeIds", "staleNodeIds", "state", "aggregateClosureClaim"],
|
|
162
|
+
"properties": {
|
|
163
|
+
"phaseId": { "$ref": "#/$defs/id" },
|
|
164
|
+
"requiredNodeIds": { "type": "array", "items": { "$ref": "#/$defs/id" }, "minItems": 1, "uniqueItems": true },
|
|
165
|
+
"acceptedNodeIds": { "$ref": "#/$defs/ids" },
|
|
166
|
+
"pendingNodeIds": { "$ref": "#/$defs/ids" },
|
|
167
|
+
"failedNodeIds": { "$ref": "#/$defs/ids" },
|
|
168
|
+
"blockedNodeIds": { "$ref": "#/$defs/ids" },
|
|
169
|
+
"staleNodeIds": { "$ref": "#/$defs/ids" },
|
|
170
|
+
"state": { "enum": ["open", "blocked", "closed", "stale"] },
|
|
171
|
+
"aggregateClosureClaim": { "type": "boolean" }
|
|
172
|
+
},
|
|
173
|
+
"allOf": [
|
|
174
|
+
{
|
|
175
|
+
"if": { "properties": { "state": { "const": "closed" } }, "required": ["state"] },
|
|
176
|
+
"then": { "properties": { "pendingNodeIds": { "maxItems": 0 }, "failedNodeIds": { "maxItems": 0 }, "blockedNodeIds": { "maxItems": 0 }, "staleNodeIds": { "maxItems": 0 }, "aggregateClosureClaim": { "const": true } } }
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"if": { "properties": { "state": { "enum": ["open", "blocked", "stale"] } }, "required": ["state"] },
|
|
180
|
+
"then": { "properties": { "aggregateClosureClaim": { "const": false } } }
|
|
181
|
+
}
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
"workspaceReceiptBundle": {
|
|
185
|
+
"type": "object",
|
|
186
|
+
"additionalProperties": false,
|
|
187
|
+
"required": ["bundleId", "bundleRevisionId", "predecessorBundleRevisionId", "bundleDigest", "compositionId", "workspaceSetId", "phaseIds", "nodeReceipts", "dependencyStatus", "pendingNodeIds", "failedNodeIds", "blockedNodeIds", "staleNodeIds", "deviationEvidenceIdentityIds", "nextEligibleNodeIds", "state", "observedAt", "immutable"],
|
|
188
|
+
"properties": {
|
|
189
|
+
"bundleId": { "$ref": "#/$defs/id" },
|
|
190
|
+
"bundleRevisionId": { "$ref": "#/$defs/id" },
|
|
191
|
+
"predecessorBundleRevisionId": { "anyOf": [{ "$ref": "#/$defs/id" }, { "type": "null" }] },
|
|
192
|
+
"bundleDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
193
|
+
"compositionId": { "$ref": "#/$defs/id" },
|
|
194
|
+
"workspaceSetId": { "$ref": "#/$defs/id" },
|
|
195
|
+
"phaseIds": { "type": "array", "items": { "$ref": "#/$defs/id" }, "minItems": 1, "uniqueItems": true },
|
|
196
|
+
"nodeReceipts": {
|
|
197
|
+
"type": "array",
|
|
198
|
+
"items": {
|
|
199
|
+
"type": "object",
|
|
200
|
+
"additionalProperties": false,
|
|
201
|
+
"required": ["nodeId", "receiptId", "verificationStatus", "coordinatorAcceptance"],
|
|
202
|
+
"properties": {
|
|
203
|
+
"nodeId": { "$ref": "#/$defs/id" },
|
|
204
|
+
"receiptId": { "$ref": "#/$defs/id" },
|
|
205
|
+
"verificationStatus": { "const": "verified" },
|
|
206
|
+
"coordinatorAcceptance": { "const": "accepted" }
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"dependencyStatus": {
|
|
211
|
+
"type": "array",
|
|
212
|
+
"items": {
|
|
213
|
+
"type": "object",
|
|
214
|
+
"additionalProperties": false,
|
|
215
|
+
"required": ["edgeId", "status", "evidenceIdentityIds"],
|
|
216
|
+
"properties": {
|
|
217
|
+
"edgeId": { "$ref": "#/$defs/id" },
|
|
218
|
+
"status": { "enum": ["locked", "unlocked", "blocked", "stale"] },
|
|
219
|
+
"evidenceIdentityIds": { "$ref": "#/$defs/ids" }
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"pendingNodeIds": { "$ref": "#/$defs/ids" },
|
|
224
|
+
"failedNodeIds": { "$ref": "#/$defs/ids" },
|
|
225
|
+
"blockedNodeIds": { "$ref": "#/$defs/ids" },
|
|
226
|
+
"staleNodeIds": { "$ref": "#/$defs/ids" },
|
|
227
|
+
"deviationEvidenceIdentityIds": { "$ref": "#/$defs/ids" },
|
|
228
|
+
"nextEligibleNodeIds": { "$ref": "#/$defs/ids" },
|
|
229
|
+
"state": { "enum": ["assembling", "review_required", "accepted", "blocked", "stale"] },
|
|
230
|
+
"observedAt": { "type": "string", "format": "date-time" },
|
|
231
|
+
"immutable": { "const": true }
|
|
232
|
+
},
|
|
233
|
+
"allOf": [
|
|
234
|
+
{
|
|
235
|
+
"if": { "properties": { "state": { "const": "accepted" } }, "required": ["state"] },
|
|
236
|
+
"then": { "properties": { "pendingNodeIds": { "maxItems": 0 }, "failedNodeIds": { "maxItems": 0 }, "blockedNodeIds": { "maxItems": 0 }, "staleNodeIds": { "maxItems": 0 }, "deviationEvidenceIdentityIds": { "maxItems": 0 } } }
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|