Skip to content

0.2.1b6 - Hardening Build Pipeline#13

Merged
a11smiles merged 186 commits intomainfrom
build-deploy
Apr 6, 2026
Merged

0.2.1b6 - Hardening Build Pipeline#13
a11smiles merged 186 commits intomainfrom
build-deploy

Conversation

@a11smiles
Copy link
Copy Markdown
Collaborator

0.2.1b6 — Architectural Hardening & Governance Overhaul

This release is a comprehensive architectural refactoring of the agent system, governance framework, and build pipeline.

Full changelog →

Highlights

Four-Level Taxonomy — Layer → Capability → Component → Resource hierarchy with taxonomy.yaml as the canonical source of truth. All deployment stages carry layer and capability fields with namespace-based governance filtering.

20-Agent Architecture — 7 new agents (infrastructure/data/application/security architects + C#/Python/React developers) with layer ownership, architect→developer delegation, and sub-layer contracts.

Post-Generation Transforms — New governance type for deterministic fabrication fixes applied automatically before QA. Handlers for response_export_values injection, resource group parent_id, private endpoint removal from non-networking stages, unused remote state cleanup, and Cosmos DB schema corrections.

Namespace-Based Governance Filtering — Anti-pattern scans, governor briefs, and policy resolution now filter by ARM service namespace (targets.services). Only governance relevant to the stage's actual resources is sent to the AI or used for scanning.

Standards Re-Enabled — Design standards (STAN-*) restored to the build pipeline after being incorrectly disabled. Standards injected into agent prompts (agent-scoped via applies_to) and QA context (tool/layer-scoped).

QA Improvements — FAIL requires CRITICAL (WARNINGs don't block), agent_name passed to anti-pattern scans, empty provider "azapi" {} accepted, subscription_id/tenant_id recognized as infrastructure variables.

Governance Data Quality — All 778 companion resources have type/name/description. 591 duplicate rules consolidated. Service targets audited across all 108 files. categorydomain on governance docs, categorycapability on stages.

108 Individual Wiki Pages — One page per Azure service, auto-generated with collapsible sidebar. HTML tables for consistent rendering.

Build Quality — azurerm references eliminated from knowledge/governance files. API version child resource lookup fixed. Simplified state management (default terraform.tfstate per stage directory).

Textual 8.x reserves Ctrl+C for clipboard copy in TextArea widgets,
making it unreliable as a quit shortcut. Switch to Ctrl+Q (Textual's
built-in quit binding) and update info bar text accordingly. Remove
the SIGINT suppression hack from _run_tui() that was attempting to
work around this.

Also: add explicit call-to-action after initial AI response in
discovery so the user knows the session is waiting for input, and
fix biz-analyst prompt to always end with actual questions.
…ixes

- Artifact inventory with SHA-256 hashing: tracks file content hashes in
  discovery.yaml so re-runs only process new or changed artifacts
- Governor agent with embedding-based policy retrieval: replaces the ~40KB
  raw policy injection with semantic retrieval (pre-computed neural embeddings
  shipped with wheel, TF-IDF fallback for custom policies)
- Exhaustive debug logging (DEBUG_PROTOTYPE=true): full AI payloads, state
  mutations, decision branches, slash commands, and error tracebacks
- Fix: slash commands no longer consume section loop iterations
- Fix: /restart breaks out of section loop cleanly
- Fix: --context timeout on re-entry (lightweight AI call for classification)
- Improved /why output with topic context and 500-char snippets
- PRU tracking for Copilot users (computed from official multiplier table)
- Copilot default timeout increased from 300s to 480s
- Strip trailing colons from topic headings in stage tree
- Build scripts and CI/CD workflows compute policy embeddings before wheel
- Removed dead code: _SECTION_COMPLETE_MARKER, build_incremental_update_prompt,
  items_by_kind
parse_sections() and extract_section_headers() now only create sections
from level-2 (##) headings. Level-3 (###) subsections are folded into
their parent topic's content, so the user responds once per topic instead
of being prompted for each sub-category.

Biz-analyst prompt updated to explicitly prohibit ### sub-headings and
instruct the AI to use bold text or bullet points for sub-categories.
…through

- Context directives (e.g. "change app name to X") are now recorded as
  confirmed decisions in discovery state, ensuring they reach the architect
- When context_only=True and no new topics are needed, the session exits
  immediately instead of resuming pending topics
- Section loop now only walks kind="topic" items; kind="decision" items
  (auto-extracted implementation questions) are tracked but not walked
  interactively
- prototype_build() and prototype_deploy() now launch the TUI (PrototypeApp)
  for interactive sessions, matching the pattern prototype_design() uses
- TUI is skipped for dry-run, --json, single-stage deploy, or non-interactive
  contexts (sys.stdout.isatty() check prevents test hangs)
- Fix isort ordering in governance/policy_index.py
- README.md, FEATURES.md: 11 agents → 12 (added governor)
- Added governor row to agent table in README.md
- MODELS.md: Copilot timeout 300s → 480s
- Stage orchestrator now dispatches _run_build() and _run_deploy() when
  launched with start_stage="build" or "deploy" (previously only "design")
- Stage kwargs (--reset, --scope, etc.) passed through to stage execution
- Target stage marked IN_PROGRESS before execution, overriding stale
  COMPLETED status from _populate_from_state()
When the user re-runs design after build+deploy have completed, build
and deploy now show as pending (not completed) since they depend on
the design output and will need to be re-run.
TokenTracker now supports an _on_update callback that fires after each
record() call. All four sessions (discovery, build, deploy, backlog)
wire this to console.print_token_status() so the bottom-right status
bar updates after every AI call — not just during specific phases.
The TUI adapter's print_token_status is passed as status_fn from the
orchestrator through the stage to the session. This ensures the
bottom-right status bar updates during all AI calls (including
deployment plan derivation) in TUI mode, where console is None.
_maybe_spinner in build and deploy sessions now runs a background
thread that updates the status bar every second with elapsed time
(e.g. "Analyzing architecture... (5s)") while the AI call is in
progress. Replaces with token counts after the response arrives.
The _maybe_spinner finally block now sends token status via the
"tokens" event after the "end" event, so the status bar switches
from elapsed time to token counts/PRUs once the AI call completes.
PromptInput widget blocks empty submissions by default. Added
allow_empty parameter to TUI adapter's input_fn and enabled it for
"Press Enter to start" confirmation prompts in build and deploy
sessions so pressing Enter without typing proceeds as documented.
Build deployment plan stages now appear as sub-items under "Build"
in the TUI tree. Each stage is marked in-progress when generation
starts and completed when files are written. Callbacks (section_fn,
update_task_fn) are wired from the orchestrator through the build
stage to the build session, matching the design stage pattern.
PromptInput.disable() now clears text and sets display=False so the
widget doesn't take up space or show stale content while the session
is processing. PromptInput.enable() restores display=True.
Before each stage's agent generates code, the governor produces a
policy brief specific to that stage's context (stage name + service
names) and injects it via set_governor_brief(). This ensures generated
IaC code is policy-compliant from the start (e.g. private endpoints,
managed identity) rather than relying solely on post-generation QA
to catch violations.

Deploy stage does not need governor briefs — it executes existing
code via subprocess (terraform apply, az deployment), not generates.
- Governor policy brief is now injected as "MANDATORY GOVERNANCE RULES"
  directly in the task prompt near the end (where models pay the most
  attention), not just buried in system messages where it was drowned
  out in 600KB+ prompts
- Terraform and Bicep agents now have explicit constraints: disable
  public network access, use private endpoints, never guess API versions
Step 1: Lightweight AI call extracts stage-relevant architecture
context plus minimum dependency info from the full document (~2-5KB
output from ~50KB input).

Step 2: Generation call uses focused context + governor brief + task
instructions (~15-20KB total instead of 622KB). Governance brief is
now ~10% of the prompt vs 0.24% previously.

QA remediation loop updated: max 3 attempts with escalating severity
("MUST fix" → "CRITICAL" → "FINAL ATTEMPT"). Each attempt uses
focused context and re-applies the governor brief.
- Full 542KB architecture is condensed into per-stage context summaries
  (~1KB each) via a single AI call after plan derivation, cached in
  build_state.stage_contexts
- Each generation call uses condensed context + governor brief + task
  (~14KB total). Governor brief is 11% of prompt (was 0.24%)
- Knowledge docs and standards stripped from generation calls
- Agent settings temporarily disabled during generation, restored after
- QA remediation uses cached contexts, not full architecture
- Governor brief now includes rationale for MUST rules
- Removed per-stage context extraction AI call (_extract_stage_context)
…ates

The finally block's continue statement caused ALL code after the
try/except/finally to be dead code — mark_stage_generated() and
update_task_fn("completed") never executed. Moved agent settings
restore and continue into the except block (error path only),
with a separate restore on the success path.
Logs content length, content preview, parse_file_blocks() results
(file count and filenames), and written_paths for each stage.
This will identify exactly where the pipeline breaks when AI
generates responses but no files appear on disk.
The embedding retrieval was missing network isolation rules (NET-001,
NET-002) for stages whose description didn't mention "network" or
"private endpoints." Now all rules with severity="required" are
included in every brief, ensuring universal governance constraints
like private endpoints and VNET integration are never omitted.
…rief

- NET-001 updated: explicitly requires disabling public network access
  AND using private endpoints (was only "use private endpoints")
- NET-005 added: requires publicNetworkAccess = Disabled in both
  Terraform azapi body blocks and Bicep properties
- Anti-pattern safe_patterns: networking check now exempts correct
  values (= false, = "Disabled")
- Governor brief _format_brief() appends ALL anti-patterns as
  NEVER GENERATE directives — loaded from governance YAML files
  with zero hardcoded logic. 33 checks across 9 domains.
- Re-computed policy embeddings (65 rules, was 64)
_apply_governor_brief() was called AFTER _build_stage_task(), so when
_build_stage_task() checked getattr(agent, "_governor_brief", "") to
inject the ## MANDATORY GOVERNANCE RULES section into the task string,
the brief was always empty. The governance rules only appeared in
system message [2] — never in the task string where the model pays
the most attention.

Fix: call _apply_governor_brief() BEFORE _build_stage_task(). Added
_select_agent() to separate agent selection from task construction.
Now the MANDATORY GOVERNANCE RULES section (including all NEVER
GENERATE directives) appears at the end of the task string.
a11smiles added 19 commits April 6, 2026 02:25
Adds 'Stage N post-transform' debug entry with transformed_full=
containing all written files reassembled in fenced code block format,
matching the content_full format from the response log entry. Enables
extraction scripts to compare pre-transform vs post-transform quality.
…ponse

CP_RESPONSE files now extract transformed_full from the post-transform
log entry — the final output after governance transforms. Falls back to
content_full if no transforms were applied.
Tests updated to use code-generating agent names (terraform-agent) for
anti-pattern detection tests. Non-code agents (biz-analyst, cost-analyst,
project-manager, cloud-architect) correctly no longer trigger anti-patterns
since they aren't in applies_to lists.
…Python/React knowledge

1. TERRAFORM_PROMPT: response_export_values now required on EVERY
   azapi_resource — explicit violations section with rejected examples
2. TFM-TF-002: structured transform auto-adds response_export_values
   to azapi_resource blocks missing it
3. TFM-NET-001: structured transform removes PE/DNS resources from
   non-networking stages
4. Python knowledge: Common Pitfalls — module-level instantiation,
   mutable defaults, hmac.new, Protocol interfaces, pinned deps
5. React knowledge: Common Pitfalls — require() in Vitest, dynamic
   import() in tests, InstrumentationKey deprecation, MSAL mocking
…ocks

Resource groups require parent_id = /subscriptions/${var.subscription_id}
but the AI consistently omits it. Structured transform detects resource
group type and injects parent_id after the name line.
…s lists

_normalize_stages now adds resourceGroups to the services list for all
core/infra/data stages that don't already have it. This ensures
governance targeting (transforms, anti-patterns, policies) fires
correctly — resource groups are created inline in every IaC stage but
weren't previously listed as a service.

TFM-RG-001 targets services: [] as a safety net since the handler
already scopes to resourceGroups type blocks only.
Adding Microsoft.Resources/resourceGroups to every IaC stage caused
AZ-RG-001/002 policies to fire on stages that don't create resource
groups, adding noise and potentially causing duplicate RG creation.

TFM-RG-001 with services: [] handles the parent_id fix regardless
of the services list — no injection needed.
QA was flagging empty provider "azapi" {} as CRITICAL, recommending
subscription_id/tenant_id be added. This contradicts the TERRAFORM_PROMPT
which explicitly requires the provider block to stay empty — az CLI
context provides the subscription.
The handler field was defined on the Transform dataclass but never
loaded from the YAML entry. All structured transforms (TFM-TF-001,
TFM-TF-002, TFM-RG-001, TFM-NET-001) were silently skipped because
handler was always empty.
The regex-based block matching stopped at the first closing brace,
breaking on nested body/properties blocks. Now uses brace depth
counting to find the correct block boundary.
…re variables

QA was flagging tenant_id as unused dead code. These variables are used
by deploy.sh (az account set), locals.tf (ARM resource ID construction),
and parent_id on resource groups — they are not dead code.
The #1 recurring QA failure — every build had 10+ stages generating
terraform.tfstate instead of the convention path. Transform detects
empty backend local {} and wrong terraform.tfstate paths, replaces
with correct ../../../.terraform-state/stage-N-slug.tfstate derived
from stage context.

Also adds stage dict parameter to apply() for context-dependent
structured handlers.
Cross-file fix: _remove_unused_remote_state now accepts stage_content
(all stage files concatenated) for reference checking. Prevents false
removal of remote state blocks referenced in locals.tf/outputs.tf.

apply() accepts stage_content parameter. _apply_stage_transforms reads
all files upfront and passes combined content to apply().

35 unit tests covering all 7 transform handlers: load, filtering,
capacityMode, unused remote state (single + cross-file), export values,
resource group parent_id, PE removal, state path, and stage context.
Removed centralized .terraform-state/ directory, stage-N-slug.tfstate
convention, TFM-TF-003 transform, and STAN-TF-011 standard. Each stage
uses the default terraform.tfstate in its own directory. Cross-stage
references use relative paths (../stage-1-managed-identity/terraform.tfstate).

This eliminates the #1 recurring QA failure — the AI naturally generates
backend "local" {} which now just works.
azapi v2 serializes Terraform null as JSON null, but ARM rejects
properties set to null — they must be absent from the body. The AI
was generating vnetConfiguration = var.enable ? {...} : null which
causes 400 Bad Request.

- TERRAFORM_PROMPT: added CRITICAL NO NULL VALUES IN BODY section
  with merge() pattern for conditional properties
- Container App Environment knowledge: added pitfall with code example
- AZ-CA-001: added prohibition for conditional null on vnetConfiguration
…e path convention

QA still had the old stage-N-slug.tfstate checklist item (line 263)
causing false CRITICAL on every stage. Updated to accept backend local {}
and default terraform.tfstate. Updated remote state defaults to use
relative paths (../stage-N-name/terraform.tfstate).

Full audit confirmed no other stale references to .terraform-state/ or
stage-N-slug convention remain in code, governance, or tests.
@a11smiles a11smiles requested a review from Copilot April 6, 2026 20:51
@a11smiles a11smiles changed the title Build deploy 0.2.1b6 - Hardening Build Pipeline Apr 6, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements the 0.2.1b6 governance/agent architecture overhaul, including a new governance validation command, embedding-based policy retrieval scaffolding, expanded policy/anti-pattern catalogs, and multi-agent role refactoring.

Changes:

  • Adds new governance policy and anti-pattern document formats (with IDs/targets) plus YAML safe-loading and filtering support.
  • Introduces embedding backends and a governor agent to enable brief/review workflows; updates CI to validate governance and compute embeddings.
  • Refactors the agent lineup (new architects/developers/advisor), adds az prototype validate, and enhances token tracking (Copilot PRUs).

Reviewed changes

Copilot reviewed 109 out of 502 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
azext_prototype/governance/policies/azure/messaging/notification-hubs.policy.yaml Adds Notification Hubs governance policy in the new schema.
azext_prototype/governance/policies/azure/management/managed-grafana.policy.yaml Adds Managed Grafana governance policy in the new schema.
azext_prototype/governance/policies/azure/management/logic-apps.policy.yaml Adds Logic Apps governance policy in the new schema.
azext_prototype/governance/policies/azure/management/communication-services.policy.yaml Adds Communication Services governance policy in the new schema.
azext_prototype/governance/policies/azure/management/automation.policy.yaml Adds Automation governance policy in the new schema.
azext_prototype/governance/policies/azure/key-vault.policy.yaml Removes legacy Key Vault policy document (old schema).
azext_prototype/governance/policies/azure/identity/resource-groups.policy.yaml Adds Resource Groups governance policy in the new schema.
azext_prototype/governance/policies/azure/identity/managed-identity.policy.yaml Adds Managed Identity governance policy in the new schema.
azext_prototype/governance/policies/azure/functions.policy.yaml Removes legacy Functions policy document (old schema).
azext_prototype/governance/policies/azure/data/fabric.policy.yaml Adds Fabric governance policy in the new schema.
azext_prototype/governance/policies/azure/cosmos-db.policy.yaml Removes legacy Cosmos DB policy document (old schema).
azext_prototype/governance/policies/azure/container-apps.policy.yaml Removes legacy Container Apps policy document (old schema).
azext_prototype/governance/policies/azure/compute/container-instances.policy.yaml Adds Container Instances governance policy in the new schema.
azext_prototype/governance/policies/azure/app-service.policy.yaml Removes legacy App Service policy document (old schema).
azext_prototype/governance/policies/azure/ai/cognitive-services.policy.yaml Adds Cognitive Services governance policy in the new schema.
azext_prototype/governance/policies/azure/ai/bot-service.policy.yaml Adds Bot Service governance policy in the new schema.
azext_prototype/governance/policies/azure/ai/azure-ai-search.policy.yaml Adds Azure AI Search governance policy in the new schema.
azext_prototype/governance/embeddings.py Introduces TF-IDF + optional neural embedding backends for retrieval.
azext_prototype/governance/anti_patterns/terraform_structure.yaml Adds Terraform structure anti-pattern domain in the new schema.
azext_prototype/governance/anti_patterns/storage.yaml Migrates Storage anti-patterns to the new schema format with IDs/targets.
azext_prototype/governance/anti_patterns/monitoring.yaml Migrates Monitoring anti-patterns to the new schema format with IDs/targets.
azext_prototype/governance/anti_patterns/encryption.yaml Migrates Encryption anti-patterns to the new schema format with IDs/targets.
azext_prototype/governance/anti_patterns/cost.yaml Migrates Cost anti-patterns to the new schema format with IDs/targets.
azext_prototype/governance/anti_patterns/containers.yaml Migrates Containers anti-patterns to the new schema format with IDs/targets.
azext_prototype/governance/anti_patterns/bicep_structure.yaml Adds Bicep structure anti-pattern domain in the new schema.
azext_prototype/governance/anti_patterns/authentication.yaml Migrates Authentication anti-patterns to the new schema format with IDs/targets.
azext_prototype/governance/anti_patterns/init.py Refactors loader/scanner to support new schema, IDs, and service/agent filtering.
azext_prototype/governance/init.py Adds shared safe_load_yaml helper for consistent YAML load behavior.
azext_prototype/custom.py Adds debug logging init + TUI launch paths for build/deploy + new validate command.
azext_prototype/commands.py Registers az prototype validate CLI command.
azext_prototype/azext_metadata.json Bumps extension version to 0.2.1b6.
azext_prototype/ai/token_tracker.py Adds Copilot PRU tracking + model table updates + callback hook.
azext_prototype/ai/provider.py Adds shared message/tool-call serialization helpers.
azext_prototype/ai/github_models.py Switches to shared serialization helpers.
azext_prototype/ai/azure_openai.py Switches to shared serialization helpers.
azext_prototype/agents/governance.py Propagates agent/tool/service context into anti-pattern scanning.
azext_prototype/agents/builtin/security_reviewer.py Removes Security Reviewer built-in agent implementation.
azext_prototype/agents/builtin/security_architect.py Adds Security Architect agent implementation.
azext_prototype/agents/builtin/qa_engineer.py Increases token budget and routes governance warnings via shared helper.
azext_prototype/agents/builtin/project_manager.py Routes governance warnings via shared helper.
azext_prototype/agents/builtin/monitoring_agent.py Updates diagnostic settings example to azapi and routes governance warnings via shared helper.
azext_prototype/agents/builtin/infrastructure_architect.py Adds Infrastructure Architect agent implementation.
azext_prototype/agents/builtin/iac_shared_rules.py Adds shared IaC rules injected into Terraform/Bicep prompts.
azext_prototype/agents/builtin/governor_agent.py Adds Governor agent (brief/review) to support embedding-based governance.
azext_prototype/agents/builtin/doc_agent.py Expands doc completeness requirements and increases token budget.
azext_prototype/agents/builtin/definitions/terraform_agent.yaml Updates Terraform agent definition to azapi-only conventions and new file layout.
azext_prototype/agents/builtin/definitions/security_architect.yaml Adds Security Architect YAML definition.
azext_prototype/agents/builtin/definitions/react_developer.yaml Adds React developer YAML definition.
azext_prototype/agents/builtin/definitions/python_developer.yaml Adds Python developer YAML definition.
azext_prototype/agents/builtin/definitions/infrastructure_architect.yaml Adds Infrastructure Architect YAML definition.
azext_prototype/agents/builtin/definitions/data_architect.yaml Adds Data Architect YAML definition.
azext_prototype/agents/builtin/definitions/csharp_developer.yaml Adds C# developer YAML definition.
azext_prototype/agents/builtin/definitions/application_architect.yaml Adds Application Architect YAML definition.
azext_prototype/agents/builtin/definitions/app_developer.yaml Refocuses app-developer as a generic fallback agent.
azext_prototype/agents/builtin/data_architect.py Adds Data Architect agent implementation.
azext_prototype/agents/builtin/csharp_developer.py Adds C# developer agent implementation.
azext_prototype/agents/builtin/cost_analyst.py Routes governance warnings via shared helper.
azext_prototype/agents/builtin/cloud_architect.py Updates delegation targets and routes governance warnings via shared helper.
azext_prototype/agents/builtin/biz_analyst.py Tightens heading rules to avoid UI topic splitting.
azext_prototype/agents/builtin/bicep_agent.py Injects shared IaC rules and increases token budget; expands prompt requirements.
azext_prototype/agents/builtin/application_architect.py Adds Application Architect agent implementation.
azext_prototype/agents/builtin/app_developer.py Updates generic developer agent behavior, scope, and token budget.
azext_prototype/agents/builtin/advisor.py Adds Advisor agent for non-blocking trade-off notes.
azext_prototype/agents/builtin/init.py Updates built-in agent registry to include new agents and remove security reviewer.
azext_prototype/agents/base.py Adds new capabilities, sub-layer contracts, and centralizes governance warning handling.
azext_prototype/_params.py Adds CLI parameters for az prototype validate.
README.md Updates agent list blurb and adds governor to the built-in agent table.
MODELS.md Updates Copilot timeout guidance.
FEATURES.md Updates multi-agent system count and includes governance.
COMMANDS.md Renames script resource group flag in docs.
.github/workflows/release.yml Consolidates governance validation and adds embedding computation step.
.github/workflows/pr.yml Consolidates governance validation and adds embedding computation step.
.github/workflows/ci.yml Consolidates governance validation and adds embedding computation step.
.gitattributes Enforces LF line endings (especially for .sh).
Comments suppressed due to low confidence (1)

README.md:1

  • The documented built-in agent count and table entries are inconsistent with the code changes: security-reviewer was removed, and multiple new agents were added (e.g., security-architect, infrastructure-architect, data-architect, application-architect, advisor, language-specific developers). Update the README agent count and table to reflect the actual built-in agents shipped in ALL_BUILTIN_AGENTS.
# az prototype — Azure CLI Extension

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

class TestAzureApiVersionInjection:
"""Verify agents inject Azure API version into system messages."""

def test_terraform_agent_injects_azure_api_version(self):
agent = TerraformAgent()
constraint_text = " ".join(agent.constraints).lower()
assert "pinned" in constraint_text

joined = "\n".join(contents)
assert "AZURE API VERSION" in joined
assert "learn.microsoft.com" in joined

resource_group="rg-test",
registry="myregistry.azurecr.io",
)

a11smiles and others added 4 commits April 6, 2026 16:57
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
iac_shared_rules.py incorrectly said PEs belong in service stages.
Corrected to match constraints.md, infrastructure_architect.py, and
TFM-NET-001: networking stage creates all PEs, service stages only
set publicNetworkAccess = Disabled.
@a11smiles a11smiles merged commit 3882a8a into main Apr 6, 2026
19 of 20 checks passed
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.

3 participants