Skip to content

Commit 67356ca

Browse files
committed
Add release contract tests for GameFoundryStudio - PR_26152_082-release-contract-tests
1 parent 532031b commit 67356ca

5 files changed

Lines changed: 1003 additions & 0 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Release Contract Tests Validation
2+
3+
PR: `PR_26152_082-release-contract-tests`
4+
5+
## Scope
6+
7+
- Added `src/shared/contracts/releaseContract.js`.
8+
- Added `tests/shared/ReleaseContract.test.mjs`.
9+
- Added `tests/fixtures/releases/release-scenarios.json`.
10+
- Added `docs/dev/specs/RELEASE_CONTRACT.md`.
11+
12+
No database, authentication, UI, CSS, HTML, runtime page, or samples changes were made.
13+
14+
## Contract Rules Validated
15+
16+
- Release requires owner.
17+
- Release requires project.
18+
- Release requires source manifest.
19+
- Release cannot bypass ownership, visibility, or permissions.
20+
- Published releases are immutable unless policy allows patching.
21+
- Retired releases remain historically referenceable.
22+
- Release version must be valid.
23+
- Release visibility must be valid.
24+
25+
## Validation Commands
26+
27+
- `node --check src/shared/contracts/releaseContract.js` - PASS
28+
- `node --check tests/shared/ReleaseContract.test.mjs` - PASS
29+
- `node tests/shared/ReleaseContract.test.mjs` - PASS
30+
- `node tests/shared/GameManifestContract.test.mjs` - PASS
31+
- `node tests/shared/ProjectContract.test.mjs` - PASS
32+
- `node tests/shared/ProjectWorkspaceRuntimeContract.test.mjs` - PASS
33+
- `node tests/shared/ToolStateContract.test.mjs` - PASS
34+
- `node tests/shared/IdentityPermissionsContract.test.mjs` - PASS
35+
- `$files = Get-ChildItem tests/shared/tools -Filter *.test.mjs | Sort-Object Name; foreach ($file in $files) { node $file.FullName; if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } }` - PASS, 36 tool contract tests ran
36+
- `git diff --name-only -- '*.css' '*.html'` - PASS, no output
37+
- `rg -n "\s+$" src/shared/contracts/releaseContract.js tests/shared/ReleaseContract.test.mjs tests/fixtures/releases/release-scenarios.json docs/dev/specs/RELEASE_CONTRACT.md` - PASS, no trailing whitespace
38+
- `git diff --cached --name-only` - PASS, no staged files
39+
40+
## Validation Lanes
41+
42+
- Lanes executed: contract validation for Release, Manifest, Project Type, Project Workspace, Project, Tool State, Tool contracts, and Identity/Permissions.
43+
- Lanes skipped: runtime, integration, engine, samples, and recovery/UAT because this PR does not change runtime behavior, handoff contracts, engine surfaces, samples, or recovery behavior.
44+
- Samples decision: SKIP because this PR is limited to contract/docs/test surfaces.
45+
- Playwright impacted: No. This PR is contract/docs/test only and does not change UI or browser runtime behavior.
46+
47+
## Expected PASS Behavior
48+
49+
- Valid Release contract records are accepted.
50+
- Missing owner, missing project, missing source manifest, invalid source manifest, invalid version, invalid visibility, and missing published timestamp are rejected.
51+
- Release source manifest references are validated against the Game Manifest reference shape.
52+
- Release access remains bound to Project and Identity/Permissions contracts.
53+
- Published releases cannot be edited unless policy allows patching.
54+
- Retired releases remain historically referenceable.
55+
56+
## Expected WARN Behavior
57+
58+
- No WARN behavior was observed in the targeted validation lane.

docs/dev/specs/RELEASE_CONTRACT.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Release Contract
2+
3+
## Status
4+
5+
This is a contract planning document for GameFoundryStudio Release behavior.
6+
7+
It defines required Release contract rules before database, authentication, UI, runtime, publishing, marketplace, or storage implementation begins.
8+
9+
This document does not authorize runtime changes, database implementation, authentication implementation, page changes, CSS changes, HTML changes, JavaScript changes, or schema migrations.
10+
11+
## Release Fields
12+
13+
Release records define:
14+
15+
- `releaseId`
16+
- `ownerId`
17+
- `projectId`
18+
- `sourceManifest`
19+
- `version`
20+
- `status`
21+
- `visibility`
22+
- `publishedAt`
23+
- `releaseNotes`
24+
25+
## Required Rules
26+
27+
- Release requires owner.
28+
- Release requires project.
29+
- Release requires source manifest.
30+
- Release cannot bypass ownership, visibility, or permissions.
31+
- Published releases are immutable unless policy allows patching.
32+
- Retired releases remain historically referenceable.
33+
- Release version must be valid.
34+
- Release visibility must be valid.
35+
36+
## Source Manifest Reference
37+
38+
Release source manifest references must identify:
39+
40+
- `manifestId`
41+
- optional positive `version`
42+
- optional `exportFormat = game-manifest-json`
43+
44+
Source manifest references point to the Game Manifest contract. They do not copy the full manifest database record into the Release contract.
45+
46+
## Status
47+
48+
Approved first-pass Release statuses:
49+
50+
- `draft`
51+
- `published`
52+
- `retired`
53+
54+
Draft releases may be edited according to Project permissions.
55+
56+
Published releases are immutable unless policy explicitly allows patching.
57+
58+
Retired releases remain historically referenceable and should not silently lose their source manifest, version, visibility, published timestamp, or release notes.
59+
60+
## Visibility And Permissions Boundary
61+
62+
Release visibility uses the approved Project visibility states:
63+
64+
- `private`
65+
- `project`
66+
- `unlisted`
67+
- `public`
68+
69+
Release visibility does not grant edit permission.
70+
71+
Release access remains bound by Project ownership, Project visibility, Project permissions, Identity/Permissions rules, and explicit policy gates for patching.
72+
73+
## Database Boundary
74+
75+
The database remains the working system for persisted Project, Game Manifest, and Release records.
76+
77+
Release export metadata can be portable, but it must not carry database owner ids, project ids, credentials, permissions internals, moderation internals, or database-only audit state.
78+
79+
## Non-Goals
80+
81+
This document does not:
82+
83+
- define SQL schema
84+
- define API routes
85+
- implement release persistence
86+
- implement authentication
87+
- implement authorization checks
88+
- implement Project Workspace storage
89+
- implement runtime release loading
90+
- implement publishing
91+
- implement marketplace behavior
92+
- change runtime behavior
93+
- change CSS, HTML, JavaScript, TypeScript, or JSON files outside the contract/test scope

0 commit comments

Comments
 (0)