Compare commits

..
Author SHA1 Message Date
jarvis-at-skic a7951c6130 docs: align Corp v1 boundary with owned home-lab containers
Build and publish Corp v1 Board portal / build (pull_request) Successful in 36s
2026-08-26 07:52:47 +00:00
jarvis-at-skic 73acbd57b3 docs: add real Corp v1 architecture and skill context
Build and publish Corp v1 Board portal / build (push) Successful in 36s
Merge PR #11: publish real service architecture, system context, operating model naming, and skills overview.
2026-08-25 13:13:09 -07:00
jarvis-at-skic 382a9cc670 docs: add real Corp v1 architecture and skill context
Build and publish Corp v1 Board portal / build (pull_request) Successful in 36s
2026-08-25 20:11:54 +00:00
jarvis-at-skic 661bcde0f2 docs: explain Corp v1 SDLC and rebuild diagrams
Build and publish Corp v1 Board portal / build (push) Successful in 35s
Merge PR #10: explain Corp v1 governance, channels, sessions, skills, handoffs, and verification; publish validated Draw.io diagrams.
2026-08-25 12:47:00 -07:00
jarvis-at-skic 17e09ee8ec docs: explain Corp v1 SDLC and rebuild diagrams
Build and publish Corp v1 Board portal / build (pull_request) Successful in 36s
2026-08-25 19:45:33 +00:00
jarvis-at-skic 1881254315 Merge pull request 'docs: record Piotras Gitea access' (#9) from docs/piotras-gitea-access into main
Build and publish Corp v1 Board portal / build (push) Successful in 35s
Record Piotras Gitea onboarding access
2026-08-25 10:42:10 -07:00
15 changed files with 427 additions and 272 deletions
+29 -10
View File
@@ -1,7 +1,7 @@
---
id: context
title: "Context"
description: "See the people, collaboration systems, repositories, and delivery platforms around the Corp v1 operating model."
description: "See the Corp v1 home-lab system boundary, its human actors, and its only external systems: the LLM provider and Discord."
---
import Drawio from '@theme/Drawio';
@@ -9,17 +9,36 @@ import contextDiagram from '!!raw-loader!./diagrams/context.drawio';
# Context
Corp v1 is the **governed operating model for project delivery**. It is not an application runtime architecture. The Board supplies lifecycle authority and shared guardrails; project teams retain ownership of their scope, architecture, implementation, and release outcomes.
The target system is the **Corp v1 managed delivery platform in Lego's home lab**. The boundary follows operational responsibility: services and managed service slices that Lego deploys, configures, versions, upgrades, secures, or restores are inside the Corp v1 system boundary.
<Drawio content={contextDiagram} title="Corp v1 operating context" toolbar="zoom layers lightbox" responsive maxHeight={720} />
<Drawio content={contextDiagram} title="Corp v1 home-lab system context" toolbar="zoom layers lightbox" responsive maxHeight={760} />
## System boundary
## Human actors
The operating model joins four evidence-bearing environments:
| Actor | Relationship to Corp v1 |
|---|---|
| **Corp v1 Board members** | Govern the portfolio and approve project lifecycle, membership, the global operating model, and central channel-reference changes. |
| **Project leads and contributors** | Define value, approve solution work and Task admission, review architecture and UI/UX, implement changes, and accept releases. |
| **Prospective project sponsors and contributors** | May request or join future Corp v1 projects after explicit Board approval and onboarding. |
| **Solution users and reviewers** | Provide needs, usability feedback, acceptance observations, and evidence about the products delivered through Corp v1. |
- **Discord** routes work into six project channels with distinct concerns.
- **Gitea** preserves decisions, documentation, application source, adopted skills, pull requests, and CI evidence.
- **Delivery platforms** publish documentation through LEGO Cloud Pages and applications through Harbor plus GitOps/Argo CD.
- **This Board portal** records project, team, member, repository, lifecycle, and verification state.
Human authority remains outside automation. Hermes, CI, deployments, inferred intent, and silence never substitute for an approval reserved to a listed person.
The model does not approve a project's target solution architecture. Each project must separately record its approved context, containers, requirements, decisions, and implementation Tasks.
## External systems
Corp v1 currently has only two external software systems:
| External system | Relationship to Corp v1 |
|---|---|
| **LLM Provider** | Supplies model inference to Hermes Agent. The currently used providers are ICA or GPT Codex. Model execution is consumed as an external capability; Corp v1 does not deploy or maintain the provider platform. |
| **Communication Service — Discord** | Carries Board governance and project conversations. Corp v1 configures and maintains its channel structure, permissions, guidance, and pins, while Discord operates the communication platform itself. |
## Inside the system boundary
Hermes Agent and the home-lab services it depends on are internal containers in this architecture: Gitea, Actions runners, Penpot, the Board portal, Pages, Harbor, Argo CD, the access and identity stack, MicroK8s, and the hosted workloads. Their Corp v1 configuration is not modeled as an external dependency because Lego is responsible for its lifecycle and operational state.
The [Container Overview](/architecture-high-level/overview/) shows those internal containers and their delivery relationships. The [Operating Model](/architecture-high-level/operating-model/) separately explains Board authority, channel sessions, skills, approvals, and handoffs.
## Product boundary
A project product delivered through Corp v1 remains its own product boundary. Corp v1 operates the delivery platform and governs the lifecycle, while every project must maintain its own product context, requirements, architecture, data, security, UI/UX, and release decisions.
@@ -0,0 +1,42 @@
<mxfile host="app.diagrams.net" modified="2026-08-25T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-home-lab-containers-v2" name="CORP V1 — HOME-LAB CONTAINERS">
<mxGraphModel dx="2080" dy="1100" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2080" pageHeight="1100" math="0" shadow="0" adaptiveColors="auto">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="CORP V1 — HOME-LAB CONTAINER OVERVIEW" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1"><mxGeometry x="80" y="20" width="1920" height="40" as="geometry"/></mxCell>
<mxCell id="subtitle" value="Two external services · internally deployed and maintained delivery containers" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1"><mxGeometry x="80" y="70" width="1920" height="40" as="geometry"/></mxCell>
<mxCell id="humans" value="HUMAN ACTORS · Board · project teams · solution users" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="80" y="140" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="discord" value="EXTERNAL · DISCORD · communication service" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="360" y="140" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="hermes" value="INTERNAL · HERMES AGENT · tools · sessions · verification" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=3;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="640" y="140" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="llm" value="EXTERNAL · LLM PROVIDER · ICA OR GPT CODEX" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="920" y="140" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="humans" target="discord"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="discord" target="hermes"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="hermes" target="llm"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="tools-arrow" value="TOOLS" style="shape=singleArrow;direction=south;whiteSpace=wrap;html=1;fillColor=#2563EB;strokeColor=#2563EB;fontColor=#FFFFFF;fontSize=11;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="720" y="340" width="80" height="80" as="geometry"/></mxCell>
<mxCell id="internal-label" value="INTERNAL CONTAINERS · DEPLOYED AND MAINTAINED BY LEGO" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=16;fontStyle=1;fontColor=#334E68;" vertex="1" parent="1"><mxGeometry x="80" y="420" width="1920" height="40" as="geometry"/></mxCell>
<mxCell id="penpot" value="PENPOT · UI/UX service · sources · reviews · handoff" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="80" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="skills" value="SKILLS &amp; SESSIONS · governed runtime configuration" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="360" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="gitea" value="GITEA · source · docs · skills · PRs · GitOps state" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="640" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="actions" value="GITEA ACTIONS RUNNERS · exact-head build and publication" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="920" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="portal" value="BOARD PORTAL · Docusaurus application · registries · architecture" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1200" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="pages" value="LEGO CLOUD PAGES · protected documentation publication" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1480" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="access" value="ACCESS EDGE · Cloudflare config · Keycloak · OAuth · Nginx" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1760" y="500" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="gitea" target="actions"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="actions" target="portal"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="portal" target="pages"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="pages" target="access"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="image-arrow" value="IMAGE" style="shape=singleArrow;direction=south;whiteSpace=wrap;html=1;fillColor=#2563EB;strokeColor=#2563EB;fontColor=#FFFFFF;fontSize=11;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="1000" y="700" width="80" height="80" as="geometry"/></mxCell>
<mxCell id="runtime-arrow" value="ROUTE" style="shape=singleArrow;direction=north;whiteSpace=wrap;html=1;fillColor=#2563EB;strokeColor=#2563EB;fontColor=#FFFFFF;fontSize=11;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="1840" y="700" width="80" height="80" as="geometry"/></mxCell>
<mxCell id="harbor" value="HARBOR · registry · immutable images · retention" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="920" y="820" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="argocd" value="ARGO CD · GitOps desired state · sync · health" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1200" y="820" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="microk8s" value="GONDOR MICROK8S · 3-node runtime · namespaces · workloads" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1480" y="820" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="workloads" value="PROJECT WORKLOADS · Services · routes · releases · readback" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1760" y="820" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="e8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="harbor" target="argocd"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="argocd" target="microk8s"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="microk8s" target="workloads"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="evidence" value="OWNERSHIP = CONFIGURE · VERSION · DEPLOY · UPGRADE · SECURE · RESTORE · VERIFY" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=16;fontStyle=1;align=center;" vertex="1" parent="1"><mxGeometry x="80" y="1020" width="1920" height="40" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
@@ -1,65 +1,62 @@
<mxfile host="app.diagrams.net" modified="2026-08-24T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-corp-v1-—-project-channels" name="CORP V1 — PROJECT CHANNELS">
<mxGraphModel dx="1500" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="900" math="0" shadow="0">
<mxfile host="app.diagrams.net" modified="2026-08-25T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-project-channels-v2" name="CORP V1 — PROJECT CHANNELS">
<mxGraphModel dx="1500" dy="1240" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="1240" math="0" shadow="0" adaptiveColors="auto">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" value="CORP V1 — PROJECT CHANNELS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1">
<mxGeometry x="80" y="20" width="1200" height="40" as="geometry" />
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="CORP V1 — BOARD &amp; PROJECT CHANNELS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1">
<mxGeometry x="80" y="20" width="1240" height="40" as="geometry"/>
</mxCell>
<mxCell id="subtitle" value="Six channels separate concerns; mapped project skills carry operating guidance" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1">
<mxGeometry x="80" y="60" width="1300" height="40" as="geometry" />
<mxCell id="subtitle" value="Governance channel · 7 project sessions · one skilled agent" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1">
<mxGeometry x="80" y="70" width="1240" height="40" as="geometry"/>
</mxCell>
<mxCell id="general" value="GENERAL Announcements · questions shared coordination" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="160" width="400" height="120" as="geometry" />
<mxCell id="board" value="CORP-V1-BOARD · PORTFOLIO GOVERNANCE · projects · members · skills · evidence" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=3;fontColor=#102A43;fontSize=16;fontStyle=1;spacing=16;align=center;" vertex="1" parent="1">
<mxGeometry x="80" y="130" width="1240" height="160" as="geometry"/>
</mxCell>
<mxCell id="scope" value="SCOPE Ideas · value · Epics · Features solution approval" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="520" y="160" width="400" height="120" as="geometry" />
<mxCell id="approval-band" value="BOARD APPROVES THE PROJECT BOUNDARY · PROJECT CHANNELS OWN DELIVERY DECISIONS" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0F766E;strokeColor=#0F766E;fontColor=#FFFFFF;fontSize=13;fontStyle=1;align=center;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="400" y="310" width="600" height="40" as="geometry"/>
</mxCell>
<mxCell id="architecture" value="ARCHITECTURE Requirements · ADRs · design implementation Tasks" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="960" y="160" width="400" height="120" as="geometry" />
<mxCell id="project-zone-label" value="ONE APPROVED PROJECT · SEVEN ORDERED CHANNEL SESSIONS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=16;fontStyle=1;fontColor=#334E68;" vertex="1" parent="1">
<mxGeometry x="80" y="410" width="1240" height="40" as="geometry"/>
</mxCell>
<mxCell id="kanban" value="KANBAN Board · Focus flow and human task admission" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="440" width="400" height="120" as="geometry" />
<mxCell id="general" value="1 · GENERAL · onboarding · questions · coordination · outcomes" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="490" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="delivery" value="DELIVERY Planning · implementation · PRs CI results and blockers" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F0FDF4;strokeColor=#15803D;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="520" y="440" width="400" height="120" as="geometry" />
<mxCell id="scope" value="2 · SCOPE · value · Epics · Features · acceptance · approval" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="400" y="490" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="releases" value="RELEASES Readiness · deployment · rollback outcomes" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF1F2;strokeColor=#BE123C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="960" y="440" width="400" height="120" as="geometry" />
<mxCell id="architecture" value="3 · ARCHITECTURE · requirements · ADRs · interfaces · Tasks" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="720" y="490" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="e0" value="intent and coordination" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0F766E;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="general" target="scope">
<mxGeometry relative="1" as="geometry" />
<mxCell id="uiux" value="4 · UI/UX · journeys · information architecture · Penpot · handoff" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1040" y="490" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="e1" value="Feature approved for solution" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#C2410C;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="scope" target="architecture">
<mxGeometry relative="1" as="geometry" />
<mxCell id="kanban" value="5 · KANBAN · Board · Focus · dependencies · human Task admission" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1040" y="730" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="e2" value="Tasks proposed" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="architecture" target="kanban">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1160" y="320" />
<mxPoint x="280" y="320" />
<mxPoint x="280" y="420" />
</Array>
</mxGeometry>
<mxCell id="delivery" value="6 · DELIVERY · implementation · branches · PRs · reviews · CI" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="720" y="730" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="e3" value="human-admitted work" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7E22CE;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="kanban" target="delivery">
<mxGeometry relative="1" as="geometry" />
<mxCell id="releases" value="7 · RELEASES · readiness · versions · deploy · rollback · outcomes" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1">
<mxGeometry x="400" y="730" width="280" height="160" as="geometry"/>
</mxCell>
<mxCell id="e4" value="validated release candidate" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="delivery" target="releases">
<mxGeometry relative="1" as="geometry" />
<mxCell id="e-general-scope" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="general" target="scope"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e-scope-architecture" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="scope" target="architecture"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e-architecture-uiux" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="architecture" target="uiux"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e-uiux-kanban" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="uiux" target="kanban"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e-kanban-delivery" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="kanban" target="delivery"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e-delivery-releases" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="delivery" target="releases"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="agent" value="ONE HERMES AGENT · shared identity and governance" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=14;" vertex="1" parent="1">
<mxGeometry x="80" y="1030" width="400" height="120" as="geometry"/>
</mxCell>
<mxCell id="e5" value="status and outcome" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#BE123C;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="releases" target="general">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1400" y="500" />
<mxPoint x="1400" y="120" />
<mxPoint x="280" y="120" />
<mxPoint x="280" y="140" />
</Array>
</mxGeometry>
<mxCell id="sessions" value="MULTIPLE FOCUSED SESSIONS · concern · history · approvals" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=14;" vertex="1" parent="1">
<mxGeometry x="520" y="1030" width="400" height="120" as="geometry"/>
</mxCell>
<mxCell id="skills" value="SPECIALISED PROJECT SKILLS · 7 channel + 7 engineering" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=14;" vertex="1" parent="1">
<mxGeometry x="960" y="1030" width="400" height="120" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
</mxfile>
@@ -1,78 +1,22 @@
<mxfile host="app.diagrams.net" modified="2026-08-24T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-corp-v1-—-operating-context" name="CORP V1 — OPERATING CONTEXT">
<mxGraphModel dx="1500" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="900" math="0" shadow="0">
<mxfile host="app.diagrams.net" modified="2026-08-25T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-home-lab-context-v3" name="CORP V1 — HOME-LAB SYSTEM CONTEXT">
<mxGraphModel dx="1440" dy="960" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1440" pageHeight="960" math="0" shadow="0" adaptiveColors="auto">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" value="CORP V1 — OPERATING CONTEXT" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1">
<mxGeometry x="80" y="20" width="1200" height="40" as="geometry" />
</mxCell>
<mxCell id="subtitle" value="Governed delivery: people, collaboration, source control, and runtime evidence" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1">
<mxGeometry x="80" y="60" width="1300" height="40" as="geometry" />
</mxCell>
<mxCell id="board" value="Corp v1 Board Lifecycle authority and portfolio decisions" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="320" width="280" height="120" as="geometry" />
</mxCell>
<mxCell id="model" value="Corp v1 operating model Governance portal + approved operating contract" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="520" y="280" width="400" height="200" as="geometry" />
</mxCell>
<mxCell id="teams" value="Project teams Human owners and Hermes/code agents" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1080" y="120" width="320" height="120" as="geometry" />
</mxCell>
<mxCell id="collab" value="Discord project channels Six purpose-specific workspaces" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1080" y="280" width="320" height="120" as="geometry" />
</mxCell>
<mxCell id="source" value="Gitea organizations and repositories Versioned source, decisions, skills, CI" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F0FDF4;strokeColor=#15803D;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1080" y="440" width="320" height="120" as="geometry" />
</mxCell>
<mxCell id="platform" value="Delivery platform Pages · Harbor · GitOps/Argo CD · runtimes" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF1F2;strokeColor=#BE123C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1080" y="600" width="320" height="120" as="geometry" />
</mxCell>
<mxCell id="e0" value="approves and governs" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0F766E;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="board" target="model">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e1" value="defines ownership boundary" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="model" target="teams">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1000" y="380" />
<mxPoint x="1000" y="180" />
<mxPoint x="1060" y="180" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e2" value="routes work by concern" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="model" target="collab">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1000" y="380" />
<mxPoint x="1060" y="380" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e3" value="records durable evidence" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="model" target="source">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1000" y="380" />
<mxPoint x="1000" y="500" />
<mxPoint x="1060" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e4" value="validated artifacts and desired state" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="source" target="platform">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e5" value="deployed readback" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#BE123C;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="platform" target="model">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1040" y="660" />
<mxPoint x="1000" y="660" />
<mxPoint x="1000" y="760" />
<mxPoint x="440" y="760" />
<mxPoint x="440" y="380" />
<mxPoint x="500" y="380" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="CORP V1 — HOME-LAB SYSTEM CONTEXT" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1"><mxGeometry x="80" y="20" width="1280" height="40" as="geometry"/></mxCell>
<mxCell id="subtitle" value="Owned home-lab platform · human authority · only two external systems" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1"><mxGeometry x="80" y="70" width="1280" height="40" as="geometry"/></mxCell>
<mxCell id="actors-label" value="HUMAN ACTORS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=16;fontStyle=1;fontColor=#334E68;" vertex="1" parent="1"><mxGeometry x="80" y="120" width="1280" height="40" as="geometry"/></mxCell>
<mxCell id="board" value="BOARD MEMBERS · portfolio authority · lifecycle · global policy" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="80" y="180" width="400" height="120" as="geometry"/></mxCell>
<mxCell id="teams" value="PROJECT LEADS &amp; CONTRIBUTORS · decisions · design · delivery" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="520" y="180" width="400" height="120" as="geometry"/></mxCell>
<mxCell id="future" value="SPONSORS &amp; SOLUTION USERS · requests · feedback · acceptance" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="960" y="180" width="400" height="120" as="geometry"/></mxCell>
<mxCell id="actor-relation" value="GOVERN · DIRECT · COLLABORATE · REVIEW" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0F766E;strokeColor=#0F766E;fontColor=#FFFFFF;fontSize=14;fontStyle=1;align=center;" vertex="1" parent="1"><mxGeometry x="480" y="340" width="480" height="40" as="geometry"/></mxCell>
<mxCell id="target" value="TARGET SYSTEM · CORP V1 MANAGED HOME-LAB DELIVERY PLATFORM" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=3;fontColor=#102A43;fontSize=18;fontStyle=1;spacing=20;align=center;" vertex="1" parent="1"><mxGeometry x="320" y="420" width="800" height="160" as="geometry"/></mxCell>
<mxCell id="system-relation" value="MODEL INFERENCE · HUMAN COMMUNICATION" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#C2410C;strokeColor=#C2410C;fontColor=#FFFFFF;fontSize=14;fontStyle=1;align=center;" vertex="1" parent="1"><mxGeometry x="480" y="620" width="480" height="40" as="geometry"/></mxCell>
<mxCell id="systems-label" value="EXTERNAL SYSTEMS · ONLY TWO" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=16;fontStyle=1;fontColor=#334E68;" vertex="1" parent="1"><mxGeometry x="80" y="700" width="1280" height="40" as="geometry"/></mxCell>
<mxCell id="discord" value="COMMUNICATION SERVICE · DISCORD" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=16;fontStyle=1;spacing=16;" vertex="1" parent="1"><mxGeometry x="280" y="780" width="400" height="120" as="geometry"/></mxCell>
<mxCell id="llm" value="LLM PROVIDER · ICA OR GPT CODEX" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=16;fontStyle=1;spacing=16;" vertex="1" parent="1"><mxGeometry x="760" y="780" width="400" height="120" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
</mxfile>
@@ -0,0 +1,33 @@
<mxfile host="app.diagrams.net" modified="2026-08-25T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-operating-model-v3" name="CORP V1 — OPERATING MODEL FLOW">
<mxGraphModel dx="1500" dy="960" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="960" math="0" shadow="0" adaptiveColors="auto">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="CORP V1 — OPERATING MODEL FLOW" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1"><mxGeometry x="80" y="20" width="1360" height="40" as="geometry"/></mxCell>
<mxCell id="subtitle" value="One agent · multiple channel sessions · explicit human gates · durable evidence" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1"><mxGeometry x="80" y="70" width="1360" height="40" as="geometry"/></mxCell>
<mxCell id="board" value="1 · CORP-V1-BOARD · BOARD APPROVAL · purpose · lead · members" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="80" y="160" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="general" value="2 · GENERAL · onboarding · coordination · questions · outcomes" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="360" y="160" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="scope" value="3 · SCOPE · Ideas → Epics → Features · value · approval" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="640" y="160" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="architecture" value="4 · ARCHITECTURE · requirements · ADRs · interfaces · Tasks" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="920" y="160" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="uiux" value="5 · UI/UX · journeys · IA · Penpot · accessibility · handoff" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1200" y="160" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="kanban" value="6 · KANBAN / FOCUS · flow · blockers · human Task admission" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="1200" y="480" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="delivery" value="7 · DELIVERY · implementation · branches · PRs · reviews · CI" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="920" y="480" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="releases" value="8 · RELEASES · candidate · readiness · deploy · rollback · outcomes" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="640" y="480" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="verify" value="9 · VERIFY &amp; RECORD · runtime readback · docs · Board evidence" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=12;" vertex="1" parent="1"><mxGeometry x="360" y="480" width="240" height="160" as="geometry"/></mxCell>
<mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="board" target="general"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="general" target="scope"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="scope" target="architecture"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="architecture" target="uiux"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="uiux" target="kanban"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="kanban" target="delivery"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="delivery" target="releases"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="releases" target="verify"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#0F766E;strokeWidth=2;dashed=1;endArrow=block;endFill=1;" edge="1" parent="1" source="verify" target="board">
<mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="340" y="560"/><mxPoint x="40" y="560"/><mxPoint x="40" y="240"/><mxPoint x="60" y="240"/></Array></mxGeometry>
</mxCell>
<mxCell id="guidance" value="ONE AGENT · MULTIPLE SESSIONS · 14 PROJECT SKILLS · NO SCHEDULERS" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=16;fontStyle=1;spacing=16;align=center;" vertex="1" parent="1"><mxGeometry x="80" y="760" width="1360" height="120" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
@@ -1,94 +0,0 @@
<mxfile host="app.diagrams.net" modified="2026-08-24T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-corp-v1-—-project-operating-flow" name="CORP V1 — PROJECT OPERATING FLOW">
<mxGraphModel dx="1500" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1500" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="title" value="CORP V1 — PROJECT OPERATING FLOW" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1">
<mxGeometry x="80" y="20" width="1200" height="40" as="geometry" />
</mxCell>
<mxCell id="subtitle" value="One governed pattern repeated for each approved project" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1">
<mxGeometry x="80" y="60" width="1300" height="40" as="geometry" />
</mxCell>
<mxCell id="approve" value="1 BOARD APPROVAL Kickoff, purpose, lead, members, visibility" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="160" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="scope" value="2 SCOPE Ideas → Epics → Features Human solution approval" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#C2410C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="360" y="160" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="arch" value="3 ARCHITECTURE Requirements, ADRs, Draw.io views, Tasks" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="640" y="160" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="focus" value="4 KANBAN / FOCUS Human task admission and flow visibility" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="920" y="160" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="deliver" value="5 DELIVERY Branch, PR, exact-head CI, implementation" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F0FDF4;strokeColor=#15803D;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="920" y="440" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="release" value="6 RELEASE Readiness, immutable artifacts, deployment" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF1F2;strokeColor=#BE123C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="640" y="440" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="verify" value="7 VERIFY &amp; RECORD Runtime/Pages readback and durable evidence" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#475569;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="360" y="440" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="skills" value="PROJECT-OWNED GUIDANCE 6 channel skills + 7 engineering skills No scheduler jobs" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFBEB;strokeColor=#A16207;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="440" width="240" height="120" as="geometry" />
</mxCell>
<mxCell id="e0" value="approved project starts" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#0F766E;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="approve" target="scope">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e1" value="Feature approved for solution" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#C2410C;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="scope" target="arch">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e2" value="implementation Tasks prepared" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="arch" target="focus">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e3" value="Task admitted to Focus" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#7E22CE;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="focus" target="deliver">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1180" y="220" />
<mxPoint x="1200" y="220" />
<mxPoint x="1200" y="500" />
<mxPoint x="1180" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e4" value="validated candidate" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="deliver" target="release">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e5" value="deploy and observe" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#BE123C;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="release" target="verify">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e6" value="constrains" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="skills" target="scope">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="500" />
<mxPoint x="340" y="220" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e7" value="constrains" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="skills" target="arch">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="500" />
<mxPoint x="340" y="320" />
<mxPoint x="620" y="320" />
<mxPoint x="620" y="220" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e8" value="constrains" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="skills" target="deliver">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="500" />
<mxPoint x="340" y="600" />
<mxPoint x="1200" y="600" />
<mxPoint x="1200" y="500" />
<mxPoint x="1180" y="500" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
@@ -22,7 +22,7 @@
<mxCell id="skillsorg" value="corp-v1-&amp;lt;code&amp;gt;-skills-code-agent SKILLS ORGANIZATION" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFBEB;strokeColor=#A16207;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="160" width="400" height="120" as="geometry" />
</mxCell>
<mxCell id="channelskills" value="6 adopted channel-skill repos: gen · scope · arch · kanban · delivery · release" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#A16207;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxCell id="channelskills" value="7 adopted channel-skill repos · General through Releases · UI/UX included" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#A16207;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="80" y="320" width="400" height="120" as="geometry" />
</mxCell>
<mxCell id="engskills" value="7 adopted eng-skill repos: branch · mono · scripts · CI · GitOps · docs · tpl" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#A16207;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
@@ -37,13 +37,13 @@
<mxCell id="runtime" value="HARBOR → GITOPS / ARGO CD → RUNTIME Immutable images; reconciled desired state" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF1F2;strokeColor=#BE123C;strokeWidth=2;fontColor=#102A43;fontSize=14;spacing=12;" vertex="1" parent="1">
<mxGeometry x="1520" y="440" width="400" height="120" as="geometry" />
</mxCell>
<mxCell id="e0" value="guides documentation work" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="channelskills" target="docs">
<mxCell id="e0" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="channelskills" target="docs">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e1" value="guides engineering work" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="engskills" target="app">
<mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#A16207;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="engskills" target="app">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e2" value="commit / PR" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="docs" target="ci">
<mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="docs" target="ci">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1000" y="380" />
@@ -52,7 +52,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e3" value="commit / PR" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="app" target="ci">
<mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2563EB;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="app" target="ci">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1000" y="540" />
@@ -61,10 +61,10 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e4" value="publish docs" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="ci" target="pages">
<mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="ci" target="pages">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e5" value="publish and deploy apps" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="ci" target="runtime">
<mxCell id="e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#15803D;strokeWidth=2;endArrow=block;endFill=1;fontSize=12;fontColor=#334E68;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="ci" target="runtime">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1240" y="400" />
@@ -0,0 +1,22 @@
<mxfile host="app.diagrams.net" modified="2026-08-25T00:00:00.000Z" agent="Hermes Agent" version="26.0.16" type="device">
<diagram id="corp-v1-skills-model-v1" name="CORP V1 — SKILLS MODEL">
<mxGraphModel dx="1840" dy="760" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1840" pageHeight="760" math="0" shadow="0" adaptiveColors="auto">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="CORP V1 — SKILLS MODEL" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=24;fontStyle=1;fontColor=#102A43;" vertex="1" parent="1"><mxGeometry x="80" y="20" width="1680" height="40" as="geometry"/></mxCell>
<mxCell id="subtitle" value="Central references → deliberate project adoption → focused execution" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontSize=14;fontColor=#486581;" vertex="1" parent="1"><mxGeometry x="80" y="70" width="1680" height="40" as="geometry"/></mxCell>
<mxCell id="central" value="CENTRAL SOURCES · governance · 7 channels · 7 engineering" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6FFFA;strokeColor=#0F766E;strokeWidth=2;fontColor=#102A43;fontSize=15;fontStyle=1;spacing=16;" vertex="1" parent="1"><mxGeometry x="80" y="180" width="360" height="200" as="geometry"/></mxCell>
<mxCell id="adoption" value="DELIBERATE ADOPTION · compare · preserve authority · record source SHA" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=15;fontStyle=1;spacing=16;" vertex="1" parent="1"><mxGeometry x="520" y="180" width="360" height="200" as="geometry"/></mxCell>
<mxCell id="project" value="PROJECT COPIES · 14 repositories · suffix --code · local decisions" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#2563EB;strokeWidth=2;fontColor=#102A43;fontSize=15;fontStyle=1;spacing=16;" vertex="1" parent="1"><mxGeometry x="960" y="180" width="360" height="200" as="geometry"/></mxCell>
<mxCell id="session" value="FOCUSED SESSION · mapped channel skill + execution skills on demand" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FAF5FF;strokeColor=#7E22CE;strokeWidth=2;fontColor=#102A43;fontSize=15;fontStyle=1;spacing=16;" vertex="1" parent="1"><mxGeometry x="1400" y="180" width="360" height="200" as="geometry"/></mxCell>
<mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="central" target="adoption"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="adoption" target="project"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;strokeColor=#475569;strokeWidth=3;endArrow=block;endFill=1;" edge="1" parent="1" source="project" target="session"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="shared" value="SHARED GLOBAL · drawio-main · glossary · Discord · Gitea operations" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=14;" vertex="1" parent="1"><mxGeometry x="80" y="500" width="520" height="120" as="geometry"/></mxCell>
<mxCell id="engineering" value="ENGINEERING ON DEMAND · debugging · TDD · review · QA" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=14;" vertex="1" parent="1"><mxGeometry x="640" y="500" width="520" height="120" as="geometry"/></mxCell>
<mxCell id="runtime" value="RUNTIME ON DEMAND · Gondor · Argo CD · MicroK8s · readback" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;fontColor=#102A43;fontSize=14;fontStyle=1;spacing=14;" vertex="1" parent="1"><mxGeometry x="1200" y="500" width="520" height="120" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
@@ -0,0 +1,36 @@
---
id: operating-model
title: "Operating Model"
description: "Follow the single-agent, multi-session Corp v1 pilot from Board governance through design, delivery, release, and verified evidence."
---
import Drawio from '@theme/Drawio';
import operatingModelDiagram from '!!raw-loader!./diagrams/operating-model.drawio';
# Operating Model
Corp v1 is an SDLC operating-model pilot: **one AI agent works across multiple focused Discord sessions, each governed by specialised project skills and explicit human decision rights**. Every approved project repeats the same flow while keeping its decisions, repositories, and delivery evidence isolated.
<Drawio content={operatingModelDiagram} title="Corp v1 governed project operating flow" toolbar="zoom layers lightbox" responsive maxHeight={820} />
## How the setup fits together
1. **`corp-v1-board` governs the portfolio.** Listed Board members approve project kickoffs, closures, membership changes, and changes to the global operating model.
2. **General establishes the project workspace.** It handles onboarding, shared coordination, questions, and broadcasts verified outcomes.
3. **Scope decides what creates value.** Ideas become Epics and Features; a human project member approves an exact Feature for solution work.
4. **Architecture decides how the system should work.** Requirements, ADRs, interfaces, constraints, and implementation Tasks become durable project evidence.
5. **UI/UX makes the frontend experience implementable.** User journeys, information architecture, accessibility, Penpot designs, prototypes, and handoff evidence bridge Architecture and execution.
6. **Kanban controls admission and flow.** A human project member admits an exact Task to Focus before Delivery may execute it.
7. **Delivery produces a reviewed candidate.** Work proceeds through branches, pull requests, exact-head validation, and reviewable implementation evidence.
8. **Releases control deployment and outcomes.** Immutable artifacts, risk, rollback, deployment, acceptance, and post-release evidence are assessed explicitly.
9. **Verification closes the evidence loop.** Hermes reads the deployed page or runtime back, updates project documentation and the Board portal, and reports remaining gates honestly.
## Why sessions and skills are separated
Each channel is a concern boundary with its own session. The same agent can coordinate the whole project, while the loaded project-adopted channel skill prevents responsibilities and approval rules from blurring together. The project uses seven channel skills to define the workspaces and seven engineering skills to provide reusable execution practices.
Project copies preserve project-specific authority, terminology, repository links, environment namespaces, and operating lessons. Central skill changes are compared and deliberately adopted; they never silently overwrite project decisions.
## Automation boundary
Corp v1 projects and channels do **not** use cronjobs or scheduler jobs under the current approved model. Work advances through explicit human decisions, Discord events, reviewed repository changes, exact-commit CI, and deployed readback.
@@ -1,7 +1,7 @@
---
id: overview-channels
title: "Overview Channels"
description: "Understand how the six Corp v1 project channels divide responsibilities and hand work to one another."
description: "Understand the Corp v1 Board channel, seven project workspaces, session boundaries, skills, and SDLC handoffs."
---
import Drawio from '@theme/Drawio';
@@ -9,17 +9,48 @@ import channelsDiagram from '!!raw-loader!./diagrams/channels.drawio';
# Overview Channels
A project receives exactly six purpose-specific Discord channels. The channels are concern boundaries, not isolated teams: evidence and decisions move forward through explicit handoffs.
Corp v1 uses **one portfolio-governance channel** and **seven purpose-specific channels per project**. These are operating boundaries for one AI agent and the human team—not separate delivery teams.
<Drawio content={channelsDiagram} title="Corp v1 project channel flow" toolbar="zoom layers lightbox" responsive maxHeight={720} />
<Drawio content={channelsDiagram} title="Corp v1 Board and project channel operating model" toolbar="zoom layers lightbox" responsive maxHeight={820} />
| Channel | Owns | Typical handoff |
## Portfolio governance: `corp-v1-board`
`corp-v1-board` exists once for the whole Corp v1 pilot. It is the authoritative Discord workspace for decisions that change the portfolio operating model:
- approve project kickoffs, closures, and membership changes;
- approve changes to the global `corp-v1--main` governance skill;
- approve central `corp-v1-channel-*` reference-skill changes;
- resolve conflicts that cannot be decided inside one project;
- review portfolio-level evidence and remaining gates.
A Board message is evidence only when approval is explicit and attributable to a listed Board member. The Board channel does **not** replace project Scope, Architecture, UI/UX, Delivery, or Releases decisions.
## Project workspaces
Every active project receives these seven channels in this exact order:
| Channel | Owns | Sends forward |
|---|---|---|
| General | Announcements, questions, shared coordination | Routes product intent to Scope and broadcasts outcomes |
| Scope | Ideas, Epics, Features, value, acceptance outcomes, solution approval | Sends an approved Feature to Architecture |
| Architecture | Requirements, ADRs, Draw.io views, technical design, implementation Tasks | Sends prepared Tasks to Kanban |
| Kanban | Board, Focus, flow visibility, explicit human Task admission | Sends admitted work to Delivery |
| Delivery | Planning, implementation, pull requests, CI evidence, blockers | Sends a validated release candidate to Releases |
| Releases | Readiness, versions, deployment, rollback, post-release outcomes | Reports deployment state and outcomes to the project |
| **General** | Project announcements, questions, onboarding, shared coordination, and outcome broadcasts | Product intent and questions to Scope; cross-cutting needs to the owning channel |
| **Scope** | Ideas, Epics, Features, value, acceptance outcomes, roadmap, and human approval for solution work | An exact approved Feature to Architecture |
| **Architecture** | Requirements, ADRs, system design, interfaces, constraints, and implementation Tasks | Design intent to UI/UX and prepared technical work toward Kanban |
| **UI/UX** | User journeys, information architecture, interaction and visual design, accessibility, Penpot sources, prototypes, and design handoff | Reviewed design evidence and implementation-ready UX decisions to Kanban and Delivery |
| **Kanban** | Board and Focus visibility, dependencies, sequencing, blockers, and explicit human Task admission | An exact admitted Task to Delivery |
| **Delivery** | Implementation planning, branches, pull requests, reviews, exact-head CI, and engineering blockers | A validated immutable candidate to Releases |
| **Releases** | Readiness, version decisions, deployment, rollback, acceptance evidence, and post-release outcomes | Verified status and outcomes back to General and durable records |
Each channel loads its mapped project-adopted channel skill. Relevant engineering skills are loaded alongside it for branching, monorepo structure, scripts, CI/CD, GitOps, documentation, and templates. A green build or agent statement never substitutes for a required human approval or deployed readback.
## One agent, multiple sessions, specialised skills
The same Hermes agent operates across the pilot, but each Discord channel has its own focused session and mapped channel skill. This gives the pilot:
1. **Shared identity and governance** — one agent follows the same Board-approved operating model.
2. **Focused context** — Scope discussion does not become Delivery execution, and one project's decisions do not silently become another project's decisions.
3. **Specialised behavior** — the mapped `corp-v1-channel-<channel>--<code>` skill defines the channel's responsibilities, approvals, evidence, and handoffs.
4. **Engineering depth on demand** — relevant project engineering skills are loaded alongside the channel skill for documentation, branching, monorepo work, CI/CD, GitOps, scripts, and templates.
5. **Durable evidence** — decisions and current state are written to Discord, Gitea, project documentation, and the Board portal rather than existing only in an agent session.
## Handoff rule
A handoff is not “continue the conversation elsewhere.” It carries an exact governed artifact: an approved Feature, requirement set, ADR, Penpot design, admitted Task, reviewed commit, immutable release candidate, or deployed readback.
Green CI, a merge, an agent statement, or silence never substitutes for required human approval. Corp v1 currently uses no project cronjobs or scheduler jobs; coordination is human- or event-driven.
@@ -9,7 +9,7 @@ import repositoriesDiagram from '!!raw-loader!./diagrams/repositories.drawio';
# Overview Repositories
Each project has two Gitea organization boundaries and fifteen required repositories: two project repositories plus thirteen adopted skill repositories.
Each project has two Gitea organization boundaries and sixteen required repositories: two project repositories plus fourteen adopted skill repositories.
<Drawio content={repositoriesDiagram} title="Corp v1 organizations, repositories, and delivery" toolbar="zoom layers lightbox" responsive maxHeight={720} />
@@ -26,7 +26,7 @@ A project team grants access to both repositories. Project-specific environment
The corresponding skills team grants access to:
- six adopted channel-skill repositories;
- seven adopted channel-skill repositories—General, Scope, Architecture, UI/UX, Kanban, Delivery, and Releases;
- seven adopted engineering-skill repositories;
- their complete supporting assets, scripts, templates, references, and preserved adoption history.
@@ -34,4 +34,4 @@ The global `drawio-main` and `corp-v1--glossary` remain shared references unless
## Delivery evidence
Documentation commits are validated and published to LEGO Cloud Pages. Deployable application commits produce immutable Harbor images and update GitOps/Argo CD desired state. Completion requires exact-commit CI plus deployed page or runtime readback; a local build or accepted push alone is not delivery evidence.
Documentation commits are validated by Gitea Actions and published to LEGO Cloud Pages. Deployable application commits produce immutable Harbor images and update GitOps/Argo CD desired state. Completion requires exact-commit CI plus deployed page or runtime readback; a local build or accepted push alone is not delivery evidence.
@@ -0,0 +1,74 @@
---
id: overview-skills
title: "Overview Skills"
description: "Understand Corp v1 governance and channel skills, project-adopted copies, mandatory engineering skills, and useful shared Hermes skills."
---
import Drawio from '@theme/Drawio';
import skillsDiagram from '!!raw-loader!./diagrams/skills.drawio';
# Overview Skills
Skills are the operating instructions loaded by Hermes for a task. They are **versioned guidance**, not autonomous workers and not substitutes for human approval. Corp v1 combines a central governance layer, channel-specific references, deliberate project adoptions, and useful generic execution skills.
<Drawio content={skillsDiagram} title="Corp v1 central, adopted, and shared skill model" toolbar="zoom layers lightbox" responsive maxHeight={720} />
## Central `corp-v1-*` skills
The central sources live in [`home-v1-skills-code-agent`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent):
| Skill | Purpose |
|---|---|
| [`corp-v1--main`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1--main) | Board authority, project lifecycle, resource model, membership, adoption, publication, and verification rules. |
| [`corp-v1--glossary`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1--glossary) | Shared terminology and rules for keeping canonical definitions in project documentation. |
| [`corp-v1-channel-general`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-general) | Onboarding, coordination, questions, and outcome broadcasts. |
| [`corp-v1-channel-scope`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-scope) | Ideas, Epics, Features, value, acceptance outcomes, and human solution approval. |
| [`corp-v1-channel-architecture`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-architecture) | Requirements, ADRs, interfaces, constraints, system design, and implementation Tasks. |
| [`corp-v1-channel-ui-ux`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-ui-ux) | Journeys, information architecture, Penpot, accessibility, prototypes, and implementation handoff. |
| [`corp-v1-channel-kanban`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-kanban) | Board/Focus visibility, dependencies, flow, blockers, and explicit Task admission. |
| [`corp-v1-channel-delivery`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-delivery) | Planning, implementation, reviews, exact-head CI, blockers, and delivery evidence. |
| [`corp-v1-channel-releases`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1-channel-releases) | Readiness, versioning, deployment, rollback, acceptance, and post-release outcomes. |
## Project-adopted skills
Every project owns fourteen adopted repositories in `corp-v1-<code>-skills-code-agent`:
- seven channel skills named `corp-v1-channel-<channel>--<code>`;
- seven engineering skills named `<source-skill>--<code>`.
A project adoption records the central source branch and commit, then adds the project code, repository links, environment namespace, approved authority, and operating lessons. Central updates are compared and adopted semantically; they never silently overwrite project-specific decisions or authorization overrides.
At runtime, a focused channel session loads its mapped project channel skill plus only the engineering or global skills needed for the current work.
## Mandatory engineering skills
These generic sources become project-owned copies during kickoff:
| Source skill | Used for |
|---|---|
| [`development-branching-strategy`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/development-branching-strategy) | Branches, pull requests, integration, and release branching. |
| [`development-gitops-argo-cd`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/development-gitops-argo-cd) | GitOps repositories, environments, Argo CD applications, and reconciliation evidence. |
| [`development-monorepo-pnpm`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/development-monorepo-pnpm) | pnpm/TypeScript monorepo structure, applications, packages, and workspace validation. |
| [`development-scripts`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/development-scripts) | Taskfiles, `.scripts`, environment handling, logging, and Devbox. |
| [`devsecops-ci-cd-gitea`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/devsecops-ci-cd-gitea) | Gitea Actions, validation, Harbor publication, and delivery gates. |
| [`documentation-docusaurus`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/documentation-docusaurus) | Docusaurus structure, content quality, diagrams, build, and Pages publication. |
| [`template-engine-copier`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/template-engine-copier) | Copier/Jinja templates and reusable project scaffolding. |
## Useful shared generic skills
These are loaded globally when relevant; they are not additional mandatory project repositories:
| Skill | Useful when |
|---|---|
| [`drawio-main`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/drawio-main) | Creating and validating editable architecture diagrams with layout and connector quality gates. |
| [`home-v1-discord`](https://gitea.lego-cloud.eu/home-v1-skills-code-agent/home-v1-discord) | Discovering and operating Discord channels, permissions, messages, pins, and effective access. |
| `gitea-repository-operations` | Discovering, creating, changing, and independently reading back Gitea organizations, teams, repositories, PRs, and refs. |
| `systematic-debugging` | Investigating a defect from evidence and root cause before applying a fix. |
| `test-driven-development` | Building behavior through RED, GREEN, and refactoring. |
| `requesting-code-review` | Applying pre-commit security and quality gates and resolving findings. |
| `dogfood` | Performing evidence-backed exploratory QA of deployed web applications. |
| `gondor-v1-nodes` | Inspecting Argo CD, MicroK8s workloads, images, routes, and runtime evidence on Gondor v1. |
## Selection rule
The channel skill defines **why the work belongs here and which approvals and artifacts are required**. Engineering and generic skills define **how to execute the work safely**. If instructions conflict, explicit Corp v1 governance and preserved project authority win. No skill grants a human approval that has not actually been given.
+44 -17
View File
@@ -1,30 +1,57 @@
---
id: overview
title: "Overview"
description: "Follow a Corp v1 project from Board approval through governed scope, delivery, deployment, and verified evidence."
title: "Container Overview"
description: "See the internal containers Lego deploys and maintains for Corp v1, from Hermes and Gitea through Pages, Harbor, Argo CD, identity, ingress, and MicroK8s."
---
import Drawio from '@theme/Drawio';
import overviewDiagram from '!!raw-loader!./diagrams/overview.drawio';
import architectureDiagram from '!!raw-loader!./diagrams/architecture-overview.drawio';
# Overview
# Container Overview
Every approved Corp v1 project repeats the same high-level operating flow while keeping its own decisions and delivery boundary.
This view treats the **Corp v1 managed home-lab platform** as the software system. A container here is an independently operated service or managed service slice for which Lego owns configuration, versioning, deployment, upgrades, access, backup or recovery, and operational verification.
<Drawio content={overviewDiagram} title="Corp v1 project operating flow" toolbar="zoom layers lightbox" responsive maxHeight={720} />
<Drawio content={architectureDiagram} title="Corp v1 internal container architecture" toolbar="zoom layers lightbox" responsive maxHeight={860} />
## How projects operate
## Internal containers
1. **Board approval** establishes the project purpose, code, lead, members, visibility, initial deliverable, and required resources.
2. **Scope** turns evidence-backed intent into Ideas, Epics, and Features. A human project member approves a Feature for solution work.
3. **Architecture** defines requirements, decisions, diagrams, and implementation Tasks without treating documentation scaffolding as an approved target design.
4. **Kanban** exposes unfinished work. A human project member explicitly admits an exact Task to Focus before Delivery may execute it.
5. **Delivery** implements through reviewable branches and pull requests; Gitea Actions validates the exact candidate.
6. **Releases** assess immutable artifacts, risk, rollback, deployment, and acceptance evidence.
7. **Verification** reads the deployed page or runtime back and updates durable project and governance records.
| Container | Corp v1 responsibility |
|---|---|
| **Hermes Agent** | Agent runtime, connected tools, model-provider integration, focused sessions, skill loading, execution, and evidence verification. |
| **Corp v1 Board portal** | Docusaurus source, registries, architecture, decisions, build, publication, navigation, and deployed-content readback. |
| **Gitea** | Service operation plus Corp organizations, teams, repositories, branches, pull requests, variables, permissions, skills, documentation, application source, and GitOps state. |
| **Gitea Actions runners** | Runner operation, workflow versions, exact-head validation, documentation builds, image publication, and delivery evidence. |
| **Penpot** | Service deployment and the project design workspaces, editable design sources, review state, accessibility evidence, and handoff. |
| **LEGO Cloud Pages** | Pages workload, route structure, publication behavior, OAuth-protected access, and content readback. |
| **Harbor** | Registry service, projects, repositories, robot integration, immutable application images, retention, and availability. |
| **Argo CD** | Service lifecycle, AppProjects, Applications, repository access, desired-state reconciliation, health, and sync evidence. |
| **Identity and access** | Keycloak, OAuth proxy configuration, protected routes, clients, policies, and sign-in behavior. |
| **Ingress edge** | Cloudflare configuration, Osgiliath Nginx, ACME, Kubernetes ingress, routing, certificates, and public endpoints. |
| **Gondor v1 MicroK8s** | Three-node runtime, namespaces, workloads, Services, Ingress, storage integration, readiness, image identity, and runtime readback. |
| **Project workloads** | Approved application Deployments, Services, routes, configuration, release candidates, rollback state, and observable behavior. |
## Project-owned operating guidance
## External connections
Each project adopts six channel skills and seven engineering skills into its dedicated skills/code-agent organization. Those copies preserve project naming, environment namespaces, repository links, authority decisions, and operating lessons. Central changes are compared and deliberately synchronized; they never silently overwrite project decisions.
Only two software systems cross the Corp v1 boundary:
Corp v1 projects and channels do **not** use cronjobs or scheduler jobs under the current approved model. Coordination is human- or event-driven.
- **Discord** supplies the communication service. Corp v1 owns the managed channel configuration represented in its operating model.
- **ICA or GPT Codex** supplies LLM inference to Hermes Agent.
## Documentation path
`Hermes → Gitea → Gitea Actions → Board portal build → LEGO Cloud Pages → identity/ingress → deployed readback`
A documentation delivery claim requires successful exact-commit CI and distinctive content from the deployed Pages service path.
## Application path
`Hermes → Gitea → Gitea Actions → Harbor → GitOps state → Argo CD → MicroK8s workload → ingress → runtime readback`
Argo CD also reads desired state from Gitea. A repository or image alone is not a deployed product; the runtime image identity, readiness, route, and user-visible behavior must be verified.
## Related views
- [Context](/architecture-high-level/context/) defines the home-lab boundary, human actors, and two external systems.
- [Operating Model](/architecture-high-level/operating-model/) explains governance and the delivery lifecycle.
- [Overview Skills](/architecture-high-level/overview-skills/) explains the instructions Hermes loads to operate these containers safely.
- [Overview Repositories](/architecture-high-level/overview-repositories/) explains the versioned project and skill sources.
+30 -8
View File
@@ -78,8 +78,10 @@ const expectedArchitectureSidebar = `import type {SidebarsConfig} from '@docusau
const sidebars: SidebarsConfig = {
architectureHighLevelSidebar: [
{type: 'doc', id: 'context', label: 'Context'},
{type: 'doc', id: 'overview', label: 'Overview'},
{type: 'doc', id: 'overview', label: 'Container Overview'},
{type: 'doc', id: 'operating-model', label: 'Operating Model'},
{type: 'doc', id: 'overview-channels', label: 'Overview Channels'},
{type: 'doc', id: 'overview-skills', label: 'Overview Skills'},
{type: 'doc', id: 'overview-repositories', label: 'Overview Repositories'},
],
};
@@ -88,38 +90,58 @@ export default sidebars;`;
assert.equal(
architectureSidebar.trim(),
expectedArchitectureSidebar,
'Architecture High Level sidebar must contain exactly the four requested documents in order',
'Architecture High Level sidebar must contain exactly the six requested documents in order',
);
const architecturePages = {
context: read('docs/architecture-high-level/context.mdx'),
overview: read('docs/architecture-high-level/overview.mdx'),
operatingModel: read('docs/architecture-high-level/operating-model.mdx'),
channels: read('docs/architecture-high-level/overview-channels.mdx'),
skills: read('docs/architecture-high-level/overview-skills.mdx'),
repositories: read('docs/architecture-high-level/overview-repositories.mdx'),
};
for (const [name, page] of Object.entries(architecturePages)) {
assert.match(page, /!!raw-loader!\.\/diagrams\/.+\.drawio/, `${name} page must render an editable Draw.io source`);
}
for (const term of ['six channel skills', 'seven engineering skills', 'Gitea Actions', 'scheduler jobs']) {
for (const term of ['seven channel skills', 'seven engineering skills', 'Gitea Actions', 'scheduler jobs', 'corp-v1-board', 'UI/UX', 'one AI agent', 'Hermes Agent', 'MicroK8s', 'Penpot', 'Argo CD', 'Harbor']) {
assert.ok(Object.values(architecturePages).some((page) => page.includes(term)), `architecture explanation is missing: ${term}`);
}
for (const term of ['Corp v1 Board members', 'Project leads and contributors', 'Prospective project sponsors and contributors', 'Solution users and reviewers']) {
assert.ok(architecturePages.context.includes(term), `system context is missing actor: ${term}`);
}
for (const term of ['only two external software systems', 'LLM Provider', 'ICA or GPT Codex', 'Communication Service — Discord']) {
assert.ok(architecturePages.context.includes(term), `system context is missing boundary rule: ${term}`);
}
for (const term of ['Gitea Actions runners', 'Penpot', 'LEGO Cloud Pages', 'Harbor', 'Argo CD', 'Identity and access', 'Ingress edge', 'Gondor v1 MicroK8s']) {
assert.ok(architecturePages.overview.includes(term), `container overview is missing internal container: ${term}`);
}
for (const term of ['corp-v1--main', 'corp-v1-channel-ui-ux', 'development-gitops-argo-cd', 'drawio-main', 'systematic-debugging', 'gondor-v1-nodes']) {
assert.ok(architecturePages.skills.includes(term), `skills overview is missing: ${term}`);
}
for (const [name, page] of Object.entries(architecturePages)) {
assert.doesNotMatch(page, /exactly six|six project channels|six channel skills|thirteen adopted skill/i, `${name} retains the superseded six-channel model`);
}
for (const [name, markers] of Object.entries({
'context.drawio': ['CORP V1 — OPERATING CONTEXT', 'Corp v1 Board', 'Gitea organizations and repositories', 'Delivery platform'],
'overview.drawio': ['CORP V1 — PROJECT OPERATING FLOW', 'BOARD APPROVAL', 'KANBAN / FOCUS', 'VERIFY &amp; RECORD'],
'channels.drawio': ['CORP V1 — PROJECT CHANNELS', 'GENERAL', 'ARCHITECTURE', 'RELEASES'],
'repositories.drawio': ['CORP V1 — ORGANIZATIONS, REPOSITORIES &amp; DELIVERY', 'PROJECT ORGANIZATION', 'SKILLS ORGANIZATION', 'GITEA ACTIONS'],
'context.drawio': ['CORP V1 — HOME-LAB SYSTEM CONTEXT', 'HUMAN ACTORS', 'TARGET SYSTEM', 'EXTERNAL SYSTEMS · ONLY TWO', 'DISCORD', 'ICA OR GPT CODEX'],
'architecture-overview.drawio': ['CORP V1 — HOME-LAB CONTAINER OVERVIEW', 'EXTERNAL · DISCORD', 'EXTERNAL · LLM PROVIDER', 'INTERNAL CONTAINERS', 'GITEA ACTIONS RUNNERS', 'HARBOR', 'ARGO CD', 'GONDOR MICROK8S'],
'operating-model.drawio': ['CORP V1 — OPERATING MODEL FLOW', 'CORP-V1-BOARD', 'BOARD APPROVAL', 'UI/UX', 'KANBAN / FOCUS', 'VERIFY &amp; RECORD'],
'channels.drawio': ['CORP V1 — BOARD &amp; PROJECT CHANNELS', 'CORP-V1-BOARD', 'GENERAL', 'ARCHITECTURE', 'UI/UX', 'RELEASES', 'MULTIPLE FOCUSED SESSIONS'],
'skills.drawio': ['CORP V1 — SKILLS MODEL', 'CENTRAL SOURCES', 'DELIBERATE ADOPTION', 'PROJECT COPIES', 'FOCUSED SESSION'],
'repositories.drawio': ['CORP V1 — ORGANIZATIONS, REPOSITORIES &amp; DELIVERY', 'PROJECT ORGANIZATION', 'SKILLS ORGANIZATION', '7 adopted channel-skill repos', 'GITEA ACTIONS'],
})) {
const diagram = read(`docs/architecture-high-level/diagrams/${name}`);
const xmlResult = XMLValidator.validate(diagram);
assert.equal(xmlResult, true, `${name} is malformed XML: ${JSON.stringify(xmlResult)}`);
assert.match(diagram, /<mxfile[\s>]/, `${name} is not a Draw.io source file`);
for (const marker of markers) assert.ok(diagram.includes(marker), `${name} is missing: ${marker}`);
assert.doesNotMatch(diagram, /Six purpose-specific|6 channel skills|6 adopted channel-skill repos/i, `${name} retains the superseded six-channel model`);
}
if (existsSync(join(root, 'build'))) {
const filename = readdirSync(join(root, 'build')).find((name) => /^search-index(?:-[a-f0-9]+)?\.json$/.test(name));
assert.ok(filename, 'production search index is missing');
const search = readFileSync(join(root, 'build', filename), 'utf8').toLowerCase();
for (const term of ['projects registry', 'teams registry', 'members registry', 'board members', 'project lifecycle', 'corp v1 board', 'overview channels', 'overview repositories']) {
for (const term of ['projects registry', 'teams registry', 'members registry', 'board members', 'project lifecycle', 'corp v1 board', 'container overview', 'operating model', 'overview channels', 'overview skills', 'overview repositories']) {
assert.ok(search.includes(term), `search index is missing: ${term}`);
}
}
+3 -1
View File
@@ -3,8 +3,10 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {
architectureHighLevelSidebar: [
{type: 'doc', id: 'context', label: 'Context'},
{type: 'doc', id: 'overview', label: 'Overview'},
{type: 'doc', id: 'overview', label: 'Container Overview'},
{type: 'doc', id: 'operating-model', label: 'Operating Model'},
{type: 'doc', id: 'overview-channels', label: 'Overview Channels'},
{type: 'doc', id: 'overview-skills', label: 'Overview Skills'},
{type: 'doc', id: 'overview-repositories', label: 'Overview Repositories'},
],
};