Skip to content

v1.0 RC Test Plan

FieldValue
ProductPlystra
Versionv0.0.1
Document TypeRelease Candidate test plan
ScopeStable Self-Hosted Core
StatusRC execution plan

This document defines the test plan for Plystra v1.0 Release Candidate.

The purpose is to validate that the v1.0 Core can be installed, migrated, run, tested, and used from a clean environment.

The test plan focuses on:

clean clone usability
Docker self-hosted baseline
migration correctness
Ent drift correctness
authorization correctness
audit correctness
Resource Registry correctness
Core CRUD API correctness
OpenAPI correctness
request ID canonical envelope
release documentation correctness
Bearer user session protection for sensitive APIs
disabled-by-default data and metrics surfaces

This test plan should be executed before tagging:

v0.0.1

It should be executed again before final:

v1.0.0

Run tests against at least the following environments.

ComponentRequirement
OSmacOS or Linux
GoProject-supported version
DockerInstalled
Docker ComposeInstalled
PostgreSQLVia Docker Compose
NetworkLocalhost
ComponentRequirement
OSUbuntu LTS recommended
GoProject-supported version
DockerInstalled
Docker ComposeInstalled
PostgreSQLVia Docker Compose
StateClean clone, no local cache assumption
ComponentRequirement
Go testsRequired
PostgreSQL integration testsRequired
Migration apply testsRequired
Ent checkRequired
OpenAPI checkRecommended
Smoke testsRecommended

The RC must include Finance Reviewer demo data.

user_alice
user_bob
space_acme
finance
finance.apac
finance.emea
legal
legal.emea
member_finance_reviewer
member_invoice_creator
um_alice_finance_reviewer active delegate
um_bob_finance_reviewer active login
um_alice_finance_reviewer_revoked revoked delegate
finance_approver
invoice:approve:group_tree
invoice_001 under finance.apac
invoice_002 under legal.emea

Execute the RC test plan in this order:

1. Clean clone test
2. Environment configuration test
3. Docker Compose startup test
4. Migration test
5. Ent drift test
6. Doctor test
7. Unit test suite
8. PostgreSQL integration test suite
9. Health endpoint smoke test
10. Authz smoke test
11. Resource Registry smoke test
12. Core CRUD smoke test
13. AuditLog smoke test
14. OpenAPI verification
15. request ID canonical envelope verification
16. Production safety verification
17. Documentation verification
18. RC sign-off

Prove that a developer can start from a clean clone and follow README instructions.

Terminal window
git clone https://github.com/plystra/plystra.git
cd plystra
cp .env.example .env

Then follow the README exactly.

  • Repository clones successfully.
  • .env.example is present.
  • README instructions are accurate.
  • No undocumented secrets are required.
  • No local maintainer-only files are required.
  • README references missing commands.
  • README references missing files.
  • Startup requires undocumented environment variables.
  • Demo requires local state not included in repository.

Prove the self-hosted baseline works.

Terminal window
docker compose down -v
docker compose up -d
docker compose ps
docker compose logs --tail=100
  • PostgreSQL starts.
  • Plystra Core starts if compose includes the service.
  • Containers remain running.
  • Logs do not contain fatal startup errors.
  • Database settings match .env.example.
Terminal window
docker compose restart
docker compose ps

Expected:

  • Restart works.
  • Data volume remains intact.
  • Core reconnects to PostgreSQL.

Prove migrations apply cleanly.

Terminal window
docker compose down -v
docker compose up -d postgres
plystractl migrate up
plystractl migrate verify
  • All migrations apply.
  • Migration status is recorded.
  • Migration verification passes.
  • Schema is ready for Core.

If previous release schema is available:

Terminal window
# Restore or initialize previous release schema
plystractl migrate up
plystractl migrate verify

Expected:

  • Existing schema upgrades successfully.
  • No destructive migration runs without explicit approval.
  • Core starts after upgrade.
  • Migration applies only on the maintainer’s database.
  • Migration fails on empty DB.
  • Migration fails from previous release.
  • Migration verification reports drift.

Prove Ent schema, generated code, and migrations are synchronized.

Terminal window
plystractl ent check

If project uses codegen check:

Terminal window
go generate ./ent
git diff --exit-code
  • Ent drift is zero.
  • Generated code is up to date.
  • Migrations match Ent schema.
  • Generated code changes after go generate.
  • Migration diff appears after schema check.
  • plystractl ent check reports drift.

Prove operational diagnostics work.

Terminal window
plystractl doctor

Doctor reports:

configuration status
database connectivity
migration status
schema readiness
environment mode
service readiness
  • Doctor passes when database is unreachable.
  • Doctor passes with invalid schema.
  • Doctor output lacks actionable error messages.

Prove core logic correctness.

Terminal window
go test ./...
scope resolver
deny code mapping
trace builder
same-space validation
UserMember status validation
UserMember expiration validation
group_tree path matching
union semantics
AuditLog snapshot builder
request envelope formatting
  • All unit tests pass.
  • No flaky tests.
  • No tests require external services unless marked integration.

Prove Core works with real PostgreSQL.

Terminal window
PLYSTRA_DATABASE_URL=postgres://... go test ./...

or project-specific integration command.

migrations
Ent store
LoadAuthorizationContext
authz/check against database
authz/explain against database
AuditLog writes
Resource Registry registration
CRUD APIs
same-space constraints
revoked UserMember
expired UserMember
  • Tests pass against PostgreSQL.
  • Tests do not depend on local leftover state.
  • Tests clean up after themselves or use isolated DB.

Prove operational endpoints work.

Terminal window
curl -s http://localhost:8080/api/v1/health
curl -s http://localhost:8080/api/v1/ready
curl -s http://localhost:8080/api/v1/version

Canonical operational routes:

Terminal window
curl -s http://localhost:8080/api/v1/health
curl -s http://localhost:8080/api/v1/ready
curl -s http://localhost:8080/api/v1/version
  • /health returns service health.
  • /ready checks database and migration readiness.
  • /version returns version and schema information.
  • Legacy paths remain compatible if promised.

Prove authz/check and authz/explain work.

Expected:

decision = allow
deny_code = null

Expected:

decision = deny
deny_code = SCOPE_OUT_OF_BOUNDS

Expected:

decision = allow
actor_user_id = user_bob
actor_member_id = member_finance_reviewer

Expected:

decision = deny
deny_code = USER_MEMBER_REVOKED

For each case, verify:

trace_version exists
actor snapshot exists
space snapshot exists
target resource snapshot exists
matched_candidates exists
scope_check exists
reason exists
audit context exists if audit is written

Prove newly registered Resources can enter the authorization chain.

  1. Register a new Resource type or Resource record.
  2. Attach it to a Space.
  3. Attach it to a Group if scope requires it.
  4. Attach owner Member if self scope requires it.
  5. Create or reuse Permission.
  6. Create RolePermission.
  7. Create MemberRole.
  8. Call authz/check.
  • Resource is created.
  • Resource is queryable.
  • Resource passes same-space validation.
  • Resource can be used by authz/check.
  • Resource can be used by authz/explain.
  • Resource operations are auditable.

Prove all major Core APIs work.

Run create/read/list/update/status workflow for:

Users
Spaces
Groups
Members
UserMembers
Roles
Permissions
MemberRoles
RolePermissions
Resources

Run read/list/filter workflow for:

AuditLogs
  • disable
  • restore
  • revoke
  • archive
  • validation error
  • same-space rejection
  • not found
  • request ID in response
  • All major CRUD APIs return expected status codes.
  • All validation errors use standard envelope.
  • AuditLog does not expose update/delete.
  • Generated Ent internals are not leaked.

Prove AuditLog correctness.

  1. Run allow authz check.
  2. Run deny authz check.
  3. Query AuditLogs by decision.
  4. Query AuditLogs by deny code.
  5. Query AuditLogs by actor.
  6. Query AuditLogs by resource.
  7. Query AuditLogs by request ID.
  8. Inspect trace snapshot.
  • Allow decision is logged.
  • Deny decision is logged.
  • Trace contains snapshots, not only IDs.
  • Trace includes matched candidates.
  • Trace includes deny code for deny decisions.
  • AuditLog update is unavailable or rejected.
  • AuditLog delete is unavailable or rejected.

Prove API docs match implementation.

  • All routes implemented in v1.0 are documented.
  • All documented routes exist.
  • Request schemas match accepted payloads.
  • Response schemas match actual responses.
  • Error envelope is documented.
  • Canonical top-level request_id behavior is documented.
  • Deny codes are documented or referenced.
  • Authz trace schema is documented.
  • Generate client from OpenAPI.
  • Run basic generated client smoke test.
  • Compare route registry against OpenAPI paths.

Prove every API response carries one canonical top-level request ID.

Responses should include:

{
"request_id": "req_..."
}
  • Top-level request_id exists.
  • meta.request_id is not returned.
  • OpenAPI documents the top-level field only.
  • Structured logs and AuditLog records can be correlated through the same request ID.

Prove production mode blocks unsafe Ent auto apply behavior.

Run production mode command that would apply Ent schema automatically.

  • Command is rejected.
  • Error message explains why.
  • Error message directs user to versioned migrations.
  • Documentation explains the behavior.

Production must not silently mutate schema through Ent auto migration.


Prove users can operate v1.0 from public docs.

README
Quickstart
v1.0 readiness checklist
v1.0 RC test plan
v1.0 release notes
request ID canonical envelope
migration and upgrade guide
OpenAPI v1.0
Ent integration guideline
  • Commands are accurate.
  • File paths are accurate.
  • Environment variables are accurate.
  • Non-goals are clear.
  • Optional components are clearly marked optional.
  • v1.0 blocking scope is clear.
  • Production migration behavior is documented.
  • request ID canonical envelope is documented.

Before tagging, fill this out.

AreaResultNotes
Clean clone
Docker Compose
Migration empty DB
Migration upgrade DB
Ent drift
Doctor
Unit tests
PostgreSQL integration tests
Health endpoints
Authz check/explain
Resource Registry
CRUD smoke tests
AuditLog
OpenAPI
request ID canonical envelope
Production safety
Docs

Tag v0.0.1 only if:

all blocking tests pass
all release docs are committed
OpenAPI matches implementation
no known migration blocker exists
no known authz correctness blocker exists
no known AuditLog correctness blocker exists
no known clean install blocker exists

If any blocker remains, do not tag RC.