Skip to content

Commit 31356fb

Browse files
feat(136): align MAESTRO layer names with canonical CSA taxonomy (#146)
* chore(136): feature planning and governance artifacts Add PRD, spec, plan, tasks, research, discovery report, agent assignments, and checklists for Feature 136 (MAESTRO canonical layer correctness fix). All Triad sign-offs complete: - spec.md: PM APPROVED - plan.md: PM APPROVED + Architect APPROVED_WITH_CONCERNS - tasks.md: PM + Architect + Team-Lead APPROVED_WITH_CONCERNS Discovery report documents pre-edit grep sweep of 35 affected files across schemas, shared references, Typst templates, examples, and tests. Closes #136 planning phase. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(136): align MAESTRO layer names with canonical CSA taxonomy BREAKING: Renames schema_version 1.2 -> 1.3 enum values for maestro_layer. Downstream consumers must update tooling to match canonical names. Migration mapping: L5 - Security -> L5 - Evaluation and Observability L6 - Agent Ecosystem -> L6 - Security and Compliance L7 - User Interface -> L7 - Agent Ecosystem L6 - Integration Services -> L6 - Security and Compliance (bug fix) Changes across 15 foundation files: Schema and shared references: - schemas/finding.yaml: schema_version 1.2 -> 1.3, canonical enum values - .claude/skills/tachi-shared/references/maestro-layers-shared.md: canonical acronym expansion (Multi-Agent Environment, Security, Threat, Risk, and Outcome), seven-layer taxonomy table, new L5 observability keyword set (audit log, monitoring, SIEM, telemetry, anomaly detection, etc.), updated L6/L7 keyword reassignment, load-bearing ordering rationale updated - .claude/skills/tachi-shared/references/finding-format-shared.md: enum list updated Pipeline references: - .claude/skills/tachi-orchestration/references/dispatch-rules.md: example row updated - .claude/skills/tachi-orchestration/references/output-schemas.md: schema_version bumped PDF security report templates: - templates/tachi/security-report/maestro-findings.typ: fallback dictionary corrected, fixes pre-existing "Integration Services" bug - templates/tachi/security-report/main.typ: narrative updated - templates/tachi/security-report/full-bleed.typ: infographic-page() function constrained to 7.5in height to handle portrait-aspect images (e.g., threat-executive-architecture.jpg) without wrapping across multiple pages. Fixes Feature 128 latent layout bug discovered during Feature 136 human QA Schema examples and infographic templates: - templates/tachi/output-schemas/threats.md: schema_version + layer names - templates/tachi/infographics/infographic-maestro-stack.md: layer labels - templates/tachi/infographics/infographic-maestro-heatmap.md: layer labels Documentation: - docs/architecture/02_ADRs/ADR-020-maestro-layer-classification.md: acronym, schema version, new Revision History section documenting the enum-value-only-breaking-change minor-bump rule - docs/architecture/00_Tech_Stack/README.md: acronym and schema ref - README.md: MAESTRO overview table rows - CHANGELOG.md: migration guide under Unreleased with old->new mapping, acronym correction, Typst bug fix, regenerated examples inventory, downstream migration 4-step checklist Refs #136. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(136): regenerate example outputs with canonical layer names Wave 2 regeneration of all six example architectures with canonical MAESTRO L5/L6/L7 taxonomy, schema_version 1.3, and byte-deterministic PDF baselines under SOURCE_DATE_EPOCH=1700000000 per ADR-021. Five byte-compat-tested examples (threats.md + security-report.pdf.baseline): - examples/web-app/ - examples/microservices/ - examples/ascii-web-api/ - examples/free-text-microservice/ - examples/mermaid-agentic-app/ Agentic-app showcase (full pipeline regeneration): - examples/agentic-app/threats.md (top-level) - examples/agentic-app/sample-report/ — 28 files: * threats.md, threats.sarif (inherited unchanged) * risk-scores.md, risk-scores.sarif * compensating-controls.md, compensating-controls.sarif * threat-report.md (narrative) * threat-baseball-card-spec.md, threat-system-architecture-spec.md, threat-executive-architecture-spec.md, threat-risk-funnel-spec.md, threat-maestro-stack-spec.md (new), threat-maestro-heatmap-spec.md (new) * attack-trees/ — 13 PNG files (new, per Feature 112) * security-report.pdf (rebuilt with canonical layers and Typst layout fix) * architecture.md (frontmatter sync per Feature 120) Downstream layer classification corrections (code review T041a findings): - examples/agentic-app/threats.md: Guardrails Service L5 -> L6 (keyword `guardrail` matches L6 Security and Compliance) - examples/agentic-app/sample-report/threats.md: same correction - examples/free-text-microservice/threats.md: External Clients and External Payment Provider L6 -> L7 (keywords `client` and `REST API` match L7 Agent Ecosystem, no L6 match) - Downstream propagated in agentic-app sample-report risk-scores.md + .sarif and compensating-controls.md + .sarif Verification: - test_backward_compatibility.py: 5/5 PASS (byte-deterministic) - pytest tests/: 39/39 PASS - grep for old layer names in examples/: zero matches Refs #136. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(136): regenerate backlog after Feature 136 build phase Auto-regeneration of BACKLOG.md from GitHub Issues following the completion of Feature 136 build phase. Issue #136 moved to stage:build. Refs #136. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(136): backlog regen after stage transition to deliver Auto-regeneration reflects #136 move from stage:build to stage:deliver on the project board. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1095dbb commit 31356fb

File tree

63 files changed

+8882
-6434
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+8882
-6434
lines changed

.claude/skills/tachi-orchestration/references/dispatch-rules.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,14 @@ Label this section clearly:
146146
|-----------|----------|---------------|-------------------|---------------|--------------|
147147
| LLM Agent Orchestrator | Process | L3 — Agent Framework | S, T, R, I, D, E | LLM, AG | 11 |
148148
| MCP Tool Server | Process | L3 — Agent Framework | S, T, R, I, D, E | AG | 8 |
149-
| User | External Entity | L7 — User Interface | S, R | — | 2 |
149+
| User | External Entity | L7 — Agent Ecosystem | S, R | — | 2 |
150150
| Knowledge Base | Data Store | L2 — Data Operations | T, I, D | — | 3 |
151151
| External API | External Entity | Unclassified | S, R | — | 2 |
152152

153153
In this example:
154154
- "LLM Agent Orchestrator" is a Process (6 STRIDE agents) with dual-dispatch (3 LLM + 2 AG agents) = 11 total. Classified as L3 (Agent Framework) due to "orchestrator" keyword.
155155
- "MCP Tool Server" is a Process (6 STRIDE agents) with AG dispatch (2 AG agents) = 8 total. Classified as L3 due to "MCP server" keyword.
156-
- "User" is an External Entity (2 STRIDE agents) with no AI match = 2 total. Classified as L7 due to user-facing entity.
156+
- "User" is an External Entity (2 STRIDE agents) with no AI match = 2 total. Classified as L7 (Agent Ecosystem) due to the `user` keyword matching human-agent interaction scope.
157157
- "Knowledge Base" is a Data Store (3 STRIDE agents) with no AI match = 3 total. Classified as L2 due to "knowledge base" keyword.
158158
- "External API" is an External Entity with no matching MAESTRO keywords = Unclassified.
159159

.claude/skills/tachi-orchestration/references/output-schemas.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ The output begins with YAML frontmatter containing exactly these fields:
2323

2424
```yaml
2525
---
26-
schema_version: "1.2"
26+
schema_version: "1.3"
2727
date: "YYYY-MM-DD"
2828
input_format: "detected-or-declared-format"
2929
classification: "confidential"

.claude/skills/tachi-shared/references/finding-format-shared.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ These fields are present in specific pipeline contexts but not required for ever
6161
| `dfd_element_type` | string (enum) | Threat agent output | DFD classification of the target component. One of: `External Entity`, `Process`, `Data Store`, `Data Flow`. |
6262
| `delta_status` | string (enum) | Baseline-aware runs | Lifecycle status: `NEW`, `UNCHANGED`, `UPDATED`, `RESOLVED`. Defaults to `NEW` when no baseline is present. |
6363
| `baseline_run_id` | string (nullable) | Baseline-aware runs | Run ID of the baseline that first discovered this finding. Null for first-run findings. |
64-
| `maestro_layer` | string (enum) | Phase 1 classification | CSA MAESTRO architectural layer classification for the finding's target component. One of: `L1 — Foundation Model`, `L2 — Data Operations`, `L3 — Agent Framework`, `L4 — Deployment Infrastructure`, `L5 — Security`, `L6 — Agent Ecosystem`, `L7 — User Interface`, `Unclassified`. Defaults to `"Unclassified"` when not present or when the component matched no layer keywords. Assigned during Phase 1 and inherited by findings in Phase 3. |
64+
| `maestro_layer` | string (enum) | Phase 1 classification | CSA MAESTRO architectural layer classification for the finding's target component. One of: `L1 — Foundation Model`, `L2 — Data Operations`, `L3 — Agent Framework`, `L4 — Deployment Infrastructure`, `L5 — Evaluation and Observability`, `L6 — Security and Compliance`, `L7 — Agent Ecosystem`, `Unclassified`. Defaults to `"Unclassified"` when not present or when the component matched no layer keywords. Assigned during Phase 1 and inherited by findings in Phase 3. |
6565
| `correlation_group` | string | Correlated findings | Correlation group ID (e.g., `CG-1`). Present when the finding belongs to a cross-category correlation group. |
6666
| `fingerprints` | object | SARIF output | Partial fingerprints for cross-run correlation: `findingId/v1` (primary key) and `primaryLocationLineHash` (validation signal). |
6767

.claude/skills/tachi-shared/references/maestro-layers-shared.md

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ consumers:
1414

1515
Canonical CSA MAESTRO seven-layer taxonomy definitions for agentic AI architectures. This is the single source of truth for layer identifiers, descriptions, keyword mappings, and the classification algorithm used during Phase 1 (Scope). All consuming agents should Read this file rather than maintaining inline definitions.
1616

17-
**Source**: Cloud Security Alliance — MAESTRO (Multi-Agent Environment Security Toolkit for Reasoning and Orchestration), February 2025.
17+
**Source**: Cloud Security Alliance — MAESTRO (Multi-Agent Environment, Security, Threat, Risk, and Outcome), February 2025.
1818

1919
---
2020

@@ -33,13 +33,17 @@ MAESTRO layer classification runs during Phase 1 after DFD classification. It as
3333

3434
### Ordering Rationale
3535

36-
The L1-L7 evaluation order is load-bearing — changing the order changes classification results. The ordering follows a specificity gradient:
36+
The L1-L7 evaluation order follows a specificity gradient from most specific to most general, with observability placed before security to ensure detective controls are classified correctly.
3737

38-
- **L1 (Foundation Model)** is evaluated first because foundation model keywords are the most specific and least ambiguous.
39-
- **L7 (User Interface)** is evaluated last because UI keywords (e.g., "API endpoint") are the most general and could match components at other layers.
40-
- **L4 (Deployment Infrastructure)** and **L5 (Security)** are evaluated in the middle because their keywords have moderate specificity.
38+
- **L1 (Foundation Models)** is evaluated first because foundation model keywords (LLM, GPT, Claude, Gemini, inference engine) are the most specific and least ambiguous — they rarely match components at other layers.
39+
- **L2 (Data Operations)** follows because data pipeline keywords (vector, RAG, embedding, dataset) are domain-specific to data handling infrastructure.
40+
- **L3 (Agent Frameworks)** is next because agent orchestration keywords (orchestrator, planner, tool dispatch, MCP server) are specific to agentic orchestration layers.
41+
- **L4 (Deployment Infrastructure)** is evaluated in the middle because infrastructure keywords (container, load balancer, API gateway) are common but clearly scoped to runtime deployment.
42+
- **L5 (Evaluation and Observability)** is evaluated before L6 Security so that detective control keywords (audit log, monitoring, SIEM, anomaly detection, telemetry) classify to the observability layer rather than being misrouted to security. This ordering resolves the semantic ambiguity where "audit log" could match either layer — first-match-wins with L5-before-L6 gives the correct observability classification.
43+
- **L6 (Security and Compliance)** is evaluated after L5 because security keywords (auth, WAF, firewall, guardrail, RBAC, IAM) are specific to preventive controls and access enforcement. Components matching both L5 and L6 keywords classify to L5 first (e.g., "security audit log" → L5 via `audit log` match).
44+
- **L7 (Agent Ecosystem)** is evaluated last because it is the broadest catch-all — covering multi-agent coordination (multi-agent, swarm, delegation), agent-to-agent protocols, and human-agent interaction (chat UI, dashboard, API endpoint, web portal). Keywords here are the most general and could potentially match components at other layers, so L7 evaluates last to avoid capturing specific components that belong elsewhere.
4145

42-
**WARNING**: Changing keyword order changes classification. Test against all example architectures after any modification to the keyword table.
46+
**WARNING**: Changing keyword order changes classification. The L5-before-L6 ordering is load-bearing for canonical MAESTRO observability/security separation. Test against all six example architectures after any modification to the keyword table.
4347

4448
---
4549

@@ -51,9 +55,9 @@ The L1-L7 evaluation order is load-bearing — changing the order changes classi
5155
| L2 | Data Operations | Data pipelines, vector stores, embedding indexes, and training/retrieval data management | Vector DB, RAG pipeline, training dataset, embedding index, knowledge base |
5256
| L3 | Agent Framework | Orchestration layers, planning engines, tool dispatch, and agent execution frameworks | Agent orchestrator, tool server, MCP server, workflow engine, planner |
5357
| L4 | Deployment Infrastructure | Runtime environments, networking, and infrastructure services | API gateway, load balancer, Kubernetes cluster, container runtime, CDN |
54-
| L5 | Security | Authentication, authorization, content filtering, and security monitoring | WAF, auth service, secrets manager, guardrail, rate limiter, IAM |
55-
| L6 | Agent Ecosystem | Multi-agent coordination, delegation, and inter-agent communication | Multi-agent supervisor, agent mesh, delegation broker, swarm coordinator |
56-
| L7 | User Interface | User-facing surfaces and API endpoints for human interaction | Chat UI, admin dashboard, REST API, GraphQL endpoint, web portal |
58+
| L5 | Evaluation and Observability | Detective controls, logging, monitoring, anomaly detection, forensics, and telemetry collection | Audit logger, SIEM, observability stack, metrics collector, alerting system, forensic log store |
59+
| L6 | Security and Compliance | Authentication, authorization, content filtering, preventive controls, and compliance enforcement | WAF, auth service, secrets manager, guardrail, rate limiter, IAM, RBAC, encryption service |
60+
| L7 | Agent Ecosystem | Multi-agent coordination, delegation, agent-to-agent communication, and human-agent interaction surfaces | Multi-agent supervisor, agent mesh, delegation broker, swarm coordinator, chat UI, admin dashboard, REST API |
5761

5862
---
5963

@@ -129,15 +133,30 @@ Keywords are matched case-insensitively against component name, description, and
129133
| queue |
130134
| registry |
131135

132-
### L5 — Security
136+
### L5 — Evaluation and Observability
137+
138+
| Keyword |
139+
|---------|
140+
| audit log |
141+
| monitoring |
142+
| SIEM |
143+
| anomaly detection |
144+
| telemetry |
145+
| log |
146+
| metrics |
147+
| tracing |
148+
| forensics |
149+
| alerting |
150+
| observability |
151+
152+
### L6 — Security and Compliance
133153

134154
| Keyword |
135155
|---------|
136156
| auth |
137157
| WAF |
138158
| firewall |
139159
| secrets manager |
140-
| audit log |
141160
| guardrail |
142161
| content filter |
143162
| rate limit |
@@ -147,7 +166,7 @@ Keywords are matched case-insensitively against component name, description, and
147166
| access control |
148167
| security |
149168

150-
### L6 — Agent Ecosystem
169+
### L7 — Agent Ecosystem
151170

152171
| Keyword |
153172
|---------|
@@ -160,11 +179,6 @@ Keywords are matched case-insensitively against component name, description, and
160179
| sub-agent |
161180
| agent registry |
162181
| agent mesh |
163-
164-
### L7 — User Interface
165-
166-
| Keyword |
167-
|---------|
168182
| chat UI |
169183
| dashboard |
170184
| admin console |

CHANGELOG.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,78 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
---
99

10+
## [Unreleased]
11+
12+
### Breaking Changes — Correctness Fix (#136)
13+
14+
**MAESTRO Canonical Layer Alignment**: tachi's MAESTRO seven-layer taxonomy has been aligned with the canonical CSA Ken Huang reference. Three L5/L6/L7 layer names, the acronym expansion, and a third-divergent name ("Integration Services") in the Typst PDF template have been corrected. This is a **correctness fix**, not a feature addition.
15+
16+
#### Enum Value Migration (`schemas/finding.yaml` `maestro_layer`)
17+
18+
The `maestro_layer` enum in `schemas/finding.yaml` has changed values. Downstream consumers (dashboards, scripts, tooling built on the enum) MUST update their code.
19+
20+
| Old Value | New Value |
21+
|-----------|-----------|
22+
| `L5 — Security` | `L5 — Evaluation and Observability` |
23+
| `L6 — Agent Ecosystem` | `L6 — Security and Compliance` |
24+
| `L7 — User Interface` | `L7 — Agent Ecosystem` |
25+
| `L6 — Integration Services` (Typst template bug) | `L6 — Security and Compliance` |
26+
27+
L1–L4 enum values are unchanged.
28+
29+
#### Schema Version Bump
30+
31+
`schemas/finding.yaml` schema version bumped from `1.2` to `1.3`. This signals the enum-value-only breaking change. The schema shape and required fields are unchanged — only the allowed values for `maestro_layer` changed. Per ADR-020, enum-value-only breaking changes warrant a minor schema bump (not major), provided schema shape and required fields are unchanged.
32+
33+
#### Acronym Correction
34+
35+
The MAESTRO acronym expansion in `.claude/skills/tachi-shared/references/maestro-layers-shared.md` (line 17) and `docs/architecture/02_ADRs/ADR-020-maestro-layer-classification.md` (line 123) has been corrected from:
36+
37+
- **Old**: "Multi-Agent Environment Security Toolkit for Reasoning and Orchestration"
38+
- **New**: "Multi-Agent Environment, Security, Threat, Risk, and Outcome"
39+
40+
The new form matches the canonical CSA source.
41+
42+
#### Typst PDF Template Fix
43+
44+
`templates/tachi/security-report/maestro-findings.typ` fallback dictionary (lines 132-134) previously contained `"L6": "Integration Services"` — a third divergent name matching neither the canonical CSA spec nor the prior shared reference. This pre-existing bug was corrected as part of this fix.
45+
46+
#### Regenerated Example Outputs
47+
48+
All six example architectures in `examples/*` have had their threat model outputs regenerated with canonical layer names:
49+
50+
- `examples/web-app/` — threats.md + security-report.pdf.baseline
51+
- `examples/microservices/` — threats.md + security-report.pdf.baseline
52+
- `examples/ascii-web-api/` — threats.md + security-report.pdf.baseline
53+
- `examples/free-text-microservice/` — threats.md + security-report.pdf.baseline
54+
- `examples/mermaid-agentic-app/` — threats.md + threat-report.md + threat-infographic-spec.md + attack-trees/ + security-report.pdf.baseline
55+
- `examples/agentic-app/sample-report/` — full pipeline (threats.md, risk-scores.md, compensating-controls.md, threat-report.md, infographic specs, security-report.pdf)
56+
57+
The five non-agentic-app PDF baselines are byte-deterministic under `SOURCE_DATE_EPOCH=1700000000` per ADR-021. The agentic-app sample remains intentionally excluded from byte-determinism testing due to non-deterministic Gemini infographic generation.
58+
59+
#### New L5 Keyword Set
60+
61+
A new L5 Evaluation and Observability keyword section has been added covering: audit log, monitoring, observability, telemetry, anomaly detection, SIEM, forensics, behavioral monitoring, metrics, human oversight, log aggregation. Previously, findings targeting audit loggers and observability components had no dedicated layer and were misrouted or lost.
62+
63+
#### Downstream Migration Guidance
64+
65+
If you consume tachi output programmatically:
66+
67+
1. Update any hardcoded references to the old layer names (see enum migration table above)
68+
2. Update any scripts parsing `maestro_layer` values from `threats.md`, `risk-scores.md`, or `compensating-controls.md`
69+
3. Regenerate any custom report templates that reference layer names
70+
4. Check `schema_version` field — expect `"1.3"` going forward
71+
72+
#### References
73+
74+
- PRD: [docs/product/02_PRD/136-maestro-canonical-layer-correctness-fix-2026-04-10.md](docs/product/02_PRD/136-maestro-canonical-layer-correctness-fix-2026-04-10.md)
75+
- Spec: [specs/136-maestro-canonical-layer/spec.md](specs/136-maestro-canonical-layer/spec.md)
76+
- Plan: [specs/136-maestro-canonical-layer/plan.md](specs/136-maestro-canonical-layer/plan.md)
77+
- ADR-020 (canonical taxonomy rule): [docs/architecture/02_ADRs/ADR-020-maestro-layer-classification.md](docs/architecture/02_ADRs/ADR-020-maestro-layer-classification.md)
78+
- GitHub Issue: [#136](https://github.com/davidmatousek/tachi/issues/136)
79+
80+
---
81+
1082
## [4.9.2](https://github.com/davidmatousek/tachi/compare/v4.9.1...v4.9.2) (2026-04-10)
1183

1284

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,9 @@ For agentic AI systems, tachi maps each finding to the [CSA MAESTRO](https://clo
257257
| L2 | Data Operations | Vector stores, RAG pipelines, embeddings |
258258
| L3 | Agent Framework | Orchestrators, tool servers, MCP |
259259
| L4 | Deployment Infrastructure | API gateways, containers, networking |
260-
| L5 | Security | Auth, guardrails, rate limiting |
261-
| L6 | Agent Ecosystem | Multi-agent coordination, delegation |
262-
| L7 | User Interface | Chat UIs, dashboards, API endpoints |
260+
| L5 | Evaluation and Observability | Audit logging, monitoring, anomaly detection, forensics |
261+
| L6 | Security and Compliance | Auth, guardrails, rate limiting, encryption, IAM |
262+
| L7 | Agent Ecosystem | Multi-agent coordination, delegation, chat UIs, API endpoints |
263263

264264
MAESTRO layers appear in `threats.md`, propagate through all downstream commands, and power the `maestro-stack` and `maestro-heatmap` infographic templates.
265265

0 commit comments

Comments
 (0)