← Google Cloud Dynamic Python Web AppExamplesLegal NoticePrivacy

StackToIT Migration Intelligence Workspace

FOR REVIEW — generated by StackToIT Assess. Architect review required before any decision.

Migration readiness

Cannot start: none of the 12 automated steps can run as written.

First: Allow the calls of STACKIT APIs that are not generally available — Owner: Platform Architect.

11 units assessed from gcp-candidates/terraform-dynamic-python-webapp/infra; 5 more decided only at plan time.

Migration-ready: NO — 72 critical settings of 16 source resources have manual or refused steps open (65 manual, 2 refused, 5 with no step)

Terraform today: 0 units; Written by the draft, a person finishes: 10 units; Written by the draft, a part of it refused: 1 unit; Proposed, switched off until you decide: 4 units; Refused: 1 unit. Beside these units: 4 capability proposals, switched off until you decide.

How these numbers are counted

Migration-ready, the other reasons: 26 steps of the plan cannot be carried out now (24 wait only for a decision, 2 are refused)

Values the steps wait for (10 steps): project_id, containers_machine_type, containers_nodes_max, containers_nodes_min and 7 more. The variables of the draft are listed in variables.tf.

Scope: Read from gcp-candidates/terraform-dynamic-python-webapp/infra (units decided only when OpenTofu plans: 5 present with the defaults of their variables (a variable can change that)); 12 of 62 critical settings resolved.

Three measures, not one: "can run as written" means the step is free of decisions and manual prerequisites and waits for no value (0 of the 12 automated steps); "automation-eligible" means the critical settings of the unit are closed (0 of 11 units; how far the other units can go is on the Automation eligibility line below); "waiting for a value" means the step is free of decisions and manual prerequisites and reads a variable that has no value yet, so a person supplies it before the step runs and the step is never approved before (10 of the 10 steps free of decisions and manual prerequisites: the plan lists 11 OpenTofu variables, the STACKIT project id among them, with no value).

Source assurance: provider not stated (the source names no provider the knowledge base has a compatibility band for) · OpenTofu validation of the source: not run (lock file) · every required input of the source is in the package

Critical blockers

Allow the calls of STACKIT APIs that are not generally available: open input (first because 2 automated steps wait for it).

Decisions waiting

5 of the 6 decisions to make hold 24 steps back (of the 78 steps of the plan): the 2 of the 12 automated steps above that require a design decision are among them. Decisions

Answered together, the decisions above that free steps by themselves free 15 distinct steps of the plan (2 of them automated).

2 more of them hold steps back.

Applications

2 groups PROPOSED by StackToIT (nobody has confirmed them, so none is an application yet): 0 Migration-ready · 0 blocked · 0 redesign · 2 not Migration-ready. Applications

  • migrate

    PROPOSED — not confirmed NOT MIGRATION-READY 3 units

    0 of 5 automated steps can run as written · 2 of the 6 decisions to make hold its steps · 14 manual steps, 0 data moves; not counted: 3 units other groups reach as well (33 manual steps, 2 data moves) · 6 differences or open security decisions to accept

    Why this state

    not assessed: google_cloud_run_v2_job.migrate has no compatibility contract (the build writes one only for an ECS service) and no readiness from the plan (only a server, a function or a cluster workload counted in the totals of a run with a plan has one)

  • server

    PROPOSED — not confirmed NOT MIGRATION-READY 2 units

    0 of 2 automated steps can run as written · 1 of the 6 decisions to make holds its steps · 10 manual steps, 0 data moves; not counted: 3 units other groups reach as well (33 manual steps, 2 data moves) · 4 differences or open security decisions to accept

    Why this state

    not assessed: google_cloud_run_v2_service.server has no compatibility contract (the build writes one only for an ECS service) and no readiness from the plan (only a server, a function or a cluster workload counted in the totals of a run with a plan has one)

Drafted, redesign and not supported

Of 11 units: 6 can be drafted with configuration changes · 2 move to another service · 2 move into containers · 1 needs manual review. Target Fit

Automation-eligible today: 0 of 11 units.

How these numbers are counted

Source unit fate: 9 Terraform-only · 2 hybrid · 0 API-only · 4 proposed, switched off · 1 manual · 0 no resource (of 16 units the draft considered).

Mapping class of the 11 units counted in the totals: 6 reconfigure · 2 replatform · 2 containerize · 1 manual review.

Automation eligibility: 0 of 11 units; 11 cannot be automated in this build: a provider the build cannot check (11 units), a critical value the draft states only as a placement (3 units), a target resource the provider marks experimental (3 units), a unit left to an architect (3 units), a critical setting STACKIT does not support (1 unit) and a decision whose every option is work a person does by hand (1 unit)

Cost estimate and unpriced scope

Estimate: STACKIT 164.67 EUR per month (730 h) for 2 of 8 lines priced (partial).

Not priced: 6 of 8 STACKIT lines, 14 of 14 source lines and 13 source resources outside the model that can carry a charge — no saving is stated. Cost

How these numbers are counted

of the STACKIT estimate: 72.70 EUR target only (1 line the source side has no line to stand against: in the total, in no comparison).

Financial comparison: NOT AVAILABLE — no price source for 5 lines; priced but outside the comparison (STACKIT, target only, no source line stands against them: 1 line, 72.70 EUR; STACKIT, priced lines of units that are not compared: 1 line, 91.97 EUR); the subtotal of one side is not a comparison and no saving is stated.

First three actions

  1. Next action: Allow the calls of STACKIT APIs that are not generally available — Owner: Platform Architect Open the record
    The full instruction, the evidence and what closes it

    Allow STACKIT's pre-release APIs, which may change or be withdrawn: Pub/Sub v1beta (beta) and Secrets Manager v1 (release status not stated). 3 steps of the plan name this decision and wait for this answer (the steps that come after them are counted in what an answer frees); allowing the calls lets the plan carry them out and makes the migration depend on those APIs. If you say no (record a rejection), the calls are not made: the steps of Pub/Sub and Secrets Manager stay open. Record the answer in the decisions file given with --decisions (decisions-template.yaml); answer each API on its own through the members of the record.

    Evidence: The record names no verification of its own; the answer and who gave it are recorded in the decisions file.

    Closes when: Every API the record lists is answered in the decisions file: allowed, or refused.

  2. Apply the block of terraform/data.tf with OpenTofu TF/stackit_postgresflex_instance.postgres · Data Architect · 15 jobs of the work board wait for it
  3. Choose how the data is moved · Data Architect · 13 jobs of the work board wait for it
The rest of the result: 5 fixed lines · 1 root cause named · 6 dimensions · 4 figures at a glance
  • Cost: Financial comparison: NOT AVAILABLE — no price source for 5 lines; 6 of 8 STACKIT lines have no price; 13 source resources are outside the model and can carry a charge; priced but outside the comparison (STACKIT, target only, no source line stands against them: 1 line, 72.70 EUR; STACKIT, priced lines of units that are not compared: 1 line, 91.97 EUR); the subtotal of one side is not a comparison and no saving is stated. 2 of 22 lines priced (reasons: 5 no cache · 4 target not chosen · 1 ambiguous · 1 use not stated); while both estates run, per month of overlap: source no figure (no line of its estate is priced), STACKIT 164.67 EUR (priced part) (a one-off item, in no total or comparison)
  • Mappings: 0 of 11 land on GA STACKIT services with every critical setting accounted
  • Mapping confidence: 0 of 11 HIGH
  • Live verification: never applied to STACKIT — no STACKIT plan was run over this draft and no step of the plan has met a live STACKIT project; 0 of 2 STACKIT API steps verified live
  • Source provider: not stated — the source names no provider the knowledge base has a compatibility band for
Root causes
1 root cause: 1 unit has open items that exist only because of it. Every dependent is listed on the Decisions page. Root causes
  1. google_firebase_hosting_site.client — 1 dependent unit. Next: Decide whether a proposed STACKIT alternative replaces a source capability for google_cloudbuild_trigger.activategcb, google_cloudbuild_trigger.init, google_cloudbuild_trigger.placeholder, google_firebase_hosting_site.client and 3 more: choose one of the 2 options, and record the answer for this record in the decisions file given with --decisions (decisions-template.yaml). Open the record
  • Steps in the draft: 10 OpenTofu steps and 2 STACKIT API steps (2 generated, tested offline)
  • Progress by kind of step: steps to answer: 24 · changes executable now: 5 · waiting: 47 (10 wait for a value); 2 refused (of 78 steps) — plan steps: a step to answer is a step whose work is to decide, not a record of the decision register; changes executable now include the manual steps a person can start without a decision
  • Manual actions that can start: A person can start 29 of the 64 manual steps now (10 wait for a manual prerequisite, 3 wait for an automated step, 22 require a design decision)
  • Actions waiting on prerequisites: 10 steps of the plan start only after a manual step a person has not done; 24 steps wait for a decision
  • First required action: Allow the calls of STACKIT APIs that are not generally available — Platform Architect
Six dimensions of this run. There is no overall score, and no row means that the migration is ready.
DimensionStateWhat it countsWhat moves it
Analyzed PARTIAL 11 known-present units of 37 resources scanned; 5 decided only when OpenTofu plans Moves when every file, module and variable value the source reads is in the package (source: partly decided only at plan time).
Drafted PARTIAL 11 of the 16 units the draft considered have a generated resource (11 known-present, 5 decided only when OpenTofu plans); 0 no resource, 1 left to the architect Moves with the units the draft writes a resource for; a unit with no resource, or left to the architect, is counted in the Source unit fate line.
Validated PARTIAL OpenTofu validation of the source: not run (lock file); OpenTofu validation: passed (tofu init -backend=false and tofu validate accepted the draft; tofu 1.13.1); StackToIT draft checks: passed (20 checks, none found a violation); Global invariants: passed (12 of 12 invariants PASS; vacuous, they checked nothing: NO_SECURITY_WIDENING, VARIABLE_IDENTITY_PRESERVED, APPLICATION_READY_IMPLIES_REQUIRED_ENV_SECRETS_DEPENDENCIES); STACKIT plan: not run (this build runs no plan against a STACKIT project) Moves when OpenTofu validates the source and the draft and the STACKIT plan is run; a pass of the draft checks is not a validated source, this build runs static checks only, and a pass of them approves nothing.
Deployable PARTIALLY EXECUTABLE package state: Partially executable migration package; the automated steps are counted once, in the readiness block of this page Moves with the decisions and manual prerequisites that hold steps back, as Migration Execution counts them; nothing has been run.
Application Ready NOT ASSESSED 0 attested of 2 units where a workload dimension applies: no application compatibility contract in this build Moves when an application compatibility contract is written for a workload and a person confirms it (environment, secrets, dependencies, health checks); a generated resource marks no workload ready.
Equivalent OPEN 12 of 62 critical settings resolved or accepted (12 resolved, 0 accepted design changes) Moves when an open critical setting is resolved or accepted as a design change. Accounting is not equivalence: every setting accounted for says the contracts cover it, not that the target behaves like the source, so this dimension never reads equivalent in this build (semantic equivalence: NOT_ASSESSED in the validation matrix).
Verdict
Partially executable migration package · For review only · Not approved.
What changes
Identity and access not carried: template › template › service account of google_cloud_run_v2_job.migrate (review the service identity setting). Network exposure not carried: template › template › volumes › cloud sql instance › instances of google_cloud_run_v2_job.migrate (review the cloud run v2 job network exposure setting). Identity and access not carried: template › service account of google_cloud_run_v2_service.server (review the service identity setting). 14 more critical network-exposure or identity-access settings are not carried (engineering/not-carried.csv). 15 of the 16 unit-list entries state a STACKIT target (STACKIT service account, a workflow in STACKIT Git Pipelines (GitHub Actions syntax, STACKIT-managed or custom runners) or the customer's CI/CD, STACKIT Secrets Manager, 6 more); 1 state none. The unit list counts entries, the 11 migration units above are the units counted in the totals: it also holds conditional, switched-off and facet entries. Target Fit
Open actions by type
43 records of the register by what you do next:
  • 40 open input
  • 0 input applied, not closed
  • 0 carried, to confirm
  • 0 accepted
  • 0 requires verification
  • 2 manual work
  • 0 regenerate the draft
  • 1 blocked
  • 0 unsupported on STACKIT
Decision centre
Inputs: 0 design inputs wait · 27 open requests (7 block the draft — inputs-template.yaml marks them, 4 are preferences this build cannot apply — inputs-template.yaml, NOT APPLICABLE IN THIS BUILD, says where to set each).
Execution readiness
Execution: 10 of the 12 automated steps (OpenTofu or a script) are free of decisions and manual prerequisites (2 require a design decision) · 0 can run as written · 10 of those 10 wait for a value (project_id, containers_machine_type, containers_nodes_max, containers_nodes_min and 7 more) · stages of 12 automated steps: 12 in the draft, 10 free of decisions and manual prerequisites, 0 rest on no default to confirm, no opt-in to answer and no value to supply, 0 are approved (every decision and default confirmed in the decisions file, and no value left to supply) · 10 Terraform · 2 API (2 wait for the opt-in) · 0 design inputs · 55 manual migration work (37 settings in 14 review steps) (counting the longest method of each open data-movement choice; 7 steps of the other methods not counted) · 2 lifecycle (cutover/verify/retire) · 2 refused (of 78 plan steps).
Blockers
Open work: 77 to review: 71 critical settings and 6 decisions to make (4 plan decisions, 2 plan statements) · 1 default to confirm · 1 confirm only (open critical settings, and open decision records of the register). 22 of the 71 critical settings of the register belong to units decided only when OpenTofu plans; the 50 open critical settings of the units counted in the totals leave them out. 5 of the 6 decisions to make hold plan steps back: 24 steps wait only for them (of the 78 steps of the plan: steps of every kind, manual ones included). They come first. 1 record is blocked: nothing answered frees it before what holds it is cleared. Decisions
Validation
OpenTofu validation of the source: not run (lock file) · Output schema validation: passed (verified at publish) · OpenTofu validation: passed (tofu init -backend=false and tofu validate accepted the draft; tofu 1.13.1). Migration readiness and semantic equivalence are not established. Validation matrix
What it costs
Financial comparison: NOT AVAILABLE — no price source for 5 lines; 6 of 8 STACKIT lines have no price; 13 source resources are outside the model and can carry a charge; priced but outside the comparison (STACKIT, target only, no source line stands against them: 1 line, 72.70 EUR; STACKIT, priced lines of units that are not compared: 1 line, 91.97 EUR); the subtotal of one side is not a comparison and no saving is stated. 0 of the 33 source resources of the cost model computed on both sides · 0 quantity unknown · 20 not computed, 13 more carry no charge of their own. Net list prices, not a bill. Source and target are compared only over the 0 resources both sides price in full; the others are in no figure. Not included in any total or comparison: traffic and usage that no assumption states, support, licences, operations and the one-off cost of the migration (what it costs to run both estates during the cutover is stated apart, as a one-off item); a scenario of what owning the estate costs, on either side, is not provided by this build.
Technical details: run, versions, digest and evidence freshness

Assessment

Assessment
gcp-candidates/terraform-dynamic-python-webapp/infra (assessment format 0.24.0)
Assessment timestamp
Generated 2026-11-07 04:24 UTC by stacktoit 0.6.0-13076-ga19ea28c64 (a19ea28c64)
Run
6f8f72b2-1c34-4cfc-8483-344c41245364 · source digest sha256:19bfed642d5789ccada81b91d5c36e33175dcafd66dc46b1644ffa105d020000
Source snapshot
partly decided only at plan time · google not locked; google-beta not locked; http not locked; random not locked; time not locked
STACKIT target profile
Stable network model: the experimental STACKIT VPC resources are not used (STACKIT_STABLE)
STACKIT provider version
0.121.0
Knowledge base version
0.394.0
Evidence freshness
Not assessed — Evidence freshness as one measure is not assessed in this build. Dated evidence is shown where it is used: each STACKIT support option and each assurance row states when it was verified (verified_at, and recheck_after for support), in support_suitability and assurance. The date beside a readiness dimension is the assessment date, not a retrieval date.

Staleness: Not assessed — This build has no change detection, so there has been no re-check since the assessment was made (Generated 2026-11-07 04:24 UTC). The source may have changed since.

Source checks: Built-in source checks passed — OpenTofu validation of the source did not run (LOCK_FILE)

Run status: COMPLETE (report published). Source: partly decided only at plan time. Draft: GENERATED. The report was written whole; this is not a statement that the migration is ready.

Executive lens: the sections are in the order this reader usually wants, and Architecture and Engineering Evidence are put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Architect lens: the sections are in the order this reader usually wants, and Costs is put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Platform lens: the sections are in the order this reader usually wants, and Costs is put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Security lens: the sections are in the order this reader usually wants, and Costs and Migration Plan are put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Application owner lens: the sections are in the order this reader usually wants, and Engineering Evidence is put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Programme lens: the sections are in the order this reader usually wants, and Engineering Evidence is put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

FinOps lens: the sections are in the order this reader usually wants, and Architecture and Engineering Evidence are put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Engineering lens: the sections are in the order this reader usually wants, and Costs is put aside. Nothing is removed from the page: choose All to show every section in the order of the navigation, or follow a link into a section that is put aside.

Overview

11 migration units were assessed from gcp-candidates/terraform-dynamic-python-webapp/infra. Beside them: 5 whose existence is decided only when OpenTofu plans (5 present with the defaults of their variables (a variable can change that)), 0 switched off.

The five-minute answer

10 biggest blockers listed

Each line is a number or a list that one of the pages below states in full, and links to it. There is no score here, and nothing on this page means that the estate is safe to migrate.

Biggest blockers

77 to review: 71 critical settings and 6 decisions to make (4 plan decisions, 2 plan statements) · 1 default to confirm · 1 confirm only (open critical settings, and open decision records of the register)

Critical findings come first; then the findings of warning severity and the critical settings a person decides, the one that concerns the most units first; then the settings the draft already carries, to confirm only, and last the accepted design changes. At most ten are listed.

  1. Review the account name setting · critical setting, open on 3 units (REVIEW) · owner: Identity Architect · concerns google_service_account.automation, google_service_account.client, google_service_account.server · closes when: A person decides what this finding asks, and records the evidence or the decision. The finding says: The account ID is not visible statically; the STACKIT account is named after the source address. — a variable's default, not a fact.
  2. Map the IAM roles of the service account to STACKIT roles · critical setting, open on 3 units (REVIEW) · owner: Identity Architect · concerns google_service_account.automation, google_service_account.client, google_service_account.server · closes when: A person confirms the value against the target, or the knowledge base gains a rule that decides this setting.
  3. Decide the resource that the unit depends on · warning finding · 2 units: This unit names google_firebase_hosting_site.client (google_firebase_hosting_site), whose own decision the target does not carry (it is REDESIGN), and the semantic contract of google_cloudbuild_trigger does not read google_firebase_hosting_site, so what the reference becomes is not assessed. · owner: unassigned (a finding records no owner role) · concerns google_cloudbuild_trigger.init, google_cloudbuild_trigger.placeholder
  4. Run unsupported volume · warning finding · 2 units: A container mounts a Cloud SQL connection, a Cloud Storage bucket (through Cloud Storage FUSE) or an NFS share. The draft writes no volume for these and holds the pods until a person decides: connect to the migrated database or object store over the network instead of the mount, or mount a share or a volume of the cluster yourself. · owner: unassigned (a finding records no owner role) · concerns google_cloud_run_v2_job.migrate, google_cloud_run_v2_service.server
  5. Decide how each principal with a grant on a secret reaches it on STACKIT · warning finding · 2 units: The secret has grants for individual principals. Access on STACKIT Secrets Manager is coarser than a Secret Manager grant: a Secrets Manager user is read-only or read-write for the whole secrets engine of its instance, with no scope to one secret or path. Narrower access exists only as role bindings on the instance or on a secret group (a named list of secrets) in the alpha API of the service, and the pinned provider offers them as resources of its experimental IAM feature (stackit_secretsmanager_instance_role_binding_v1 and stackit_secretsmanager_secret_group_role_binding_v1), which its documentation says may change or be removed; the specification does not list the roles a secret group accepts. A grant of one Google principal on one secret therefore cannot be carried one to one: decide per principal whether it gets a user of the whole instance, a role binding on a secret group of the secrets it may read, or a separate Secrets Manager instance. · owner: unassigned (a finding records no owner role) · concerns google_secret_manager_secret.django_admin_password, google_secret_manager_secret.django_settings
  6. Choose the container image or artifact · critical setting, open on 2 units (REVIEW) · owner: Platform Architect · concerns google_cloud_run_v2_job.migrate, google_cloud_run_v2_service.server · closes when: A person confirms the executable artifact or image for the STACKIT target: where it is built or pulled from and that the same build runs there.
  7. Confirm the region the data stays in · critical setting, open on 2 units (REVIEW) · concerns google_cloud_run_v2_job.migrate, google_cloud_run_v2_service.server · closes when: A person confirms the STACKIT region of the SKE cluster the workload runs on holds the residency the source region gave, since no mapping between Google and STACKIT regions is evidenced.
  8. Decide how the secrets are carried · critical setting, open on 2 units (REVIEW) · owner: Identity Architect · concerns google_secret_manager_secret.django_admin_password, google_secret_manager_secret.django_settings · closes when: A person recreates the secret in the Secrets Manager instance, since its data is not written into the draft, and decides for each IAM member whether it gets a user of the whole instance, a role binding on a secret group, or a separate instance.
  9. Provide the values of the secrets · critical setting, open on 2 units (REVIEW) · owner: Security Architect · concerns google_secret_manager_secret.django_admin_password, google_secret_manager_secret.django_settings · closes when: A person decides where the value comes from, supplies the document and the step has run.
  10. Create the Kubernetes Secrets for the Secret Manager references · critical setting, open on 2 units (REVIEW) · owner: Security Architect · concerns google_cloud_run_v2_job.migrate, google_cloud_run_v2_service.server · closes when: A person creates the Kubernetes Secrets the manifest lists, filled from STACKIT Secrets Manager (for example with an External Secrets Operator).

… and 30 more groups to review, 1 confirm-only item (see Decisions).

Source assurance warnings

These warnings are about how well the source was read, not about what blocks the migration, so they are not listed among the blockers above. They are not dismissed: each is still a finding group, and the finding stays on every unit it concerns.

  • Verify the version of the source provider · warning finding · 16 units: no lock file records the version of registry.terraform.io/hashicorp/google, and the constraint ">= 6, < 8" excludes it (pinned 8.4.0) (stated once for the whole estate, with the units it covers and the rest of the words)

Decisions people must take

Decision register: 6 decisions to make (4 plan decisions, 2 plan statements) · 1 default to confirm · 16 units to review (72 critical settings: 71 to decide (22 of them are conditional), 1 confirm only). See Decisions.

How much was understood

11 units are counted in the totals. Beside them 5 are decided only when OpenTofu plans (5 present with the defaults of their variables (a variable can change that)) and 0 are switched off; those are not measured. Evidence traces, by kind of entry of the unit list: active units with a block in the draft: 6 of 10 traced (6 from the lines the draft records for them, not from a typed plan; 4 drafted without a trace); active units with no block in the draft: 0 of 1 traced (nothing to trace); units decided only when OpenTofu plans: 1 of 5 traced (1 from the lines the draft records for them, not from a typed plan). An entry without a trace is not an entry with nothing open; the unit list says for each why it has none. 12 of 62 critical settings are resolved; 50 are open: a critical setting counts as resolved only when it has been decided, not when it has merely been looked at.

What the target would look like

15 entries of the unit list state a STACKIT target and 1 do not. The services, with the entries of each (Target Fit):

  • STACKIT service account: 4 entries
  • a workflow in STACKIT Git Pipelines (GitHub Actions syntax, STACKIT-managed or custom runners) or the customer's CI/CD: 3 entries
  • STACKIT Secrets Manager: 2 entries
  • Kubernetes Job/CronJob on SKE: 1 entry
  • SKE workload (or Cloud Foundry Docker app): 1 entry
  • STACKIT Object Storage: 1 entry
  • STACKIT Object Storage as origin of a STACKIT CDN distribution, with a custom domain: 1 entry
  • STACKIT PostgreSQL Flex: 1 entry
  • STACKIT RabbitMQ: 1 entry

Price coverage, counted in drafted STACKIT resources (not the source resources the cost model counts): of the 5 drafted resources a price rule covers, 3 are priced and 2 are not (stackit_rabbitmq_instance.messaging, stackit_secretsmanager_instance.migrated_secrets; each with its reason in financial/priced-resources.csv); the other 5 drafted resources have no price rule. A resource is priced only where a tested rule joins it to one SKU of the public STACKIT price list; the lines with their quantities, amounts and totals are in financial/cost-model.json and financial/priced-resources.csv; a total is full only when every line of its scope is priced.

What happens next

  1. Review the 71 open critical settings: a person decides each (index.html, Decisions page; assurance/critical-semantics.json, critical_semantic_resolution.open). 22 of them belong to units that exist only if a plan-time input holds (critical_semantic_resolution.conditional_open). 1 more is carried by the draft already: confirm only. (see it here)
  2. Review the 4 open plan decisions and 0 manual actions of the draft (index.html, Architecture, Deployment prerequisites). Confirm the 1 default the draft carries out (index.html, Decisions page): no step waits for the answer, a person confirms each or changes it. (see it here)
  3. Review the draft in terraform/: nothing in it is approved, and an architect has to review it before any use. (see it here)
  4. Open index.html in a browser for the unit-by-unit view (offline, nothing is loaded).

Run summary

13 lines

The numbers of this run. The console prints the same lines at the end of the run, and engineering/architect-report.md and workspace.json (run_summary) state the same numbers: they are read from one model.

Run summary
Package statePartially executable migration package
Plan steps10 OpenTofu steps without a decision · 0 OpenTofu steps waiting for decisions · 57 manual carry-over · 2 unsupported · 1 units left to the architect for redesignmanual carry-over here includes the cutover, verification and retirement steps; STACKIT API steps, and Terraform steps that no decision can free, are in none of these counts, which the Execution line below states; manual carry-over counts the longest method of each open data-movement choice
Source unit fate9 Terraform-only · 2 hybrid · 0 API-only · 4 proposed, switched off · 1 manual · 0 no resource (of 16 units the draft considered: 11 known-present, 5 decided only when OpenTofu plans)what becomes of each unit the draft considered; the five add up to the units considered, and Terraform-only and hybrid together are the units generated
Execution10 of the 12 automated steps (OpenTofu or a script) are free of decisions and manual prerequisites (2 require a design decision) · 0 can run as written · 10 of those 10 wait for a value (project_id, containers_machine_type, containers_nodes_max, containers_nodes_min and 7 more) · stages of 12 automated steps: 12 in the draft, 10 free of decisions and manual prerequisites, 0 rest on no default to confirm, no opt-in to answer and no value to supply, 0 are approved (every decision and default confirmed in the decisions file, and no value left to supply) · 10 Terraform · 2 API (2 wait for the opt-in) · 0 design inputs · 55 manual migration work (37 settings in 14 review steps) (counting the longest method of each open data-movement choice; 7 steps of the other methods not counted) · 2 lifecycle (cutover/verify/retire) · 2 refused (of 78 plan steps)what each step of the plan is; the categories add up to the plan's steps
Inputs0 design inputs wait · 27 open requests (7 block the draft — inputs-template.yaml marks them, 4 are preferences this build cannot apply — inputs-template.yaml, NOT APPLICABLE IN THIS BUILD, says where to set each)design inputs are steps of the plan; requests are what the run asks the customer, listed one by one when the run is given an inputs file or a project
Source units11known-present migration units; 5 more decided only when OpenTofu plans: 5 present with the defaults of their variables (a variable can change that)
Critical open settings5049 to decide, 1 confirm only; 12 resolved of the 62 the units state; 22 more are open on 5 units decided when OpenTofu plans, not counted here but listed in the decision register (marked: applies only if) — with them the register has 71 critical settings to decide (49 + 22)
Decisions to review6 decisions to make (4 plan decisions, 2 plan statements) · 1 default to confirm · 16 units to review (72 critical settings: 71 to decide (22 of them are conditional), 1 confirm only)a decision to make is a record of an open plan decision, manual action or plan statement; a default to confirm is such a record whose default option the draft carries out (no step waits for it: a person confirms it or changes it); a unit to review is the review record of the critical settings of one unit that the knowledge base cannot decide (one record for each owner role, each setting an item of it); conditional settings are on units decided only when OpenTofu plans (decisions.json)
Draft coverage11 of 16 units with a generated resource4 proposed, switched off · 0 need no resource · 1 left for the architect · 13 variables · the 16 are the 11 source units and 5 conditional units
Global draft invariants12/12 PASS3 of the passes checked nothing; consistency checks over the draft; not target behaviour
tofu validatePASSEDstatic validation; not target behaviour
Architect approvalNOT PROVIDED
Safe to applyNOT ASSERTED

Readiness by dimension

12 dimensions

Readiness is shown per dimension. There is no overall score, and no dimension here means that the estate is safe to migrate.

Three states answer three questions. Coverage says how much of what the dimension counts is covered (Covered: all of it); it never says that anything is decided, validated or ready to deploy. Migration decisions is read from the Blockers and Open decisions columns of the same row: a Covered dimension can have blockers. Target validation says what StackToIT’s own checks established about the generated target for that dimension; no STACKIT plan is run, so nothing here means the draft plans or applies.

Semantic Accounting counts the critical settings the assessment accounted for; Critical Resolution counts those that are decided: accounted is not resolved. Terraform Draft Accounting counts the units whose critical settings are accounted for in the draft; it does not say that the draft validates or plans against STACKIT.

The six dimensions of the first screen read the rows of this matrix: Analyzed reads Source Fidelity; Drafted reads Terraform Draft Accounting (the units whose critical settings are accounted for in the draft; Drafted counts the units that have a generated resource); Validated reads the Target validation column; Deployable reads the package state of Migration Execution; Application Ready reads Target Functional Fit and the Operational Readiness row (no application compatibility contract exists in this build); Equivalent reads Semantic Accounting and Critical Resolution (accounted for is not resolved, and resolved is not equivalent). Security, Sovereignty & Exitability and Cost Confidence have pages of their own and no user-first dimension.

Readiness matrix
DimensionCoverage stateMigration decisionsTarget validationCoverageBlockersOpen decisionsAssessment dateWhat this shows
Source Fidelity Partly covered Blockers open Not applicable no coverage figure is defined for this measure 1 not assessed in this build 2026-11-07 For some units, whether and how many times they exist is decided only when OpenTofu plans.
Semantic Accounting Covered Blockers open Not applicable 11 of 11 (100%)
units with a semantic contract and no critical setting unaccounted; 0 units without a contract or with a critical setting unaccounted
11 not assessed in this build 2026-11-07 Accounted for is not decided. Covered means every unit has a semantic contract and no critical setting is unaccounted; it does not mean the settings are decided, so the blockers still count the 11 units that leave one for a person. 0 units have no semantic contract; 0 units leave a critical setting unaccounted; 11 units leave one for a person to review (accounted for, not decided). A blocker here is a unit that does either of the last two.
Critical Resolution Partly covered Blockers open Not applicable 12 of 62 (19%)
critical settings resolved; 50 critical settings open
11 not assessed in this build 2026-11-07 12 of 62 critical settings are resolved; 11 units hold an open one (accounted for, not decided); 0 units have no semantic contract. A blocker here is a unit that does either.
Target Functional Fit Not assessed Not assessed Not assessed not assessed in this build not assessed in this build not assessed in this build not assessed in this build Not assessed in this build.
Target Operability Not assessed Not assessed Not assessed not assessed in this build not assessed in this build not assessed in this build not assessed in this build Not assessed in this build.
Terraform Draft Accounting Not covered Blockers open Static checks passed 0 of 11 (0%)
units whose critical settings are all accounted for in the draft; 11 units with a critical setting left to a person, or without a draft block
11 not assessed in this build 2026-11-07 Not a validation. This counts only whether each unit's critical settings are accounted for in the draft; it does not mean the draft validates, plans or applies against STACKIT, and even the coverage state Covered would not mean it.
Security Not assessed Not assessed Not assessed not assessed in this build not assessed in this build not assessed in this build not assessed in this build Not assessed in this build.
Reliability / Resilience Not covered Blockers open Not validated no coverage figure is defined for this measure 2 0 2026-11-07 2 units state a failure-domain, replication or backup fact or hold state. 2 units have no RTO or RPO the customer wrote to decide against, and 0 units have one and wait for a person to choose its resilience intent. No unit is called resilient and no intent is chosen: the source states none, and the availability-zone and metro facts of the target are not assessed.
Operational Readiness Not covered No open item counted Not validated no coverage figure is defined for this measure 0 0 2026-11-07 Terraform generated is not workload ready: 0 of 11 units carry open workload items. 0 units need a decision or evidence from a person (0 of them a decision; 0 block a readiness claim, a cutover decision being a migration operation and not a blocker); 2 compute units have no workload evidence in this build. The 20 dimensions of the amendment's operational readiness (identity, logs, backup, DR, support and the rest) are not assessed. A generated Terraform resource does not mark any of them ready.
Sovereignty & Exitability Not assessed Not assessed Not assessed not assessed in this build not assessed in this build not assessed in this build not assessed in this build No state is derived for this dimension: this build rates neither sovereignty nor exitability. What it does state (the thirteen dimensions, the source dependencies and the exitability entries, each with its own state) is in assurance/sovereignty.md and on the Sovereignty page.
Cost Confidence Not assessed Not assessed Not assessed not assessed in this build not assessed in this build not assessed in this build not assessed in this build Not assessed in this build.
Evidence Freshness Not assessed Not assessed Not assessed not assessed in this build not assessed in this build not assessed in this build not assessed in this build Not assessed in this build.

Units by mapping class

11 units in 7 classes
Units by mapping class (units counted in the totals)
ClassUnits
DIRECT0
RECONFIGURE6
REPLATFORM2
CONTAINERIZE2
REDESIGN0
MANUAL_REVIEW1
BLOCKED0
Units by confidence (units counted in the totals)
ConfidenceUnits
HIGH0
MEDIUM10
LOW1

18 source files, 37 resources scanned, 29 dependencies between units. Every unit is listed on the Architecture page.

Blocked units

none

No unit is in the mapping class BLOCKED. That names a class of the mapping, not an absence of blockers: what holds the plan back is counted apart, under Migration readiness and Blockers above.

BLOCKED is also the state of an application (its checklist) and the state of a step of the plan that cannot run; the three are counted apart and none is the sum of the others.

Decisions and cost

43 records of the register

Open decisions: 6 decisions to make (4 plan decisions, 2 plan statements) · 1 default to confirm · 16 units to review (72 critical settings: 71 to decide (22 of them are conditional), 1 confirm only). Cost coverage: 22 cost lines (14 of the source, 8 of the target), 2 priced. The estate (33 source resources), priced part: modelled infrastructure subtotal (3 of 33 source resources), SOURCE: none (NONE; 0 priced, 14 not priced and never filled in). The estate (33 source resources), priced part: modelled infrastructure subtotal (3 of 33 source resources), TARGET: 164.67 EUR (PARTIAL; 2 priced, 6 not priced and never filled in). This is an initial infrastructure cost estimate under explicit assumptions (the assumptions), not a bill. See Decisions and Cost.

Migration execution

78 steps of the plan

Partially executable migration package. Steps defined: 78 in the execution plan (10 OpenTofu, 2 STACKIT API, 64 manual, 2 refused). Progress by kind of step: steps to answer: 24 · changes executable now: 5 · waiting: 47 (10 wait for a value); 2 refused (of 78 steps). 10 of the 12 automated steps (OpenTofu or a script) are free of decisions and manual prerequisites (2 require a design decision) · 0 can run as written · 10 of those 10 wait for a value (project_id, containers_machine_type, containers_nodes_max, containers_nodes_min and 7 more); a person can start 29 of the 64 manual steps now (10 wait for a manual prerequisite, 3 wait for an automated step, 22 require a design decision); 2 steps of the plan are permanently unsupported (refused). See Migration Execution. The execution package starts at execution/README.md. The order of the work and what the STACKIT project has to provide first are in migration/roadmap.md and migration/landing-zone-requirements.md.

This is technical migration and architecture evidence. It is not legal advice, certification or an auditor's attestation.