Skip to content

Commit 8e4f0a5

Browse files
authored
Merge branch 'main' into docs/ai-visual-diagrams-181002
2 parents 6639c38 + f458b9b commit 8e4f0a5

12 files changed

Lines changed: 233 additions & 11 deletions

.github/workflows/codeql.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ jobs:
2222
language: [ 'actions' ]
2323
steps:
2424
- name: Checkout repository
25-
uses: actions/checkout@v7
25+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
2626
- name: Initialize CodeQL
27-
uses: github/codeql-action/init@v4
27+
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
2828
with:
2929
languages: ${{ matrix.language }}
3030
- name: Autobuild
31-
uses: github/codeql-action/autobuild@v4
31+
uses: github/codeql-action/autobuild@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
3232
- name: Perform CodeQL Analysis
33-
uses: github/codeql-action/analyze@v4
33+
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0

.github/workflows/pages.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ jobs:
1616
runs-on: ubuntu-latest
1717
timeout-minutes: 10
1818
steps:
19-
- uses: actions/checkout@v7
20-
- uses: actions/setup-python@v6
19+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
20+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
2121
with:
2222
python-version: 3.x
2323
- run: pip install mkdocs-material
2424
- run: mkdocs build
25-
- uses: actions/upload-pages-artifact@v5
25+
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
2626
with:
2727
path: ./site
2828
deploy:
@@ -35,4 +35,4 @@ jobs:
3535
steps:
3636
- name: Deploy to GitHub Pages
3737
id: deployment
38-
uses: actions/deploy-pages@v5
38+
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0

.github/workflows/pr-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ jobs:
1616
runs-on: ubuntu-latest
1717
timeout-minutes: 10
1818
steps:
19-
- uses: amannn/action-semantic-pull-request@v6
19+
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
2020
env:
2121
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Release Please
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
jobs:
8+
release-please:
9+
permissions:
10+
contents: write
11+
pull-requests: write
12+
issues: write
13+
uses: Coding-Autopilot-System/.github/.github/workflows/release-please-reusable.yml@f288e5e3b67b29a2c08880b76da7b852f4a132d0

.github/workflows/stale.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414
timeout-minutes: 10
1515
steps:
16-
- uses: actions/stale@v10
16+
- uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
1717
with:
1818
stale-issue-message: 'This issue is stale because it has been open 60 days with no activity.'
1919
stale-pr-message: 'This PR is stale because it has been open 60 days with no activity.'

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "0.0.0"
3+
}

README.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,37 @@ Foundry RBAC is disabled unless both `foundryProjectResourceId` and
5858
created only at that Foundry project resource. Select and approve the minimum
5959
role externally; the template does not assume a broad built-in role.
6060

61+
## Validation and Linting
62+
63+
Bicep linting is configured via [`bicepconfig.json`](bicepconfig.json), which enables the
64+
`core` analyzer ruleset. Rules covering secrets (`secure-secrets-in-params`,
65+
`outputs-should-not-contain-secrets`, `protect-commandtoexecute-secrets`), hardcoded
66+
environment URLs, and other correctness checks are set to `error`. The `use-recent-api-versions`
67+
rule — which pins resource API versions to recent, supported values — is currently `off` in
68+
`bicepconfig.json` on `main`; enabling it and pinning the stale API versions it flags is tracked
69+
in an open PR (`fix: enable use-recent-api-versions bicep lint rule`, PR #11). Once merged, this
70+
section will describe the rule as enabled rather than in progress.
71+
6172
## Architecture
6273

6374
See [architecture](docs/architecture.md), [threat model](docs/threat-model.md),
6475
and [operations](docs/operations.md). Planning and requirement traceability are
65-
kept under `.planning/`.
76+
kept under `.planning/`. For a docs-as-code wiki (Home, Architecture, Operations, Decisions),
77+
see [`docs/wiki/`](docs/wiki/Home.md).
6678

6779
## Security
6880

6981
Public ingress is disabled by default. No secrets, credentials, or access keys
7082
are accepted by the templates. Runtime access to dependencies uses managed
7183
identity with narrowly scoped RBAC. Private networking and Azure Policy remain
7284
deferred until a target landing-zone contract defines topology and ownership.
85+
86+
## Deployment lock
87+
88+
This repository is maintained **bicep-ready** — linted, parameterized, and (once PR #11 lands)
89+
pinned to recent API versions — but is not deployed. Azure deployment is locked workspace-wide
90+
until a future milestone is deliberately reached; only local and CI `what-if` validation
91+
(`az deployment sub what-if`, invoked by `scripts/what-if.ps1`) runs against a live subscription,
92+
and that command never creates or modifies resources.
93+
94+
<!-- docs-verified: c1585ee195b72c5282f278c98da28c60da75667c 2026-07-08 -->

docs/wiki/Architecture.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Architecture
2+
3+
`cas-platform` is a modular, subscription-scoped Bicep orchestration model with environment
4+
isolation, a strict system-assigned-managed-identity boundary, and workspace-based
5+
observability. The workload module implements the public `cas-reference-product` deployment
6+
interface.
7+
8+
```mermaid
9+
flowchart TD
10+
subgraph Subscription["Azure Subscription (bicep-ready, NOT deployed)"]
11+
Main["infra/main.bicep\nsubscription-scope orchestrator"]
12+
subgraph RG["Environment Resource Group (rg-cas-env)"]
13+
LAW[Log Analytics Workspace] --- AppInsights[Application Insights]
14+
CAE[Container Apps Environment] --- CA[Container App Workload]
15+
Budget[Resource Group Budget]
16+
CA -->|telemetry| AppInsights
17+
CA -->|diagnostics| LAW
18+
end
19+
subgraph ExternalAuth["External Authorization (optional)"]
20+
FoundryRBAC[Foundry RBAC Module] --> FoundryProject[Foundry Project Resource]
21+
end
22+
end
23+
Main -->|deploys| RG
24+
Main -.->|assigns role, only if explicitly configured| FoundryRBAC
25+
CA -->|system-assigned managed identity| FoundryRBAC
26+
```
27+
28+
<!-- codex:generate-image prompt="A pristine architectural blueprint on a drafting table under glass, fully inked and stamped approved, but a padlocked steel gate stands in front of the physical construction site behind it labeled deployment locked; isometric, enterprise blue/graphite palette" style="isometric, enterprise, clean" replaces="mermaid-above" -->
29+
30+
## Environment model
31+
32+
Dev, test, and production environments share the exact same module graph; variation is handled
33+
entirely through parameter files (log retention, workload sizing, ingress configuration, budget
34+
limits). Each environment gets its own isolated resource group, telemetry workspace, compute
35+
environment, identity boundary, and budget.
36+
37+
## Identity and networking
38+
39+
The core workload relies exclusively on a **system-assigned managed identity**. Foundry access
40+
is optional and disabled by default — a role is assigned only at the explicit Foundry project
41+
scope when both a project resource ID and role definition ID are supplied; there are no
42+
subscription-wide assignments. External ingress is disabled by default; private networking is
43+
deferred until a target landing-zone contract is established.
44+
45+
## Deployment lock (NO-AZURE posture)
46+
47+
This repository's Bicep graph is validated (`./scripts/validate.ps1`, linting, subscription-scope
48+
`what-if`) but **never deployed** from this workspace. Per the workspace-wide hard lock: no
49+
Azure service or resource may be provisioned, deployed, or configured from any project under
50+
this workspace — everything runs locally, and cloud hosting is revisited only in a future,
51+
deliberately-scoped milestone. `cas-platform` is "bicep-ready" — linted, parameterized, and
52+
(pending PR #11) API-version-pinned — precisely so that when the lock is lifted, deployment is a
53+
reviewed authorization step, not a design exercise.
54+
55+
## Change safety
56+
57+
1. Linting (`bicepconfig.json` core analyzer ruleset) and contract tests.
58+
2. Subscription-level `what-if` validation (never a live deploy).
59+
3. Explicit deployment authorization — not yet exercised in this repo.
60+
61+
<!-- docs-verified: c1585ee195b72c5282f278c98da28c60da75667c 2026-07-08 -->

docs/wiki/Decisions.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Decisions
2+
3+
## Phase summaries (`.planning/phases/`)
4+
5+
| Phase | Topic |
6+
|---|---|
7+
| [01-safe-azure-foundation](../../.planning/phases/01-safe-azure-foundation/01-01-SUMMARY.md) | v0.1 foundation: subscription-scope orchestration, observability, managed identity, budgets |
8+
| [02-reference-product-integration](../../.planning/phases/02-reference-product-integration/02-01-SUMMARY.md) | Reference-product deployment interface, health probes, workload configuration injection |
9+
10+
## Research (`.planning/research/`)
11+
12+
- [Research summary](../../.planning/research/SUMMARY.md)
13+
14+
## Open PRs affecting this repo's documented posture
15+
16+
- **PR #11**`fix: enable use-recent-api-versions bicep lint rule` (Phase 33 P2). Currently
17+
open; `bicepconfig.json`'s `use-recent-api-versions` rule is `off` on `main` until this merges.
18+
19+
## Architecture Decision Records (`docs/adr/`)
20+
21+
[`docs/adr/`](../adr/README.md) is the formal ADR home for this repo. No sequentially-numbered
22+
ADR files have been recorded yet as of this writing — the directory holds only the governance
23+
README.
24+
25+
<!-- docs-verified: c1585ee195b72c5282f278c98da28c60da75667c 2026-07-08 -->

docs/wiki/Home.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# cas-platform Wiki
2+
3+
`cas-platform` is the production-oriented Azure infrastructure foundation for the
4+
Coding-Autopilot-System (CAS). It provides environment-isolated Container Apps hosting,
5+
workspace-based observability, system-assigned managed identity, budgets, and safe validation
6+
tooling — without storing secrets. The workload module implements the public
7+
`cas-reference-product` deployment interface.
8+
9+
## Deployment status: bicep-ready, not deployed
10+
11+
This repo is **bicep-ready** (linted, parameterized, subscription-scope `what-if` validated) but
12+
Azure deployment is **locked workspace-wide** until a future milestone. See
13+
[Architecture](Architecture.md) for the full statement.
14+
15+
## Quickstart
16+
17+
```powershell
18+
./scripts/validate.ps1
19+
```
20+
21+
To run a non-deploying subscription-scope what-if:
22+
23+
```powershell
24+
az login
25+
./scripts/what-if.ps1 -Environment dev -Location northeurope
26+
```
27+
28+
`what-if.ps1` only invokes `az deployment sub what-if` — it never creates or deploys resources.
29+
30+
## Where to go next
31+
32+
- [Architecture](Architecture.md) — module graph, identity boundary, and the NO-AZURE deploy lock
33+
- [Operations](Operations.md) — verified validation/lint/what-if commands
34+
- [Decisions](Decisions.md) — index of recorded architectural decisions
35+
36+
<!-- docs-verified: c1585ee195b72c5282f278c98da28c60da75667c 2026-07-08 -->

0 commit comments

Comments
 (0)