@cassiomc1/forgeloop 1.6.2 → 1.6.4
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/DOCS_INDEX.md +26 -4
- package/EXECUTION_STATE.md +7 -0
- package/LOOP_ENGINEERING.md +58 -0
- package/LOOP_SYSTEM_DESIGN.md +54 -0
- package/ORCHESTRATOR_INTEGRATION.md +23 -0
- package/PROTOCOL_INTEGRATION.md +36 -0
- package/QUALITY_SCORECARD.md +21 -0
- package/README.md +57 -2
- package/TERMINOLOGY.md +11 -0
- package/THREAT_MODEL.md +7 -0
- package/completions/_forgeloop +85 -0
- package/completions/forgeloop.bash +173 -0
- package/completions/forgeloop.fish +544 -0
- package/docs/AGENT_PROTOCOL_SUMMARY.md +281 -0
- package/docs/ARTIFACT_REFERENCE.md +226 -0
- package/docs/CLI_REFERENCE.md +308 -2
- package/docs/CODE_ATTESTATION.md +141 -0
- package/docs/CROSS_HARNESS_CONTINUITY.md +22 -2
- package/docs/DOCUMENTATION_GUIDE.md +13 -11
- package/docs/GETTING_STARTED.md +98 -1
- package/docs/MCP.md +8 -0
- package/docs/PLATFORM_ADAPTERS.md +69 -0
- package/docs/RECIPES.md +138 -0
- package/docs/RELEASE_CHECKLIST.md +54 -0
- package/docs/REVISION_PROVIDERS.md +136 -0
- package/docs/SIGNING_PROVIDERS.md +83 -0
- package/docs/TROUBLESHOOTING.md +184 -0
- package/docs/UNIVERSAL_INTEGRATION.md +11 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.html +13841 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.receipt.json +37 -0
- package/docs/assets/diagrams/forgeloop-code-attestation-flow.svg +5046 -0
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +46 -43
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +41 -41
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.html +13783 -0
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.receipt.json +37 -0
- package/docs/assets/diagrams/forgeloop-verification-trust-flow.svg +4988 -0
- package/docs/diagrams/README.md +30 -22
- package/docs/diagrams/forgeloop-code-attestation-flow.workflow.json +125 -0
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +11 -8
- package/docs/diagrams/forgeloop-verification-trust-flow.workflow.json +116 -0
- package/docs/diagrams/manifest.json +42 -0
- package/docs/diagrams/reviews/forgeloop-code-attestation-flow.review.json +20 -0
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +3 -3
- package/docs/diagrams/reviews/forgeloop-verification-trust-flow.review.json +20 -0
- package/integrations/generic-ci/verify.sh +14 -0
- package/package.json +31 -9
- package/schemas/attestation-verification-result.schema.json +34 -0
- package/schemas/code-attestation.schema.json +61 -0
- package/schemas/code-manifest.schema.json +57 -0
- package/schemas/config.schema.json +57 -1
- package/schemas/handoff-envelope.schema.json +57 -0
- package/schemas/in-toto-statement.schema.json +32 -0
- package/schemas/responsibility.schema.json +37 -0
- package/schemas/verification-scope.schema.json +26 -0
- package/schemas/workspace-binding.schema.json +20 -0
- package/scripts/CI_VALIDATORS.md +3 -0
- package/scripts/benchmark-cli-startup.mjs +60 -0
- package/scripts/check-changelog-freshness.mjs +88 -0
- package/scripts/check-critical-coverage.mjs +58 -0
- package/scripts/generate-agent-protocol-summary.mjs +141 -0
- package/scripts/generate-shell-completions.mjs +132 -0
- package/scripts/write-forgeloop-attestation-summary.mjs +93 -0
- package/src/cli.js +114 -6
- package/src/commands/attestation-create.js +30 -0
- package/src/commands/attestation-status.js +12 -0
- package/src/commands/attestation-verify-range.js +32 -0
- package/src/commands/attestation-verify.js +23 -0
- package/src/commands/handoff-create.js +9 -0
- package/src/commands/handoff-list.js +12 -0
- package/src/commands/handoff-show.js +10 -0
- package/src/commands/responsibility-set.js +20 -0
- package/src/commands/responsibility-status.js +12 -0
- package/src/commands/run-check.js +43 -3
- package/src/commands/task-repair-legacy-recovery.js +1 -2
- package/src/commands/verify-scope.js +9 -0
- package/src/commands/workspace-bind.js +17 -0
- package/src/commands/workspace-status.js +19 -0
- package/src/core/artifact-registry.js +84 -0
- package/src/core/attestation-coverage.js +134 -0
- package/src/core/attestation-verifier.js +227 -0
- package/src/core/attestation.js +263 -0
- package/src/core/audit.js +67 -1
- package/src/core/bundles.js +210 -9
- package/src/core/cli-command-definitions.js +196 -0
- package/src/core/code-manifest.js +293 -0
- package/src/core/command-executors.js +79 -0
- package/src/core/command-input.js +69 -18
- package/src/core/command-runtime.js +2 -1
- package/src/core/completion.js +170 -8
- package/src/core/config.js +60 -2
- package/src/core/continuity-cli-options.js +9 -3
- package/src/core/continuity-reconciliation.js +20 -0
- package/src/core/diagnostic-projection.js +3 -1
- package/src/core/error-codes.js +146 -0
- package/src/core/events.js +109 -13
- package/src/core/exit-codes.js +22 -0
- package/src/core/handoff.js +208 -0
- package/src/core/information-gain-projection.js +3 -3
- package/src/core/integration-invocation-policy.js +40 -0
- package/src/core/integration-resources.js +54 -0
- package/src/core/next-action-phases.js +968 -0
- package/src/core/next-action.js +32 -951
- package/src/core/phase.js +29 -1
- package/src/core/protocol-info.js +41 -1
- package/src/core/repository.js +256 -11
- package/src/core/responsibility.js +265 -0
- package/src/core/revision/git.js +207 -0
- package/src/core/revision/provider.js +90 -0
- package/src/core/revision/registry.js +5 -0
- package/src/core/route-artifact.js +1 -1
- package/src/core/schema-validation.js +8 -0
- package/src/core/signing/none.js +23 -0
- package/src/core/signing/provider.js +21 -0
- package/src/core/signing/registry.js +7 -0
- package/src/core/signing/sigstore.js +158 -0
- package/src/core/task-command.js +9 -1
- package/src/core/task-paths.js +72 -0
- package/src/core/templates.js +8 -0
- package/src/core/verification-scope-capability.js +179 -0
- package/src/core/verification-scope.js +271 -0
- package/src/core/workspace-binding.js +211 -0
- package/src/integration.d.ts +91 -0
- package/AGENT_COMPATIBILITY.md +0 -11
- package/docs/RELEASE_CHECKLIST_1_4.md +0 -38
- package/docs/RELEASE_CHECKLIST_1_5_MCP.md +0 -78
- package/docs/RELEASE_CHECKLIST_1_6_1.md +0 -121
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export type ForgeLoopRiskClass =
|
|
2
|
+
| "READ_ONLY"
|
|
3
|
+
| "LOOP_MUTATION"
|
|
4
|
+
| "CLAIM_REACQUISITION"
|
|
5
|
+
| "EXTERNAL_EXECUTION"
|
|
6
|
+
| "AUTHORITY_MUTATION"
|
|
7
|
+
| "EXTERNAL_STATE_ATTESTATION"
|
|
8
|
+
| "MAINTENANCE"
|
|
9
|
+
| "CLAIM_RELEASE_RECOVERY"
|
|
10
|
+
| "LEGACY_MIGRATION"
|
|
11
|
+
| "FORCE_DESTRUCTIVE";
|
|
12
|
+
|
|
13
|
+
export interface ForgeLoopCommandInput {
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
path?: string;
|
|
16
|
+
taskId?: string | null;
|
|
17
|
+
json?: boolean;
|
|
18
|
+
timeoutMs?: number | null;
|
|
19
|
+
commandArgv?: string[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ForgeLoopCommandEnvelope<T = unknown> {
|
|
23
|
+
ok: boolean;
|
|
24
|
+
command: string | null;
|
|
25
|
+
exitCode: number;
|
|
26
|
+
result: T | null;
|
|
27
|
+
error: { code: string; message: string; next?: string } | null;
|
|
28
|
+
metadata: {
|
|
29
|
+
protocolVersion: number;
|
|
30
|
+
integrationApiVersion: number;
|
|
31
|
+
packageVersion?: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface ForgeLoopCommandDefinition {
|
|
36
|
+
name: string;
|
|
37
|
+
category: string;
|
|
38
|
+
mutation: "READ_ONLY" | "MUTATING" | "EXTERNAL_EXECUTION";
|
|
39
|
+
options: Readonly<Record<string, Record<string, unknown>>>;
|
|
40
|
+
writes: readonly string[];
|
|
41
|
+
removes: readonly string[];
|
|
42
|
+
mayExecuteExternalProcess: boolean;
|
|
43
|
+
description: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface ForgeLoopInvocationClassification {
|
|
47
|
+
command: string;
|
|
48
|
+
riskClass: ForgeLoopRiskClass;
|
|
49
|
+
readOnly: boolean;
|
|
50
|
+
mutatesProtocol: boolean;
|
|
51
|
+
removesArtifacts: boolean;
|
|
52
|
+
executesExternalProcess: boolean;
|
|
53
|
+
affectsClaimAuthority: boolean;
|
|
54
|
+
destructive: boolean;
|
|
55
|
+
requiredCapability: string | null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ForgeLoopContext {
|
|
59
|
+
authorityContext: Record<string, unknown>;
|
|
60
|
+
verificationExecutionAdapter?: Record<string, unknown>;
|
|
61
|
+
verificationExecutionPolicy?: { requiredIsolation: string };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export declare const FORGELOOP_INTEGRATION_API_VERSION: number;
|
|
65
|
+
export declare const FORGELOOP_INTEGRATION_RUNTIME_VERSION: number;
|
|
66
|
+
export declare const CLI_COMMAND_DEFINITIONS: Readonly<Record<string, ForgeLoopCommandDefinition>>;
|
|
67
|
+
export declare const INTEGRATION_LIMITS: Readonly<Record<string, number>>;
|
|
68
|
+
export declare const INTEGRATION_RISK_CLASSES: Readonly<Record<string, ForgeLoopRiskClass>>;
|
|
69
|
+
export declare const INTEGRATION_RESOURCE_DEFINITIONS: Readonly<Record<string, { scope: string; description: string }>>;
|
|
70
|
+
export declare const VERIFICATION_EXECUTION_POLICY_MODES: readonly string[];
|
|
71
|
+
export declare const VERIFICATION_ISOLATION_MODES: readonly string[];
|
|
72
|
+
|
|
73
|
+
export declare function getForgeLoopPackageVersion(): string;
|
|
74
|
+
export declare function defaultCommandInputValues(): ForgeLoopCommandInput;
|
|
75
|
+
export declare function validateForgeLoopCommandInput(input: {
|
|
76
|
+
command: string;
|
|
77
|
+
input?: ForgeLoopCommandInput;
|
|
78
|
+
help?: boolean;
|
|
79
|
+
}): void;
|
|
80
|
+
export declare function executeForgeLoopCommand<T = unknown>(input: {
|
|
81
|
+
command: string;
|
|
82
|
+
projectPath?: string;
|
|
83
|
+
input?: ForgeLoopCommandInput;
|
|
84
|
+
authorityContext?: Record<string, unknown>;
|
|
85
|
+
runtimeContext?: Record<string, unknown>;
|
|
86
|
+
}): Promise<ForgeLoopCommandEnvelope<T>>;
|
|
87
|
+
export declare function getForgeLoopCapabilities(input?: { packageVersion?: string | null }): Record<string, unknown>;
|
|
88
|
+
export declare function classifyForgeLoopInvocation(command: string, input?: ForgeLoopCommandInput): ForgeLoopInvocationClassification;
|
|
89
|
+
export declare function readForgeLoopIntegrationResource(uri: string, input?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
90
|
+
export declare function resolveForgeLoopProjectRoot(projectPath?: string, input?: { cwd?: string }): Promise<string>;
|
|
91
|
+
export declare function createForgeLoopContext(input?: Record<string, unknown>): ForgeLoopContext;
|
package/AGENT_COMPATIBILITY.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Deprecated filename
|
|
2
|
-
|
|
3
|
-
> Deprecated since package `1.2.4`; retained as a repository compatibility stub.
|
|
4
|
-
> It is not part of the public integration surface and is scheduled for removal
|
|
5
|
-
> in the next compatibility-breaking release.
|
|
6
|
-
|
|
7
|
-
ForgeLoop is vendor-neutral and does not use a supported-agent allowlist.
|
|
8
|
-
|
|
9
|
-
The canonical integration contract is:
|
|
10
|
-
|
|
11
|
-
[`PROTOCOL_INTEGRATION.md`](./PROTOCOL_INTEGRATION.md)
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# ForgeLoop 1.4.0 release checklist
|
|
2
|
-
|
|
3
|
-
This checklist prepares the validated claim-recovery capability for release. It does not authorize publication, tagging, or deployment.
|
|
4
|
-
|
|
5
|
-
## Ownership and recovery gates
|
|
6
|
-
|
|
7
|
-
- [ ] Fake, deleted, corrupt, schema-invalid, and mismatched `recovery.json` cases resolve to `INCONSISTENT`.
|
|
8
|
-
- [ ] `INCONSISTENT` preserves historical claims, disables mutation, blocks overlapping acquisition, and is visible in list/show/status/audit/inspect/next.
|
|
9
|
-
- [ ] Only a fully matched recovery artifact and append-only recovery history releases claims.
|
|
10
|
-
- [ ] `task-recover` remains restricted to `STALE` and `ABANDONED`; `RECOVERABLE` keeps its canonical reconciliation path.
|
|
11
|
-
- [ ] `task-resume` validates ownership, settles only an unchanged stale task lock, and reacquires claims under the project claims lock.
|
|
12
|
-
- [ ] Project claim locks classify `NONE`, `LIVE`, `STALE`, `UNKNOWN`, and `CORRUPT`, with CAS-safe stale settlement.
|
|
13
|
-
- [ ] Manually forged COMPLETE state cannot release claims.
|
|
14
|
-
- [ ] Canonically completed task does release claims.
|
|
15
|
-
- [ ] Corrupt/missing completion lifecycle proof retains historical claims.
|
|
16
|
-
- [ ] Task locks with incomplete identity classify UNKNOWN.
|
|
17
|
-
- [ ] Single COMPLETE/RECOVERED task can be inspected implicitly by READ commands.
|
|
18
|
-
- [ ] Single COMPLETE/RECOVERED task cannot be selected implicitly for mutation.
|
|
19
|
-
- [ ] Ownership ledger validation is not redundantly repeated inside one immutable snapshot.
|
|
20
|
-
- [ ] Legacy recovery repair CAS-settles only unchanged stale task locks.
|
|
21
|
-
- [ ] Legacy recovery repair refuses UNKNOWN/CORRUPT task locks.
|
|
22
|
-
- [ ] alreadyRepaired requires a fully valid canonical recovery relationship.
|
|
23
|
-
- [ ] No exported claim helper releases claims from COMPLETE phase alone.
|
|
24
|
-
- [ ] Legacy recovery migration v1 accepts only CALLER_ACKNOWLEDGED authority.
|
|
25
|
-
|
|
26
|
-
## Compatibility and package gates
|
|
27
|
-
|
|
28
|
-
- [ ] `package.json` and `package-lock.json` agree on `1.4.0`.
|
|
29
|
-
- [ ] `protocol-info --json` advertises `features.taskClaimRecovery.validatedClaimProjection=true` and task-recovery schema v1.
|
|
30
|
-
- [ ] Documentation states that active task-recovery schema v1 requires a recovery-aware ForgeLoop reader (`>=1.4.0`).
|
|
31
|
-
- [ ] The packed package contains the recovery schema, claim-state core, recovery-history core, and this checklist.
|
|
32
|
-
- [ ] `npm test && npm run lint && npm run coverage && npm run docs:check && npm run pack:check && npm run pack:smoke && npm run dependency:policy` passes once on the release candidate.
|
|
33
|
-
- [ ] `git diff --check` and the repository ForgeLoop audit pass.
|
|
34
|
-
|
|
35
|
-
## Publication boundary
|
|
36
|
-
|
|
37
|
-
- [ ] A separately authorized release workflow verifies the final commit, `v1.4.0` tag, npm metadata, tarball digests, and GitHub release identity.
|
|
38
|
-
- [ ] No actor treats caller acknowledgement as `HOST_ATTESTED` authority.
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# ForgeLoop 1.5.0 + MCP release checklist
|
|
2
|
-
|
|
3
|
-
Preparation checklist for the `@cassiomc1/forgeloop` 1.5.0 and
|
|
4
|
-
`@cassiomc1/forgeloop-mcp` releases. It does not authorize publication.
|
|
5
|
-
|
|
6
|
-
## Core integration gates
|
|
7
|
-
|
|
8
|
-
- [ ] Core package version is `1.5.0`; integration API version is `1`.
|
|
9
|
-
- [ ] `exports` map exposes only `.` and `./integration`.
|
|
10
|
-
- [ ] Executor registry is in parity with canonical command definitions.
|
|
11
|
-
- [ ] `bundle` is MAINTENANCE-gated; hidden in readonly/safe.
|
|
12
|
-
- [ ] `resolveForgeLoopProjectRoot` applies CLI target semantics (symlinks rejected).
|
|
13
|
-
- [ ] Integration limits bound strings, arrays, argv, and structured inputs.
|
|
14
|
-
|
|
15
|
-
## MCP package gates
|
|
16
|
-
|
|
17
|
-
- [ ] Official SDK v2; target protocol generation `2026-07-28`.
|
|
18
|
-
- [ ] stdio works with clean stdout (protocol-only) and JSON stderr diagnostics.
|
|
19
|
-
- [ ] HTTP is strict modern (`legacy: "reject"`) and loopback-only
|
|
20
|
-
(`E_MCP_REMOTE_NOT_SUPPORTED` for any other bind).
|
|
21
|
-
- [ ] Transport bounds active: header/request/keepalive timeouts, 4 MiB body cap,
|
|
22
|
-
POST-only, in-flight ceiling (503 `E_MCP_HTTP_BUSY`).
|
|
23
|
-
- [ ] Tool/resource catalogs are deterministic and identical across transports.
|
|
24
|
-
- [ ] Task-aware mutation tools require explicit `taskId`.
|
|
25
|
-
- [ ] Capability gates re-checked per invocation; tool input cannot elevate policy.
|
|
26
|
-
- [ ] `task-recover`, legacy repair, and force unlock are separately gated;
|
|
27
|
-
legacy repair hidden by default; `operatorAuthorized` absent from schemas.
|
|
28
|
-
- [ ] No generic shell/exec tool exists.
|
|
29
|
-
|
|
30
|
-
## Ownership/recovery parity
|
|
31
|
-
|
|
32
|
-
- [ ] `task/ownership` derives exclusively from the canonical claim resolver.
|
|
33
|
-
- [ ] Forged COMPLETE stays INCONSISTENT with retained claims on every surface.
|
|
34
|
-
- [ ] RECOVERED tasks block ordinary mutation; `task-resume` reacquires canonically.
|
|
35
|
-
- [ ] Concurrent resume yields exactly one winner.
|
|
36
|
-
|
|
37
|
-
## Safety
|
|
38
|
-
|
|
39
|
-
- [ ] `maxExecutionTimeMs` enforced: missing→max, zero/negative/float rejected,
|
|
40
|
-
over-max rejected.
|
|
41
|
-
- [ ] Error payloads preserve canonical codes; secrets redacted; stacks stripped;
|
|
42
|
-
messages bounded.
|
|
43
|
-
- [ ] Oversized tool/resource output refused with `E_MCP_RESULT_TOO_LARGE`.
|
|
44
|
-
|
|
45
|
-
## Packaging/docs
|
|
46
|
-
|
|
47
|
-
- [ ] Core tarball contains integration modules and both integration docs.
|
|
48
|
-
- [ ] MCP tarball contains both bins, src, README; core tarball never ships
|
|
49
|
-
`integrations/`.
|
|
50
|
-
- [ ] Server `serverInfo.version` equals MCP package.json version.
|
|
51
|
-
- [ ] MCP README documents stdio-default + optional loopback-only HTTP.
|
|
52
|
-
- [ ] THIRD_PARTY_NOTICES covers the Model Context Protocol SDK.
|
|
53
|
-
- [ ] CHANGELOG entries present.
|
|
54
|
-
|
|
55
|
-
## Exact output-bound gates (post-PR #80)
|
|
56
|
-
|
|
57
|
-
- [ ] Output bounds measure the exact UTF-8 serialization transmitted
|
|
58
|
-
(pretty-printed included), not compact JSON.
|
|
59
|
-
- [ ] Compact-below/pretty-above regression covered by tests.
|
|
60
|
-
- [ ] UTF-8 byte-count regression covered by tests.
|
|
61
|
-
- [ ] `forgeloop_capabilities` complete result is bounded like command tools.
|
|
62
|
-
- [ ] Non-size serialization errors are rethrown, not mislabeled as overflow.
|
|
63
|
-
- [ ] Structured tool input is byte-bounded (`E_MCP_INPUT_TOO_LARGE`).
|
|
64
|
-
|
|
65
|
-
## Documentation gates
|
|
66
|
-
|
|
67
|
-
- [ ] Repository-wide documentation audit complete.
|
|
68
|
-
- [ ] Documentation manifest/index current.
|
|
69
|
-
- [ ] Generated references current (`docs:generate` leaves no diff).
|
|
70
|
-
- [ ] README / CHANGELOG current.
|
|
71
|
-
- [ ] MCP / Universal Integration docs current.
|
|
72
|
-
- [ ] Security docs current.
|
|
73
|
-
|
|
74
|
-
## Publication boundary
|
|
75
|
-
|
|
76
|
-
- [ ] Release identity verification passes.
|
|
77
|
-
- [ ] Publication of either package is separately authorized; this checklist
|
|
78
|
-
does not itself authorize npm publishing.
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
# ForgeLoop 1.6.1 release checklist
|
|
2
|
-
|
|
3
|
-
Preparation checklist for the `@cassiomc1/forgeloop` 1.6.1 release. It does not
|
|
4
|
-
authorize publication. Historical checklists:
|
|
5
|
-
[`RELEASE_CHECKLIST_1_5_MCP.md`](./RELEASE_CHECKLIST_1_5_MCP.md),
|
|
6
|
-
[`RELEASE_CHECKLIST_1_4.md`](./RELEASE_CHECKLIST_1_4.md).
|
|
7
|
-
|
|
8
|
-
## Version and contract identity
|
|
9
|
-
|
|
10
|
-
- [ ] Core package version is `1.6.1` in `package.json` and the lockfile root.
|
|
11
|
-
- [ ] ForgeLoop protocol version is `1`.
|
|
12
|
-
- [ ] Integration API version is `1`
|
|
13
|
-
(`FORGELOOP_INTEGRATION_API_VERSION`).
|
|
14
|
-
- [ ] Candidate version is absent from npm and the `v1.6.1` tag is absent from
|
|
15
|
-
origin before release preparation starts.
|
|
16
|
-
- [ ] `CHANGELOG.md` has a versioned `1.6.1` section with the actual release
|
|
17
|
-
date and an empty `Unreleased` section above it.
|
|
18
|
-
|
|
19
|
-
## Verification execution adapter contract (new in 1.6.x line)
|
|
20
|
-
|
|
21
|
-
- [ ] `src/core/verification-execution.js` defines the adapter boundary,
|
|
22
|
-
`VERIFICATION_ISOLATION_MODES`, and the two public error codes.
|
|
23
|
-
- [ ] `runtimeContext.verificationExecutionAdapter` and
|
|
24
|
-
`runtimeContext.verificationExecutionPolicy` are validated at context
|
|
25
|
-
creation and never accepted as CLI flags or command input.
|
|
26
|
-
- [ ] `createForgeLoopContext`, the isolation modes, and both error codes are
|
|
27
|
-
exported from `@cassiomc1/forgeloop/integration`.
|
|
28
|
-
- [ ] `protocol-info --json` advertises
|
|
29
|
-
`features.verificationExecutionIsolation` (version 1, adapter-backed,
|
|
30
|
-
modes enumerated, `protocolProjectRootSeparateFromExecutionCwd: true`).
|
|
31
|
-
|
|
32
|
-
## Isolation metadata invariants
|
|
33
|
-
|
|
34
|
-
- [ ] `NATIVE_PROJECT` requires `isolated: false` and
|
|
35
|
-
`liveProjectWritable: true`; it is never described as isolated.
|
|
36
|
-
- [ ] `PROJECT_ISOLATED` and `SYSTEM_ISOLATED` require `isolated: true` and
|
|
37
|
-
`liveProjectWritable: false`; `SYSTEM_ISOLATED` additionally requires
|
|
38
|
-
`networkPolicy: DENIED`.
|
|
39
|
-
- [ ] Contradictory isolation metadata is rejected with
|
|
40
|
-
`E_VERIFICATION_EXECUTION_INVALID` before evidence persistence.
|
|
41
|
-
- [ ] Isolated execution must use a cwd separate from the protocol project
|
|
42
|
-
root; violation fails closed with `E_VERIFICATION_EXECUTION_INVALID`.
|
|
43
|
-
- [ ] Unsatisfiable isolation policy fails closed with
|
|
44
|
-
`E_VERIFICATION_ISOLATION_UNAVAILABLE` and never falls back to the live
|
|
45
|
-
project.
|
|
46
|
-
- [ ] Execution records persist `executionKind`, `protocolProjectRoot`,
|
|
47
|
-
`executionIsolation`, and the `isolation` object per
|
|
48
|
-
`schemas/execution.schema.json`.
|
|
49
|
-
|
|
50
|
-
## Durable-action invariants
|
|
51
|
-
|
|
52
|
-
- [ ] Trusted `COMMITTED` reconciliation replays exactly once; reconciled
|
|
53
|
-
mirrors are corroborations, never second transitions.
|
|
54
|
-
- [ ] Action verification requires an independent passed execution covering the
|
|
55
|
-
action's exact immutable requirement.
|
|
56
|
-
- [ ] `REQUIRE_APPROVAL` authorizations bind approval fingerprints validated by
|
|
57
|
-
readiness and audit.
|
|
58
|
-
- [ ] Public provenance metadata matches behavior
|
|
59
|
-
(`CALLER_REPORTED` / `EXTERNAL_OBSERVED`).
|
|
60
|
-
|
|
61
|
-
## PoC evidence validation
|
|
62
|
-
|
|
63
|
-
- [ ] `npm run poc:evidence:verify` passes against committed evidence bundles.
|
|
64
|
-
- [ ] `npm run poc:evidence:test` passes.
|
|
65
|
-
- [ ] PoC docs (`poc/README.md`,
|
|
66
|
-
`poc/FORGELOOP_REAL_EXECUTION_POC.md`) match committed evidence paths,
|
|
67
|
-
manifests, and hashes.
|
|
68
|
-
|
|
69
|
-
## Documentation freshness
|
|
70
|
-
|
|
71
|
-
- [ ] `npm run docs:generate` leaves no diff (generated regions current).
|
|
72
|
-
- [ ] `npm run docs:generated:check` passes.
|
|
73
|
-
- [ ] `npm run docs:conformance` passes.
|
|
74
|
-
- [ ] `npm run docs:diagrams:check` passes (typed Archify source unchanged or
|
|
75
|
-
regenerated with receipt).
|
|
76
|
-
- [ ] `npm run docs:check` passes.
|
|
77
|
-
- [ ] Normative docs represent the post-`v1.6.0` verification execution
|
|
78
|
-
boundary without making a harness-specific backend normative.
|
|
79
|
-
- [ ] `DOCS_INDEX.md` points release maintainers to this checklist as current.
|
|
80
|
-
|
|
81
|
-
## Local validation gates
|
|
82
|
-
|
|
83
|
-
- [ ] `npm run dependency:policy` passes (runtime dependencies remain zero).
|
|
84
|
-
- [ ] `npm run lint` passes.
|
|
85
|
-
- [ ] `npm test` passes.
|
|
86
|
-
- [ ] `npm run coverage` passes.
|
|
87
|
-
- [ ] `npm run pack:check` passes.
|
|
88
|
-
- [ ] Python validators pass: `python3 -m unittest discover -s tests`,
|
|
89
|
-
`validate_markdown.py` (+ self-test), `validate_loop_system.py`
|
|
90
|
-
(+ self-test).
|
|
91
|
-
- [ ] `python3 scripts/scan_secrets.py` passes.
|
|
92
|
-
- [ ] `npm pack` tarball inspected: correct name/version, intended docs, no
|
|
93
|
-
secrets, no `.git`, no `.forgeloop` execution state.
|
|
94
|
-
|
|
95
|
-
## Protected-branch and PR gates
|
|
96
|
-
|
|
97
|
-
- [ ] Changes reach `main` only through a reviewed PR; `main-protection`
|
|
98
|
-
ruleset never bypassed.
|
|
99
|
-
- [ ] Required checks green: `audit`, `CodeQL`, `Verify generated Archify
|
|
100
|
-
diagram`, `validate (22)`, `tarball smoke (ubuntu-latest)`,
|
|
101
|
-
`dependency-review`; every other relevant check green.
|
|
102
|
-
- [ ] No unresolved review threads; PR merged without admin bypass.
|
|
103
|
-
|
|
104
|
-
## Publication boundary
|
|
105
|
-
|
|
106
|
-
- [ ] Post-merge `main` workflows green before tagging.
|
|
107
|
-
- [ ] npm candidate version and tag re-checked for collision immediately before
|
|
108
|
-
tagging.
|
|
109
|
-
- [ ] Annotated tag `v1.6.1` created on the exact validated `main` commit and
|
|
110
|
-
pushed once; never moved after publication.
|
|
111
|
-
- [ ] `npm-publish.yml` retains `contents: read` + `id-token: write`; no
|
|
112
|
-
`NPM_TOKEN`/`NODE_AUTH_TOKEN` is added anywhere.
|
|
113
|
-
- [ ] `Publish npm package` workflow succeeds (trusted OIDC publishing).
|
|
114
|
-
- [ ] `Release notes` workflow succeeds; GitHub Release is not draft or
|
|
115
|
-
prerelease and carries the checksum asset.
|
|
116
|
-
- [ ] npm registry reports the exact version with `gitHead` equal to the
|
|
117
|
-
release commit.
|
|
118
|
-
- [ ] `npm run release:identity` returns `RELEASE_IDENTITY_VALID` with every
|
|
119
|
-
individual check `ok`.
|
|
120
|
-
- [ ] Optional clean-install smoke test installs `@cassiomc1/forgeloop@1.6.1`
|
|
121
|
-
and `forgeloop --version` reports `1.6.1`.
|