Skip to content

Qualify actual CLI Markdown reports in PRs - #3

Merged
soulbah merged 4 commits into
devfrom
preview/cli-markdown
Oct 2, 2026
Merged

soulbah merged 4 commits into
devfrom
preview/cli-markdown

Conversation

@soulbah

@soulbah soulbah commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

The integrated workflow publishes a complete CLI review report to Job Summary and the single protected bot comment. The report uses one Rootform identity, Architecture/Policies/Details blocks, evaluated-side and change subsections, inline uncertainty, native verdict alerts and collapsed audit detail. Only the Delta symbol is retained for Net change.

The actual published Rootform 0.1.0-pr.117.1 analyzes public shared-data-platform fixtures from 74bd643f3001a37f8b4f881c0ae33db047b6aba3, then checks its Form with the synthetic negative Policy Pack. The public CLI module at reviewed commit a1adfafa66a548b270727cfbce913325e5980f77 renders that real saved evidence with --details. Compilation and new Policy evaluation are unavailable in the embedding. A recorded answer is reusable only for its exact Form digest, stage and selected Policies; exported Form and Policy result bytes must remain identical.

Shared reporting and stale-run protection use qualified immutable Action commit cc457702223d887c9db5da52ba36099ad3e1b4e0, whose source and bundle are identical to reviewed merged commit 8b026e9c7268a960ed6f9b48ecea404180ddb151. This qualifies source presentation; it does not claim a newly distributed binary or move a published Action ref.

Evidence includes 13 generated report cases rendered by GitHub GFM, both Delta goldens, full CLI/repository gates, ten actual published-binary integrations, and five native platforms. The complete report run preserved exact Form/Policy bytes and updated comment 5954262030; final source-pin refresh is recorded in its latest linked workflow. All 76 instances are present in the collapsed list. Raw inputs and executables are excluded from the eight-file derived artifact.

Live GitHub dark rendering verifies hierarchy, native CAUTION, full disclosure lists and collapsed provenance. Light rendering remains unverified: this browser exposes no theme control. No system appearance preference was changed.

Final artifact: 11237652297, eight derived files. Form SHA-256: 04eb843d7d27e7a1502368f13aa5449cf87e7832a9b3f986d30ae539d2b43857. Complete report SHA-256: cf1414409597bbbadba10be569ecf87fefe05fd5ad4f2016821ea1a23a2b1d9c. Same protected bot comment 5954262030; complete CLI body preserved.

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Rootform

CLI source-a1adfaf.

Architecture

76 instances, 18 Relations, 68 Contexts, and 14 Contributions added.

Form loaded. Planned changes compare Refreshed with Planned.

Uncertainty

Stage Indeterminate closures Unavailable Unknown until apply
Planned 27 26 1

Planned changes

Change Instances Relations Contexts Contributions
+ Added 76 18 68 14
− Removed 0 0 0 0
Instances: 76 added
  • google_cloud_run_v2_job.legacy_warehouse_sync
  • google_cloud_run_v2_service.enrichment
  • google_cloud_run_v2_service.ingest_api
  • google_cloud_run_v2_service.warehouse_loader
  • google_compute_firewall.allow_health_checks
  • google_compute_firewall.allow_internal
  • google_compute_global_address.private_services
  • google_compute_network.shared
  • google_compute_router.shared
  • google_compute_router_nat.shared
  • google_compute_subnetwork.data
  • google_compute_subnetwork.gke
  • google_compute_subnetwork.serverless
  • google_container_cluster.data
  • google_container_node_pool.workloads
  • google_monitoring_alert_policy.subscription_backlog
  • google_monitoring_service.ingest_api
  • google_monitoring_slo.ingest_api_availability
  • google_project.data
  • google_project.network
  • google_project_iam_member.enrichment_publisher
  • google_project_iam_member.gke_nodes_log_writer
  • google_project_iam_member.gke_nodes_metric_writer
  • google_project_iam_member.ingest_api_publisher
  • google_project_iam_member.pubsub_push_invoker
  • google_project_iam_member.streaming_subscriber
  • google_project_iam_member.warehouse_loader_sql_client
  • google_pubsub_subscription.events_enriched_sessions
  • google_pubsub_subscription.events_enriched_warehouse
  • google_pubsub_subscription.events_raw_enrichment
  • google_pubsub_subscription.events_raw_stream_consumer
  • google_pubsub_topic.events_enriched
  • google_pubsub_topic.events_raw
  • google_redis_instance.data
  • google_secret_manager_secret.ingest_hmac
  • google_secret_manager_secret.legacy_warehouse
  • google_secret_manager_secret.warehouse_db_password
  • google_secret_manager_secret_version.ingest_hmac
  • google_secret_manager_secret_version.legacy_warehouse
  • google_secret_manager_secret_version.warehouse_db_password
  • google_service_account.enrichment
  • google_service_account.gke_nodes
  • google_service_account.ingest_api
  • google_service_account.pubsub_push
  • google_service_account.streaming
  • google_service_account.warehouse_loader
  • google_service_networking_connection.private_services
  • google_sql_database_instance.data
  • google_vpc_access_connector.data
  • kubernetes_daemon_set_v1.otel_collector
  • kubernetes_deployment_v1.analytics_api
  • kubernetes_deployment_v1.feature_builder
  • kubernetes_deployment_v1.session_windower
  • kubernetes_deployment_v1.stream_consumer
  • kubernetes_horizontal_pod_autoscaler_v1.analytics_api
  • kubernetes_ingress_v1.analytics
  • kubernetes_namespace_v1.analytics
  • kubernetes_namespace_v1.batch
  • kubernetes_namespace_v1.observability
  • kubernetes_namespace_v1.streaming
  • kubernetes_network_policy_v1.analytics
  • kubernetes_network_policy_v1.batch
  • kubernetes_network_policy_v1.observability
  • kubernetes_network_policy_v1.streaming
  • kubernetes_service_account_v1.analytics_api
  • kubernetes_service_account_v1.feature_builder
  • kubernetes_service_account_v1.feature_store
  • kubernetes_service_account_v1.otel_collector
  • kubernetes_service_account_v1.prometheus
  • kubernetes_service_account_v1.session_windower
  • kubernetes_service_account_v1.stream_consumer
  • kubernetes_service_v1.analytics_api
  • kubernetes_service_v1.feature_store
  • kubernetes_service_v1.prometheus
  • kubernetes_stateful_set_v1.feature_store
  • kubernetes_stateful_set_v1.prometheus
Relations: 18 added
  • delivers-to from google_pubsub_subscription.events_enriched_warehouse to google_cloud_run_v2_service.warehouse_loader
  • delivers-to from google_pubsub_subscription.events_raw_enrichment to google_cloud_run_v2_service.enrichment
  • routes-to from google_cloud_run_v2_service.enrichment to google_vpc_access_connector.data
  • routes-to from google_cloud_run_v2_service.ingest_api to google_vpc_access_connector.data
  • routes-to from google_cloud_run_v2_service.warehouse_loader to google_vpc_access_connector.data
  • runs-as from google_cloud_run_v2_service.enrichment to google_service_account.enrichment
  • runs-as from google_cloud_run_v2_service.ingest_api to google_service_account.ingest_api
  • runs-as from google_cloud_run_v2_service.warehouse_loader to google_service_account.warehouse_loader
  • subscribes-to from google_pubsub_subscription.events_enriched_sessions to google_pubsub_topic.events_enriched
  • subscribes-to from google_pubsub_subscription.events_enriched_warehouse to google_pubsub_topic.events_enriched
  • subscribes-to from google_pubsub_subscription.events_raw_enrichment to google_pubsub_topic.events_raw
  • subscribes-to from google_pubsub_subscription.events_raw_stream_consumer to google_pubsub_topic.events_raw
  • runs-as from kubernetes_deployment_v1.analytics_api to kubernetes_service_account_v1.analytics_api
  • runs-as from kubernetes_deployment_v1.feature_builder to kubernetes_service_account_v1.feature_builder
  • runs-as from kubernetes_deployment_v1.session_windower to kubernetes_service_account_v1.session_windower
  • runs-as from kubernetes_deployment_v1.stream_consumer to kubernetes_service_account_v1.stream_consumer
  • runs-as from kubernetes_stateful_set_v1.feature_store to kubernetes_service_account_v1.feature_store
  • runs-as from kubernetes_stateful_set_v1.prometheus to kubernetes_service_account_v1.prometheus
Contexts: 68 added
  • ownership: google_cloud_run_v2_job.legacy_warehouse_sync within google_project.data
  • ownership: google_cloud_run_v2_service.enrichment within google_project.data
  • ownership: google_cloud_run_v2_service.ingest_api within google_project.data
  • ownership: google_cloud_run_v2_service.warehouse_loader within google_project.data
  • ownership: google_compute_firewall.allow_health_checks within google_project.network
  • ownership: google_compute_firewall.allow_internal within google_project.network
  • ownership: google_compute_network.shared within google_project.network
  • ownership: google_compute_router.shared within google_project.network
  • ownership: google_compute_router_nat.shared within google_compute_router.shared
  • ownership: google_compute_subnetwork.data within google_project.network
  • ownership: google_compute_subnetwork.gke within google_project.network
  • ownership: google_compute_subnetwork.serverless within google_project.network
  • ownership: google_container_cluster.data within google_project.data
  • ownership: google_monitoring_alert_policy.subscription_backlog within google_project.data
  • ownership: google_monitoring_service.ingest_api within google_project.data
  • ownership: google_monitoring_slo.ingest_api_availability within google_project.data
  • ownership: google_pubsub_subscription.events_enriched_sessions within google_project.data
  • ownership: google_pubsub_subscription.events_enriched_warehouse within google_project.data
  • ownership: google_pubsub_subscription.events_raw_enrichment within google_project.data
  • ownership: google_pubsub_subscription.events_raw_stream_consumer within google_project.data
  • ownership: google_pubsub_topic.events_enriched within google_project.data
  • ownership: google_pubsub_topic.events_raw within google_project.data
  • ownership: google_redis_instance.data within google_project.data
  • ownership: google_secret_manager_secret.ingest_hmac within google_project.data
  • ownership: google_secret_manager_secret.legacy_warehouse within google_project.data
  • ownership: google_secret_manager_secret.warehouse_db_password within google_project.data
  • ownership: google_service_account.enrichment within google_project.data
  • ownership: google_service_account.gke_nodes within google_project.data
  • ownership: google_service_account.ingest_api within google_project.data
  • ownership: google_service_account.pubsub_push within google_project.data
  • ownership: google_service_account.streaming within google_project.data
  • ownership: google_service_account.warehouse_loader within google_project.data
  • ownership: google_sql_database_instance.data within google_project.data
  • ownership: google_vpc_access_connector.data within google_project.data
  • ownership: kubernetes_daemon_set_v1.otel_collector within kubernetes_namespace_v1.observability
  • ownership: kubernetes_deployment_v1.analytics_api within kubernetes_namespace_v1.analytics
  • ownership: kubernetes_deployment_v1.feature_builder within kubernetes_namespace_v1.batch
  • ownership: kubernetes_deployment_v1.session_windower within kubernetes_namespace_v1.streaming
  • ownership: kubernetes_deployment_v1.stream_consumer within kubernetes_namespace_v1.streaming
  • ownership: kubernetes_horizontal_pod_autoscaler_v1.analytics_api within kubernetes_namespace_v1.analytics
  • ownership: kubernetes_ingress_v1.analytics within kubernetes_namespace_v1.analytics
  • ownership: kubernetes_network_policy_v1.analytics within kubernetes_namespace_v1.analytics
  • ownership: kubernetes_network_policy_v1.batch within kubernetes_namespace_v1.batch
  • ownership: kubernetes_network_policy_v1.observability within kubernetes_namespace_v1.observability
  • ownership: kubernetes_network_policy_v1.streaming within kubernetes_namespace_v1.streaming
  • ownership: kubernetes_service_account_v1.analytics_api within kubernetes_namespace_v1.analytics
  • ownership: kubernetes_service_account_v1.feature_builder within kubernetes_namespace_v1.batch
  • ownership: kubernetes_service_account_v1.feature_store within kubernetes_namespace_v1.batch
  • ownership: kubernetes_service_account_v1.otel_collector within kubernetes_namespace_v1.observability
  • ownership: kubernetes_service_account_v1.prometheus within kubernetes_namespace_v1.observability
  • ownership: kubernetes_service_account_v1.session_windower within kubernetes_namespace_v1.streaming
  • ownership: kubernetes_service_account_v1.stream_consumer within kubernetes_namespace_v1.streaming
  • ownership: kubernetes_service_v1.analytics_api within kubernetes_namespace_v1.analytics
  • ownership: kubernetes_service_v1.feature_store within kubernetes_namespace_v1.batch
  • ownership: kubernetes_service_v1.prometheus within kubernetes_namespace_v1.observability
  • ownership: kubernetes_stateful_set_v1.feature_store within kubernetes_namespace_v1.batch
  • ownership: kubernetes_stateful_set_v1.prometheus within kubernetes_namespace_v1.observability
  • network: google_compute_firewall.allow_health_checks within google_compute_network.shared
  • network: google_compute_firewall.allow_internal within google_compute_network.shared
  • network: google_compute_router.shared within google_compute_network.shared
  • network: google_compute_subnetwork.data within google_compute_network.shared
  • network: google_compute_subnetwork.gke within google_compute_network.shared
  • network: google_compute_subnetwork.serverless within google_compute_network.shared
  • network: google_container_cluster.data within google_compute_network.shared
  • network: google_container_cluster.data within google_compute_subnetwork.gke
  • network: google_redis_instance.data within google_compute_network.shared
  • network: google_sql_database_instance.data within google_compute_network.shared
  • network: google_vpc_access_connector.data within google_compute_subnetwork.serverless
Contributions: 14 added
  • google_compute_global_address.private_services contributes to google_compute_network.shared
  • google_container_node_pool.workloads contributes to google_container_cluster.data
  • google_monitoring_slo.ingest_api_availability contributes to google_monitoring_service.ingest_api
  • google_project_iam_member.enrichment_publisher contributes to google_service_account.enrichment
  • google_project_iam_member.gke_nodes_log_writer contributes to google_service_account.gke_nodes
  • google_project_iam_member.gke_nodes_metric_writer contributes to google_service_account.gke_nodes
  • google_project_iam_member.ingest_api_publisher contributes to google_service_account.ingest_api
  • google_project_iam_member.pubsub_push_invoker contributes to google_service_account.pubsub_push
  • google_project_iam_member.streaming_subscriber contributes to google_service_account.streaming
  • google_project_iam_member.warehouse_loader_sql_client contributes to google_service_account.warehouse_loader
  • google_secret_manager_secret_version.ingest_hmac contributes to google_secret_manager_secret.ingest_hmac
  • google_secret_manager_secret_version.legacy_warehouse contributes to google_secret_manager_secret.legacy_warehouse
  • google_secret_manager_secret_version.warehouse_db_password contributes to google_secret_manager_secret.warehouse_db_password
  • google_service_networking_connection.private_services contributes to google_compute_network.shared

Reported drift

No drift reported in this plan. The export does not establish the refresh scope.

Terraform and OpenTofu omit drift records both when refresh finds no drift and when refresh does not run.

Plan JSON does not record whether refresh was limited (-refresh=false, -target); an unrefreshed object reports no drift; data sources and deposed objects are outside drift records.

Δ Net change

Same determined changes as Planned changes.

Planned architecture

  • Instances: 76
  • Interpreted: 76
  • Relations: 18
  • Contexts: 68
  • Contributions: 14
  • Closures: 139 (100 resolved, 12 absent, 27 indeterminate)

Interpreted counts the instances a Rule matched; Relations, Contexts, and Contributions count determined facts; Uncertainty counts what the evidence could not settle.


Policies

Caution

Verdict: VIOLATED

Planned architecture

1 Policy selected. 1 evaluation violated.

qualification.policy.deny-database

Requirement: Synthetic negative qualification policy.

Violated: 1 evaluation

  • google_sql_database_instance.data: The assertion's queries found no fact or closure.

Details

Provenance
  • Input: /home/runner/work/_temp/rootform-results-bFbDPZ/form.json

  • Form: Plan, saved by rootform 0.1.0-pr.117.1

  • Producer: Terraform or OpenTofu 1.16.4

  • Plan completeness: Complete, as reported in the plan

  • Enrichment: Saved plan paired with this plan JSON (1 module)

  • Stage: Planned

  • Stages: Recorded (reconstructed from Refreshed; no drift entry to reverse), Refreshed, Planned

  • Semantics: 19 Dialects, 1 RF Vocabulary

  • Input: /home/runner/work/_temp/rootform-results-bFbDPZ/form.json

  • Origin: Plan (saved Form)

  • Policy Packs: qualification 0.1.0

Workflow run | Download evidence

@soulbah soulbah changed the title Preview new Rootform CLI Markdown reviews Qualify actual CLI Markdown reports in PRs Oct 2, 2026
soulbah added a commit to rootform-dev/action that referenced this pull request Oct 2, 2026
## Spec and outcome

- Spec or repository-only rationale: SPEC-006, owner-approved complete
review clarification.
- Accepted outcome: every Markdown-producing Action call requests
`--details`. Reports keep one identity and major result blocks, with
audit detail last. Inline size limits retain CLI-written primary
statements and evidence links; complete output files and artifacts
retain every entry.
- Explicit non-goals: semantic parsing, new inputs/outputs, dependency
changes, CLI publication, or moving the published v1 ref.

## Done when and evidence

- Done when command or protocol: `bun run verify`;
`ROOTFORM_TEST_FIXTURES=<clean exact public fixture checkout> bun run
test:integration`; public qualification PR 3.
- Evidence path or exact output: 80 runtime tests / 538 assertions and
115 tooling tests pass. Ten genuine published-binary integrations at
0.1.0-pr.117.1 reject compact preview wording. Report tests cover
current and legacy CLI hierarchy, exact statements/counts and large
exhaustive detail. Final public execution and rendered result are
tracked in [qualification PR
3](rootform-dev/action-qualification#3).
- Full gate: `bun run verify` passed, including workflow lint,
working-set/history secret scans and reproducible committed bundle.

## Risk and privacy

- Security/privacy impact: no permission or artifact inventory change.
Complete derived reports replace compact previews; raw inputs remain
excluded. PR commenting stays opt-in with existing HEAD/run/concurrency
guards.
- Offline and determinism impact: no acquisition or semantic behavior
change. Reports are generated in the same existing CLI calls.
- Dependency or toolchain change: none.
- Rollback path: pin the previous reviewed immutable Action commit.

## Review checklist

- [x] Scope matches accepted spec or repository-only rationale.
- [x] Success, boundary, failure, and regression paths have evidence
proportional to risk.
- [x] No secret, real Terraform material, private AI material, or
generated noise enters Git.
- [x] Primary reviewer inspected final diff and recorded remaining
limits.
@soulbah
soulbah merged commit ebb97aa into dev Oct 2, 2026
11 checks passed
@soulbah
soulbah deleted the preview/cli-markdown branch October 2, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant