Planwright advances through version gates. Each gate requires a full codebase pass for security, correctness, documentation consistency, compatibility claims and accidental artefacts before the next gate starts.
Planwright's product thesis is both simple and stable; infrastructure conversion is a migration and evidence problem, not a syntax conversion problem.
The project should remain engine-first:
typed plan / imports / CLI / local web / future TUI
-> Planwright Engine
-> graph, provenance, validation, analysis and reports
-> generated IaC, diagrams, SARIF, deployment packs and review evidence
Every roadmap gate must preserve these rules:
- the engine is the product; interfaces must not grow private infrastructure logic
- compatibility is loss-aware; unsupported, ambiguous and unsafe constructs must be reported
- local-first is the default; hosted pages are demos only unless governance explicitly changes that boundary
- review comes before deploy; Planwright must not become click-to-mutate cloud tooling
- compatibility is a matrix; no universal lossless-conversion claims
- accessibility and usability are correctness concerns; diagnostics must explain what happened, why it matters and how to fix it
- no cloud credentials are read unless a future read-only scan gate explicitly implements that with account and region confirmation
- no telemetry, remote scripts, remote fonts or hosted persistence by default
Planwright uses compatibility levels rather than broad slogans:
| Level | Meaning |
|---|---|
| 0 | Preserved only as original source |
| 1 | Syntax parsed |
| 2 | Resource inventory extracted |
| 3 | Relationships inferred |
| 4 | Lowered into Planwright graph |
| 5 | Generated into another format |
| 6 | Round-trip tested with fixtures |
| 7 | Deployability tested in a sandbox |
| 8 | Production-profile validated |
This table describes the checked-in implementation. Future rows below are targets, not current claims.
| Format or surface | Import | Analyse | Generate | Round-trip | Deploy tested |
|---|---|---|---|---|---|
| Planwright YAML | Level 4 for one AWS web application pattern | Basic validation, security and cost notes | Level 5 review artefacts for Terraform/OpenTofu, Mermaid and Markdown reports | No | No |
| Planwright graph JSON | Level 1 structural schema validation | JSON Schema plus semantic graph validation | Schema export and graph diff input | No | No |
| Planwright graph diff | Local graph JSON comparison | Added, removed and changed graph elements plus selected risk-increasing findings | Markdown diff review | No | No |
| Planwright policy profiles | Local graph JSON only | Built-in static profile checks | Markdown and SARIF | No | No |
| Terraform plan JSON | Level 2 review-only input | Destructive change, replacement, public RDS and unknown-value findings | Markdown and SARIF review | No | No |
| CloudFormation | Level 4 for a small supported subset | Inventory and relationship notes | No generator yet | No | No |
| SAM | Level 4 for a small supported subset | Inventory and relationship notes | No generator yet | No | No |
| Kubernetes YAML | Level 4 for a rendered-manifest subset | Workload, Service, Ingress, Gateway API and Cilium inventory notes | No generator yet | No | No |
| AWS scan bundle | Level 4 from local JSON bundle files | Selected inventory and relationship inference | No live scan yet | No | No |
planwright.graph.v1 remains the centre of the product. It must grow deliberately enough to model:
- resources, relationships and deployment dependencies
- network flows, routes, exposure and trust boundaries
- IAM permissions, assume-role paths, pass-role risks and secret access
- accounts, regions, VPCs, subnets, namespaces and ownership metadata
- data reads, writes, publishing, subscriptions and encryption edges
- cost surfaces, lifecycle behaviour, backup evidence and observability evidence
- source preservation, provenance and unsupported-source annotations
- validation diagnostics with severity, resource, source location, explanation, fix, confidence and auto-fix status where possible
Core node families should grow in this order:
- AWS scopes, VPCs, subnets, security groups and route surfaces
- compute resources: EC2, ECS, Lambda, Kubernetes workloads and Docker Compose services
- edge and routing resources: ALB, NLB, API Gateway, CloudFront, Kubernetes Service, Ingress, Gateway API, Caddy reverse proxies and target groups
- data resources: RDS, DynamoDB, S3, ElastiCache, EFS, SQS, SNS and Kinesis
- identity resources: IAM roles, policies, users, groups, KMS keys, Secrets Manager secrets, SSM parameters and Kubernetes RBAC objects
- observability resources: CloudWatch log groups, alarms, CloudTrail trails, X-Ray, Prometheus targets, Grafana dashboards and OpenTelemetry collectors
- security resources: WAF, GuardDuty, Security Hub, AWS Config, Kubernetes NetworkPolicy, Cilium policies and future policy-pack artefacts
Core edge families should grow in this order:
network.allow,network.routeandnetwork.denyiam.allow,iam.assume_roleandiam.pass_roledata.reads_from,data.writes_to,publishes_toandsubscribes_tologs_to,emits_metric_to,backs_up_toandencrypts_withdepends_on,runs_as,exposes,protects,managed_byandgenerated_from
Goal: prove the engine shape.
Scope:
- Go CLI entrypoint
planwright.v1typed plan parserplanwright.graph.v1graph model- basic validation
- basic diagnostics
- one AWS web application example
Explicitly excluded:
- Terraform generation
- imports
- deployment packs
- SARIF
- local web UI
- TUI
- live cloud scans
Status: implemented and audit-gated.
Goal: generate reviewable artefacts for one AWS web application pattern.
Scope:
- Terraform/OpenTofu-oriented review files
- Mermaid diagram output
- security report
- cost notes
- deployability report
- cleanup guide
- assumptions report
- directory-based pack output
Resource subset:
- VPC-oriented generated shape
- public and private subnet intent
- security groups
- ALB, listener and target group intent
- ECS service intent
- RDS Postgres intent
- CloudWatch log group intent
- limited IAM role intent
Checks:
- no public RDS
- no open SSH/RDP
- security group and network-edge consistency where represented
- region required
- tags and ownership notes where represented
- NAT Gateway, ALB, RDS and fixed-cost warnings
- hardcoded secret-looking value warnings
- cleanup and destroy guidance
Explicitly excluded:
- Terraform/OpenTofu execution
- deployability proof
- zip archive output
- imports
- SARIF
- live cloud scans
Status: implemented and audit-gated.
Goal: import a CloudFormation/SAM subset with loss reports.
Scope:
- CloudFormation YAML/JSON subset import
- SAM subset import
- intrinsic-function tracking for supported relationships
- resource inventory extraction
- graph JSON output
- Markdown loss report output
- examples for CloudFormation and SAM import
Resource subset:
AWS::EC2::VPCAWS::EC2::SubnetAWS::EC2::SecurityGroupAWS::ElasticLoadBalancingV2::LoadBalancerAWS::RDS::DBInstanceAWS::S3::BucketAWS::IAM::RoleAWS::Serverless::FunctionAWS::Serverless::HttpApiAWS::Serverless::SimpleTable
Loss report categories:
- preserved
- normalised
- inferred
- ambiguous
- unsupported
- unsafe
- manual review required
Explicitly excluded:
- complete CloudFormation/SAM coverage
- CloudFormation/SAM generation
- Terraform/OpenTofu plan import
- Kubernetes import
- SARIF
- live cloud scans
Status: implemented and audit-gated.
Goal: review Terraform plan JSON and emit human and machine-readable findings.
Scope:
- Terraform plan JSON review from local files
- destructive-change findings
- replacement findings
- public RDS findings
- unknown security-sensitive value findings
- Markdown review output
- SARIF 2.1.0 output
- SARIF schema validation in CI or release verification
Explicitly excluded:
- Terraform state import
- Terraform HCL/module evaluation
- Terraform provider schema ingestion
- Terraform/OpenTofu execution
- graph lowering from Terraform plan JSON
- cloud account calls
- GitHub Action packaging
Status: implemented and audit-gated.
Goal: provide a local-only browser workbench over the existing engine.
Scope:
planwright serve [project-dir] [--addr 127.0.0.1:5786]- loopback-only bind validation
- Host allowlist enforcement
- security headers for static and API responses
- static embedded workbench UI
- in-memory browser plan validation
- graph, diagnostics, report, Terraform and Mermaid previews
- keyboard-accessible editor and tables for the current surface
Current boundary:
- this is a text-and-table workbench, not the future drag-and-drop visual planner
- no canvas editor
- no resource-card graph editor
Accessibility target:
- keyboard-first flows
- no drag-only workflow
- focus-visible states
- no colour-only severity indication
- reduced motion compatibility
- text reports and copyable commands
Explicitly excluded:
- hosted demo
- drag-and-drop visual canvas editing
- resource-card graph planning
- browser deployment
- browser file writes
- credential loading
- cloud API calls
- TUI
- GitHub Action packaging
Status: implemented and audit-gated.
Goal: import a rendered Kubernetes manifest subset with Gateway API and Cilium policy inventory.
Scope:
planwright import k8s <manifest-path-or-dir> --out <graph.json> --loss-report <loss.md>- rendered YAML/JSON manifest parsing from explicit local files or direct manifest directories
- Kubernetes workload, Service, Ingress, NetworkPolicy, ConfigMap and Secret inventory
- Secret metadata and key-name recording without Secret value lowering
- Gateway API Gateway and route inventory
- Service selector, Ingress backend and Gateway API backend relationship inference
- CiliumNetworkPolicy and CiliumClusterwideNetworkPolicy inventory with semantic loss notes
- Markdown loss reports for unsupported, ambiguous and deliberately redacted constructs
Explicitly excluded:
- live Kubernetes cluster scans
kubectlexecution- Helm template evaluation
- Kustomize execution
- Kubernetes manifest generation
- full Kubernetes NetworkPolicy semantics
- full Cilium policy semantics
- Secret value decoding or display
- deployment or mutation
Status: implemented and audit-gated.
Goal: import a local AWS CLI JSON scan bundle without adding live credentialed AWS calls.
Scope:
planwright import awsscan <bundle-dir> --out <graph.json> --loss-report <loss.md>- local directory reading for selected AWS CLI JSON outputs
- VPC, subnet, security group, EC2, RDS, S3, Lambda and ELBv2 inventory extraction
- public security-group ingress inference for tcp/udp rules with one concrete port
- selected dependency inference from VPC, subnet and security-group IDs
- conservative STS identity handling without lowering ARN or UserId values
- preserved-only reporting for unknown JSON files in the bundle
Explicitly excluded:
- live AWS account scans
- AWS SDK integration
- AWS CLI execution
- credential loading
- IAM policy analysis
- drift proof
- deployability proof
- infrastructure mutation
Status: implemented and audit-gated.
Goal: compare two local Planwright graph JSON files and make risk-increasing architecture changes visible.
Scope:
planwright diff <old.graph.json> <new.graph.json> --out <review.md>- safe local graph JSON file loading
- graph validation before diff output
- deterministic added, removed and changed node reporting
- deterministic added and removed edge reporting
- Markdown graph diff review output
- findings for new public database exposure
- findings for new internet-facing network paths including SSH and RDP
Explicitly excluded:
- live cloud drift proof
- AWS SDK integration
- AWS CLI execution
- Kubernetes API calls
- Terraform state import
- Terraform plan comparison to graph
- automatic safety decisions for deployment
- infrastructure mutation
Status: implemented and audit-gated.
Goal: make planwright.graph.v1 structurally reviewable outside Planwright while preserving semantic graph validation.
Scope:
- embedded JSON Schema 2020-12 for
planwright.graph.v1 planwright schema graph --out <schema.json>planwright validate-graph <planwright.graph.json>- structural validation before semantic graph validation
- schema checks for required graph, node and edge fields
- schema checks for network protocol values and port ranges
- documentation of the schema boundary and non-goals
Explicitly excluded:
- v1.0 schema compatibility policy
- automatic migration between graph schema versions
- graph schema generation from Go types
- live drift proof
- deployment validation
- broader graph taxonomy completion
Status: implemented and audit-gated.
Goal: review local Planwright graph JSON against small built-in policy profiles.
Scope:
planwright policy profilesplanwright policy graph <planwright.graph.json> --profile <profile> --out <policy.md> --sarif <policy.sarif>- built-in
lab,small-businessandproductionprofiles - local graph JSON validation before policy evaluation
- policy findings for public databases and internet-facing SSH/RDP
- database backup evidence checks for stricter profiles
- production observability and lab-profile metadata notes
- Markdown policy profile review output
- SARIF 2.1.0 policy finding output
Explicitly excluded:
- custom policy packs
- OPA/Rego integration
- Conftest-compatible bundles
- organisation-specific policy inheritance
- compliance certification
- live cloud or Kubernetes checks
- automatic deployment safety decisions
Status: implemented and audit-gated.
Goal: make repository checks broad enough for release, security and documentation hygiene while enforcing Planwright's documentation style.
Scope:
- reusable GitHub Actions workflows
- pinned checkout and Go setup actions
- Linux runner hardening on CI jobs
- build, cross-platform build, test, race test, lint, module hygiene, static analysis and vulnerability jobs
- action pin drift checks
- file-header checks
- script-quality checks for GitHub helper scripts
- CodeQL and Scorecards workflows
- workflow validation with actionlint
- release verification, prepare-release and release workflow metadata
- Apache-2.0 licence metadata, AUTHORS and CONTRIBUTORS
- local documentation style checker
- British-English and spelling checks with cspell
- documentation style rules for bullet-list spacing, code-block spacing, comma-before-
butand simple comma-before-and
Explicitly excluded:
- proof that a release workflow has published artefacts
- package publishing
- hosted deployment
- proof that CI covers every possible security or correctness issue
Status: implemented and audit-gated.
Goal: make the project consistently Planwright, reduce root clutter, sharpen the roadmap and harden the current local engine.
Scope:
- make
repo/planwrightthe canonical repository path - rename CLI command, module path, schema names, examples, docs, diagnostics and generated artefact names
- remove AI planning artefacts while retaining
AGENTS.md - minimise root files where GitHub and project conventions still work
- add a changelog
- fill the roadmap with all planned gates from the product plan
- make the local web UI square, dark and pure-black by default
- harden
.gitignoreand project metadata - centralise runtime version metadata
- run a full codebase pass for security, correctness, readability and maturity before continuing
Explicitly excluded:
- changing the Apache-2.0 licence
- hiding repository maturity gaps
- adding live cloud scans
- adding deployment execution
- publishing a release
Status: implemented and audit-gated.
Goal: make Planwright understandable, runnable and reviewable in under five minutes.
Strategic rule:
- do not expand the feature surface unless the work directly improves the proof path
- do not add another importer, generator or interface to look broader
- make the existing engine easier to inspect, verify and explain
- keep compatibility claims brutally tied to checked fixtures and loss evidence
Scope:
- better README demo flow
- one polished
examples/aws-webapp-basicwalkthrough - generated deployment pack walkthrough
- real CLI transcript snippets from checked commands
- Mermaid diagram preview or maintained screenshot only if the verification path is clear
- one companion bad-example path such as public database exposure if it improves the proof story
- clearer “what Planwright is not” section
- generated evidence examples for validation, security notes, cost notes, Mermaid and pack layout
- golden tests or fixture checks for the reports and generated artefacts used in public docs
- documentation that explains why the local web workbench is not the future drag-and-drop canvas
Exit criteria:
- a new user can install or build Planwright, run the canonical example and inspect generated evidence without guessing the command order
- the canonical example has documented input, commands, expected outputs and limits
- generated examples used in documentation are either checked by tests or clearly marked as illustrative
- the README explains the current proof path before listing the full command surface
- the docs state non-goals plainly enough that Planwright is not mistaken for a one-click deployer, universal converter, compliance tool or live cloud scanner
- release notes describe usability and evidence improvements rather than pretending this is a broad compatibility expansion
Explicitly excluded:
- new import families
- new cloud providers
- live AWS calls
- credential loading
- drag-and-drop GUI expansion
- TUI work
- custom policy packs
- OPA/Rego integration
- plugin SDK work
- cost-estimation precision claims
- compliance language
- deployment execution
Goal: make compatibility claims testable before adding more broad surface area.
Scope:
- fixture metadata schema for supported source format, command surface, expected compatibility level and expected loss categories
- fixture runner for importers, generators, reports, graph validation, graph diff and policy review
- golden tests for existing Terraform/OpenTofu-oriented generated files, CloudFormation import, SAM import, Kubernetes/Gateway/Cilium import, AWS scan bundle import, Mermaid output, Markdown reports and SARIF output where those paths already exist
- canonical
aws-webapp-basicfixture covering validation, graph lowering, security report, cost notes, Mermaid output, Terraform/OpenTofu-oriented output and pack output - companion public-database fixture covering risk reporting and Terraform/OpenTofu generator refusal
- malformed input fixtures for every current local file input surface
- unsupported construct fixtures for CloudFormation, SAM, Kubernetes/Gateway/Cilium and AWS scan bundle import paths
- lossy conversion fixtures proving that preserved, normalised, inferred, ambiguous, unsupported, unsafe and manual-review-required categories remain visible
- release-evidence checks for GitHub artefact attestations and release-attached SLSA provenance as
planwright.intoto.jsonl - public compatibility matrix generated or checked from fixture metadata
- deliberate golden-update workflow requiring an explicit update flag or environment variable
- documentation for adding fixtures, updating golden outputs and interpreting compatibility levels
- ADR for fixture-backed compatibility claims
Exit criteria:
- every current compatibility matrix row is backed by at least one fixture or explicitly marked as documentation-only
- every public proof-path output used in the README or example docs is fixture-backed or clearly marked as illustrative
- unsupported, ambiguous and unsafe fixture cases produce visible loss evidence
- release evidence docs distinguish OpenPGP checksum signatures, GitHub artefact attestations and release-attached SLSA provenance
- no compatibility level can be raised without a fixture metadata update
- golden outputs are deterministic across repeated test runs
- SARIF outputs used in fixtures validate against the supported SARIF schema
- fixture documentation explains when golden outputs may be updated and what review is required
Explicitly excluded:
- broad service coverage without fixtures
- new import families
- new generators
- live cloud scans
- credential loading
- deployability testing
- round-trip claims unless a fixture proves the claimed round trip
- invisible compatibility claims in docs
- retroactive changes to already-published release assets
Status: implemented; final release verification pending.
Goal: make Terraform/OpenTofu compatibility more than plan-review evidence without taking on provider schema complexity too early.
Scope:
terraform show -jsonstate import from local files- OpenTofu-compatible state import where the JSON shape matches supported fields
- resource inventory extraction from state JSON
- sensitive value detection and redaction from state values where sensitivity metadata is available
- unsupported provider/resource reporting
- malformed, empty, sensitive and unsupported state fixtures
- Markdown loss report output
- graph JSON output only for the supported subset if deterministic node identity is ready; otherwise inventory and loss report only
- compatibility matrix updates backed by fixtures
Exit criteria:
- Terraform and OpenTofu state fixtures cover empty state, malformed JSON, unsupported provider resources, sensitive attributes and a small supported AWS subset
- sensitive values are never printed in reports, graph properties or diagnostics
- state import does not evaluate HCL, execute Terraform/OpenTofu or load provider plugins
- compatibility docs state the boundary between state inventory, graph lowering and deployability
Explicitly excluded:
- Terraform HCL/module evaluation
- provider schema ingestion
- provider plugin execution
- Terraform/OpenTofu apply
- Terraform/OpenTofu plan comparison to graph
- automatic import-block generation
- live cloud account calls
Status: in progress; local inventory and loss-report review implemented for the first state JSON slice.
Goal: ingest provider schema JSON as local evidence so sensitivity, unsupported attributes and resource-shape ambiguity can be reported more accurately.
Scope:
- local
terraform providers schema -jsoninput - OpenTofu-compatible provider schema input where the JSON shape matches supported fields
- provider/resource/attribute inventory extraction
- sensitivity metadata preservation
- unsupported resource and attribute reporting
- provider schema compatibility report
- fixtures for missing schema, malformed schema, unsupported provider, sensitive attributes and supported AWS resource attributes
- shared Terraform/OpenTofu JSON helpers where the state and schema shapes are equivalent
- documentation explaining that schema ingestion is evidence, not provider execution
Exit criteria:
- provider schema fixtures prove that sensitivity metadata is preserved in reports
- provider schema ingestion never executes provider plugins
- missing or incomplete schema data is treated as unknown rather than safe
- state and provider-schema paths share code where the supported JSON shape is equivalent
- compatibility claims distinguish state import, schema evidence and graph lowering
Explicitly excluded:
- provider plugin execution
- downloading providers
- Terraform/OpenTofu init
- HCL expression evaluation
- complete provider coverage
- automatic remediation
- deployability proof
Goal: lower supported Terraform/OpenTofu plan and state resources into planwright.graph.v1.
Scope:
- supported AWS resource mapping from Terraform/OpenTofu plan JSON and state JSON into graph nodes
- selected relationship inference from IDs, references and security group rules
- destructive-change graph annotations where plan JSON contains replacement or delete actions
- prior-state and planned-value comparison where both are present
- loss and confidence reporting for unknown, computed, sensitive and unsupported values
- provider-schema-assisted reporting where schema evidence is available
- Markdown and SARIF review improvements tied to stable rule IDs
- graph fixtures with deterministic node and edge IDs for the supported AWS subset
- compatibility matrix updates backed by fixtures
Exit criteria:
- supported AWS resources lower into graph fixtures with deterministic node and edge IDs
- sensitive, unknown and computed values are never silently treated as known safe values
- graph lowering has loss reports for unsupported provider resources and attributes
- destructive, replacement and public-exposure findings remain visible after lowering
- plan, state and schema evidence boundaries are documented separately
- no Terraform/OpenTofu compatibility level is raised without fixture evidence
Explicitly excluded:
- lossless Terraform-to-Planwright conversion
- direct Terraform HCL module execution
- provider-specific coverage beyond declared support
- provider plugin execution
- Terraform/OpenTofu apply
- automatic import-block generation
- deployability proof
Goal: make the pack a business-credible evidence artefact.
Scope:
planwright.pack.v1manifest stability- optional zip output
- source preservation folder
- generated Terraform/OpenTofu, CloudFormation/SAM, Kubernetes and diagram folders as available
- reports folder with README, compatibility, loss, security, cost, deployability, cleanup, assumptions, threat model and runbook notes
- diagrams folder for Mermaid, future D2 and future Graphviz
- scripts folder for identity checks, plan commands, verification and destroy guidance
- manifest file hashes and generated hash list
- deterministic pack fixtures for the canonical AWS web application proof path
- source preservation rules for redacted and unsupported input sources
- pack documentation explaining what is evidence, what is generated output and what still requires human review
Exit criteria:
- pack manifest has a tested
planwright.pack.v1shape - pack output is deterministic for the same input
- source preservation never stores credentials or secret values that Planwright has redacted
- generated scripts are review aids only and are never run by the pack command
- every generated folder included in a pack is backed by the current compatibility matrix
- pack documentation is clear enough that the pack is not mistaken for a deployable artefact
Explicitly excluded:
- storing secrets
- executing generated scripts
- claiming deployability without sandbox evidence
- making zip archives the only pack format
- live cloud scans
- cloud mutation
Goal: make examples teachable and reviewable using real engine output.
Scope:
examples/aws-webapp-basicexamples/aws-webapp-bad-public-dbexamples/aws-serverless-sam-importexamples/terraform-plan-risk-reviewexamples/terraform-state-inventoryexamples/cloudformation-to-terraform-loss-reportexamples/kubernetes-gateway-basicexamples/aws-scan-bundle-basicexamples/small-business-web-stackexamples/student-lab-low-cost- expected findings for each example
- generated outputs and reports for examples where checked-in output is justified
- static documentation site content sourced from checked-in docs
- screenshots only where maintained by an explicit verification process
- fixture-backed example index
- documentation explaining how each example maps to the compatibility matrix
Each example must document:
- what it creates or represents
- what it does not create
- cost notes
- public and private surfaces
- permissions required
- verification steps
- destroy guidance
- what Planwright could not infer
- compatibility level and fixture coverage
- whether generated outputs are checked by tests or illustrative only
Exit criteria:
- every example has commands, expected findings and scope boundaries
- documentation site content does not overclaim beyond the checked-in implementation
- examples are exercised by tests where practical
- no example claims support for an importer, generator or provider that is not in the compatibility matrix
- Docker Compose is not shown as implemented before its post-v1.0 gate
Explicitly excluded:
- hosted demo deployment
- Docker Compose examples before Docker Compose support exists
- screenshots without a maintained verification process
- generated output snapshots that cannot be kept deterministic
- live cloud credentials
- deployment execution
Goal: make pull request review practical while keeping machine-readable findings stable.
Scope:
- GitHub Action wrapper
- Planwright graph, Terraform plan, Terraform state, policy profile and compatibility fixture review in CI where supported
- SARIF upload path
- Markdown PR comment summary
- stable exit codes
- documented GitHub token permissions
- SARIF helper package if duplication starts affecting rule stability
- schema validation tests for emitted SARIF
- stable rule IDs
- source location support where importers can provide it
- baseline and suppression strategy discussion
- example workflows for local-only and CI-only review modes
- least-privilege permission documentation
Exit criteria:
- Action examples follow least-privilege GitHub token permissions
- SARIF output validates against the supported schema in tests
- rule IDs and exit codes are documented as compatibility-sensitive
- CI examples do not require cloud credentials by default
- PR comment summaries are deterministic and avoid leaking secrets or raw sensitive values
- baseline and suppression behaviour is documented as review aid behaviour, not compliance approval
Explicitly excluded:
- cloud credentials by default
- cloud mutation
- secret display
- unstable rule IDs after release without documented compatibility impact
- hosted service dependency
- automatic remediation
Goal: document and test every current trust boundary before declaring a stable core.
Scope:
- threat model refresh
- Host allowlist tests
- CORS refusal tests
- CSRF design for future state-changing browser actions
- request body size tests
- path traversal and symlink tests
- archive extraction safety before zip pack input is added
- secret redaction tests
- generated artefact secret scanning checks
- Terraform/OpenTofu state and provider schema input safety tests
- pack source-preservation safety tests
- keyboard-first local web flows
- screen-reader graph summary for the current workbench
- high-contrast and focus-visible checks
- severity icons and text rather than colour alone
- reduced-motion compatibility
- ARIA live validation region where it improves the current workbench
- Playwright accessibility smoke checks if a browser test harness is added
- accessibility statement describing current support and non-claims
Exit criteria:
- threat model matches the implemented CLI, importer, server, pack, fixture and release surfaces
- local web security tests cover loopback, Host, CORS and request-size boundaries
- file, directory, archive and symlink boundaries are covered by tests where implemented
- generated artefacts do not print known secret values from supported input paths
- accessibility docs distinguish target practices from formal audit claims
- release notes identify this as hardening, not a formal security or accessibility certification
Explicitly excluded:
- weakening local-only defaults for convenience
- claiming formal accessibility certification without an audit
- browser-triggered credential use
- live cloud scans
- deployment execution
Goal: make Planwright business-proposable as a local-first compatibility and evidence engine.
Requirements:
- stable
planwright.graph.v1schema and compatibility policy - stable
planwright.pack.v1pack format - declared compatibility matrix generated or checked from tested fixtures
- fixture-backed compatibility claims for every supported current surface
- signed releases through a documented human-controlled trust root
- GitHub artefact attestations and release-attached SLSA provenance for release assets
- checksums
- SBOMs beside release artefacts when the release tooling supports them
- security policy
- threat model
- accessibility statement
- CI Action
- documentation site
- examples gallery
- Windows, macOS and Linux binary verification
- no telemetry by default
- offline mode
- stable exit codes
- stable diagnostics policy
- stable SARIF rule ID policy
- full release-candidate security and correctness pass
Explicitly excluded at v1.0 unless separately approved:
- hosted SaaS
- one-click deployment
- AI architect claims
- lossless universal IaC conversion
- broad multi-cloud coverage
- live mutation from browser
- live cloud scans as a stability requirement
- broad generator coverage beyond fixture-backed support
- compliance certification
The following gates remain part of the full project vision but should not block the first stable core. They expand the product after the core graph, fixture suite, pack format, release evidence and CI review flow are stable.
Goal: generate reviewable CloudFormation and SAM templates from supported graph shapes.
Scope:
- CloudFormation
template.yamloutput - Parameters, Resources and Outputs for supported AWS web application shapes
- Metadata with Planwright provenance
- SAM output for serverless graph shapes
- CloudFormation/SAM golden tests
- compatibility report for generated constructs
Explicitly excluded:
- source-level CDK generation
- perfect parity with imported CloudFormation
- complete SAM transform expansion
Goal: support local container topologies as a bridge to cloud and Kubernetes planning.
Scope:
- Docker Compose service, network, port and volume inventory
depends_on, healthcheck, image and environment-key extraction- secret-looking environment key warnings
- host exposure findings
- limited Docker Compose generation from simple graph shapes
- loss reports for unsupported Compose features
Explicitly excluded:
- Dockerfile execution or build
- container runtime inspection
- Swarm deployment support
Goal: make cloud-native output useful for the supported graph subset.
Scope:
- Namespace, Deployment, StatefulSet, Service and ConfigMap generation
- Secret placeholders without values
- Gateway, HTTPRoute, TLSRoute and TCPRoute generation
- Kubernetes NetworkPolicy generation
- optional CiliumNetworkPolicy generation
- cluster exposure graph reports
- Kubernetes deployment pack folder
Explicitly excluded:
- live cluster apply
- Helm chart generation
- full policy semantic proof
Goal: support terminal-first infrastructure review.
Scope:
planwright tui- resource tree
- selected resource details
- flow table
- findings panel
- generated output preview
- diff view
- loss report view
- keyboard command palette
Explicitly excluded:
- terminal deployment
- private TUI-only engine logic
Goal: show the engine safely on steadytao.com/projects/planwright.
Scope:
- static project page
- thesis and safety boundaries
- engine diagram
- typed plan example
- CLI playback
- TUI mock or playback
- interactive GUI demo with sample data
- report previews
- sample deployment pack download
- compatibility matrix
- roadmap and source links
Safety boundary:
- no AWS credentials
- no deployment
- no server-side storage
- no secrets
- client-side sample data unless a user explicitly uploads local files in browser memory
Goal: improve authoring without moving engine logic into the editor.
Scope:
- schema validation
- autocomplete for Planwright YAML
- graph preview
- findings panel
- generated-output preview
- command invocation through the local CLI
Explicitly excluded:
- extension-only features
- cloud credential handling
Goal: help users understand existing AWS environments without mutation.
Scope:
- explicit
planwright scan awscommand - identity confirmation with account ID and region display
- read-only service inventory for VPC, subnet, security group, EC2, ECS, RDS, S3, Lambda, API Gateway and ELBv2 where supported
- permission-aware missing-resource report
- relationship inference
- local graph output
- loss report
- no secret value collection
Safety boundary:
- read-only only
- explicit region
- explicit account confirmation
- no mutation
- no browser-triggered credential use
Goal: compare intended, generated and observed states.
Scope:
- graph vs graph diff expansion
- Terraform plan vs graph comparison
- Terraform state vs graph comparison
- CloudFormation vs graph comparison
- AWS scan vs graph comparison
- Kubernetes live state vs manifest comparison if live Kubernetes scan is later approved
- findings for new public paths, permission broadening, destructive changes, logging removal, backup removal and encryption removal
Explicitly excluded:
- absolute proof of drift without explicit source data
- automatic remediation
Goal: support organisational static checks without forcing OPA immediately.
Scope:
- built-in
lab,student,small-business,public-web-app,internal-service,productionandregulated-baselineprofiles - custom YAML policy rules
- profile inheritance
- policy fixture tests
- machine-readable policy output
Explicitly excluded:
- compliance certification
- arbitrary code execution in policies
Goal: integrate with established policy tooling after the built-in model is stable.
Scope:
- OPA input JSON export
- optional Rego policy execution behind explicit command flags
- Conftest-compatible bundle output if it proves useful
- SARIF output for policy findings
Explicitly excluded:
- silently running third-party policy code
- network policy downloads by default
Goal: let compatibility grow through adapters without destabilising the engine.
Scope:
- importer interface
- generator interface
- analyser interface
- capability metadata
- fixture harness
- plugin compatibility tests
- documentation for loss reports, provenance and diagnostics
Explicitly excluded:
- unreviewed arbitrary plugin execution by default
- marketplace or hosted plugin registry
Goal: expand reports from security-only review into operations evidence.
Scope:
- single-AZ warnings
- no-backup warnings
- no-healthcheck warnings
- no-log-retention warnings
- no-alarm warnings
- no-deletion-policy decision warnings
- rollback notes
- operator runbook generation
- incident-response notes
- data-flow and threat-model report generation
Explicitly excluded:
- claiming operational readiness without deployed evidence
Goal: turn cost notes into rough cost review while remaining honest.
Scope:
- NAT Gateway warning
- ALB idle cost warning
- RDS idle cost warning
- EBS orphan warning
- Elastic IP unused warning
- CloudWatch log growth warning
- cross-AZ data warning
- managed service fixed-cost warning
- student/lab low-cost mode
- optional Infracost integration if it earns the dependency and boundary
Explicitly excluded:
- exact billing prediction
- cloud pricing calls without explicit user action
Goal: decide whether non-AWS targets fit without collapsing scope.
Research topics:
- Azure ARM/Bicep import and generation
- Google Cloud deployment formats
- Crossplane compositions
- Ansible inventory-style explanation
- Packer templates
- Nomad jobs
- cloud-init analysis
- Serverless Framework import
Exit criteria:
- documented fit assessment
- no implementation until AWS, Terraform/OpenTofu, CloudFormation/SAM and Kubernetes foundations are stronger
Goal: decide whether adjacent IaC and catalogue targets fit the compatibility model.
Research topics:
- Pulumi stack export import
- Pulumi preview JSON review if a stable local format is available
- Pulumi YAML generation
- CDK synth output import through CloudFormation
- CDK TypeScript or Python skeleton generation
- Backstage
catalog-info.yamlgeneration - OpenAPI-style infrastructure API description
- Serverless Framework import
- Podman systemd-style unit analysis
Exit criteria:
- documented fit assessment for each target
- clear loss-report strategy for code-first or template-driven formats
- no code generation until generated output can be fixture-tested and reviewed