Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08dd1996e6 | ||
|
|
5cc95e0ce9 | ||
|
|
e324610416 | ||
|
|
ef7bdf015b | ||
|
|
a7efaf86fe | ||
|
|
091617ffe8 | ||
|
|
07634ab144 | ||
|
|
c7620c804a | ||
|
|
f9bef3bee6 | ||
|
|
5a0dd1776f | ||
|
|
40649b2eaa | ||
|
|
db35632570 |
@@ -1,20 +1,20 @@
|
||||
---
|
||||
name: corp-v1-channel-architecture
|
||||
description: "Use when operating or synchronizing a Corp v1 project's architecture channel. Maintains C4-based architecture documentation, Draw.io diagrams, architecture decisions, and requirements while correlating verified activity across the project's six channels."
|
||||
version: 1.5.0
|
||||
description: "Use when operating or synchronizing a Corp v1 project's architecture channel. Maintains C4-based architecture documentation, Draw.io diagrams, architecture decisions, and requirements while correlating verified activity across the project's seven channels."
|
||||
version: 1.7.0
|
||||
author: Hermes Agent
|
||||
license: MIT
|
||||
metadata:
|
||||
hermes:
|
||||
tags: [corp-v1, discord, channel, architecture, c4, adr, requirements]
|
||||
related_skills: [corp-v1--main, home-v1-discord, drawio-main, documentation-docusaurus]
|
||||
related_skills: [corp-v1--main, home-v1-discord, drawio-main, documentation-docusaurus, corp-v1--glossary]
|
||||
---
|
||||
|
||||
# Corp v1 Architecture Channel
|
||||
|
||||
## Overview
|
||||
|
||||
This skill owns the solution phase and architecture coherence for a Corp v1 project. It monitors the project's `general`, `scope`, `architecture`, `kanban`, `delivery`, and `releases` channels, transforms human-approved Features into requirements and solution artifacts, breaks them into dependency-aware implementation tasks, assigns approved Features to versions, and maintains the Architecture section of the project documentation.
|
||||
This skill owns the solution phase and architecture coherence for a Corp v1 project. It monitors the project's `general`, `scope`, `architecture`, `ui-ux`, `kanban`, `delivery`, and `releases` channels, transforms human-approved Features into requirements and solution artifacts, breaks them into dependency-aware implementation tasks, assigns approved Features to versions, and maintains the Architecture section of the project documentation.
|
||||
|
||||
The default architecture model is C4. Architecture diagrams must be authored and validated using the global `drawio-main` skill from:
|
||||
|
||||
@@ -30,6 +30,19 @@ Load the global `documentation-docusaurus` skill before changing project documen
|
||||
https://gitea.lego-cloud.eu/home-v1-skills-code-agent/documentation-docusaurus
|
||||
```
|
||||
|
||||
Load the global `corp-v1--glossary` skill from `https://gitea.lego-cloud.eu/home-v1-skills-code-agent/corp-v1--glossary` whenever project documentation needs to define or explain a reusable term. Maintain one canonical definition in the project's final top-level **Glossary** area and link to it from the owning domain page; do not duplicate glossary-style explanations across channel documentation.
|
||||
|
||||
## Shared Corp v1 System Login
|
||||
|
||||
When an authorized task requires login to a Corp v1 system being built or operated, follow the shared policy in `corp-v1--main` and use only the Bitwarden-injected runtime secrets named:
|
||||
|
||||
```text
|
||||
HL_V1_SSO_EMAIL
|
||||
HL_V1_SSO_PASSWORD
|
||||
```
|
||||
|
||||
Secret availability is capability, not authorization. Verify the destination origin and task purpose before login. Never print, inspect, log, hash, serialize, paste, screenshot, or persist either value; never place a value in a command line, URL, file, repository, prompt, Discord message, browser console, test fixture, CI output, or generated artifact. Never ask a human to paste a value into chat. If a variable is unavailable, report only its missing name and request Bitwarden/gateway injection. Login does not authorize account recovery, MFA or credential changes, permission changes, billing, spending, destructive operations, or access outside the approved project task.
|
||||
|
||||
## When to Use
|
||||
|
||||
Use this skill when:
|
||||
@@ -62,12 +75,13 @@ Inspect only:
|
||||
corp-v1-<code>-general
|
||||
corp-v1-<code>-scope
|
||||
corp-v1-<code>-architecture
|
||||
corp-v1-<code>-ui-ux
|
||||
corp-v1-<code>-kanban
|
||||
corp-v1-<code>-delivery
|
||||
corp-v1-<code>-releases
|
||||
```
|
||||
|
||||
Use mapped-channel history to avoid duplicate work and new relevant activity from the other five channels. Never inspect another project's channels.
|
||||
Use mapped-channel history to avoid duplicate work and new relevant activity from the other six channels. Never inspect another project's channels.
|
||||
|
||||
## Architecture Documentation Contract
|
||||
|
||||
@@ -188,6 +202,23 @@ Use stable IDs such as `FR-0001` and `NFR-0001`. Requirements must be unambiguou
|
||||
|
||||
Architecture derives and maintains implementation-task semantics, dependencies, sequencing, and readiness from the FR/NFR solution. Scope hosts the canonical task records and reader pages under their owning Feature; Architecture must not create a competing task registry page or task navigation.
|
||||
|
||||
Architecture owns complete Task decomposition for every Feature allocated to the release.
|
||||
|
||||
Before reporting a release planning-ready, Architecture must:
|
||||
|
||||
1. Architecture creates missing Tasks, reviews existing Tasks, and retains, revises, supersedes, or removes them according to the current Feature outcomes and Architecture boundaries. Architecture may freely revise or remove only draft Tasks with no implementation approval, Kanban admission, execution, or completion evidence;
|
||||
2. define between two and six independently executable Tasks per Feature; permit one Task only when a recorded Architecture rationale proves it is the smallest atomic, independently verifiable boundary;
|
||||
3. map the Feature's Tasks collectively, exactly, and reciprocally to every acceptance-outcome ID and every applicable active `FR-*` and `NFR-*` record;
|
||||
4. encode acyclic within-Feature sequencing and require every entry Task to depend on all terminal Tasks of every prerequisite Feature;
|
||||
5. give each Task one specific outcome, repository/component owner, canonical/display identity, task-specific implementation artifacts, concrete inputs and outputs, failure boundaries, exclusions, verification steps, and future acceptance-evidence requirements;
|
||||
6. keep draft Tasks separate from implementation approval and Kanban Focus admission.
|
||||
|
||||
Architecture must not report planning readiness while any Feature allocated to the release lacks this complete Task breakdown. A Feature-shaped placeholder Task, a generated empty Task group, or requirement coverage without executable Tasks does not satisfy the gate.
|
||||
|
||||
Approved, Kanban-admitted, in-progress, or completed Tasks must not be deleted or silently rewritten. Retain an obsolete Task with a terminal Superseded or Cancelled status, its prior evidence and history, and explicit replacement links.
|
||||
|
||||
A material change to Task scope, outcome, dependency, repository, or component invalidates the Task's existing implementation approval, returns the Task to its pre-approval state, and always requires renewed human `Approved for Implementation` before implementation can resume. After renewed approval, execution still requires a separate exact-task Kanban Focus admission.
|
||||
|
||||
```text
|
||||
canonical_id | display_id | feature | outcome | scope | dependencies | owner | status | acceptance evidence | affected repository/component
|
||||
```
|
||||
@@ -206,6 +237,10 @@ After human Feature implementation approval, Architecture sends dependency-ready
|
||||
|
||||
Every architecture iteration must add or materially improve a useful project-documentation artifact for an eligible human-approved Feature: FR/NFR traceability, C4/ADR content, task decomposition, dependency mapping, risk analysis, version proposal, or review package. Prefer improving existing artifacts over creating duplicates. If no Feature is approved for solution, document the exact waiting gate or actionable clarification instead of advancing unapproved work.
|
||||
|
||||
## UI/UX Coordination
|
||||
|
||||
Architecture supplies UI/UX with system boundaries, interfaces, data availability, security/privacy constraints, and affected containers/components. UI/UX owns the frontend experience, Penpot design source, design-system decisions, accessibility evidence, and implementation handoff. Neither channel silently changes the other channel’s approved constraints.
|
||||
|
||||
## Synchronization Workflow
|
||||
|
||||
1. Read new same-project activity and enough architecture history to avoid duplicates.
|
||||
@@ -259,7 +294,7 @@ Requires team approval for:
|
||||
|
||||
## Verification Checklist
|
||||
|
||||
- [ ] Only the six same-project channels were inspected.
|
||||
- [ ] Only the seven same-project channels were inspected.
|
||||
- [ ] Architecture documentation reflects verified status.
|
||||
- [ ] C4 scope and level are appropriate.
|
||||
- [ ] `drawio-main` governed every diagram change.
|
||||
@@ -273,6 +308,7 @@ Requires team approval for:
|
||||
- [ ] ADR, FR, and NFR entries have stable IDs and traceability.
|
||||
- [ ] Every solution Feature has explicit human `Approved for Solution` evidence.
|
||||
- [ ] Eligible Features have dependency-aware task derivation and version proposals, with canonical task reader pages under their Scope Feature.
|
||||
- [ ] Every Feature allocated to the planned release has a reviewed, non-placeholder Task breakdown covering every acceptance outcome and applicable requirement, with acyclic within-Feature and cross-Feature dependencies.
|
||||
- [ ] Task display IDs use `<UPPERCASE_PROJECT_CODE>-TS-<NUMBER>` without rewriting historic canonical identities, evidence, or append-only hashes.
|
||||
- [ ] Only a human team member moved a Feature to `Approved for Implementation` or finalized its version.
|
||||
- [ ] Tasks were proposed to Kanban with readiness/dependency evidence; Architecture did not self-admit them to Focus `InBacklog`.
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
from pathlib import Path
|
||||
import re
|
||||
import unittest
|
||||
|
||||
|
||||
COMMENT = re.compile(r"<!--.*?-->", re.DOTALL)
|
||||
|
||||
|
||||
def task_section(skill: str) -> str:
|
||||
operative = COMMENT.sub("", skill)
|
||||
return operative.split("## Task and Dependency Breakdown", 1)[1].split("## Version Allocation", 1)[0]
|
||||
|
||||
|
||||
def policy_failures(section: str, approval_rule: str) -> list[str]:
|
||||
section = COMMENT.sub("", section)
|
||||
patterns = {
|
||||
"ownership": r"(?m)^Architecture owns complete Task decomposition for every Feature allocated to the release\.$",
|
||||
"lifecycle": r"(?m)^1\. Architecture creates missing Tasks, reviews existing Tasks, and retains, revises, supersedes, or removes them according to the current Feature outcomes and Architecture boundaries\. Architecture may freely revise or remove only draft Tasks with no implementation approval, Kanban admission, execution, or completion evidence;$",
|
||||
"cardinality": r"(?m)^2\. define between two and six independently executable Tasks per Feature; permit one Task only when a recorded Architecture rationale proves it is the smallest atomic, independently verifiable boundary;$",
|
||||
"mapping": r"(?m)^3\. map the Feature's Tasks collectively, exactly, and reciprocally to every acceptance-outcome ID and every applicable active `FR-\*` and `NFR-\*` record;$",
|
||||
"dependencies": r"(?m)^4\. encode acyclic within-Feature sequencing and require every entry Task to depend on all terminal Tasks of every prerequisite Feature;$",
|
||||
"contract": r"(?m)^5\. give each Task one specific outcome, repository/component owner, canonical/display identity, task-specific implementation artifacts, concrete inputs and outputs, failure boundaries, exclusions, verification steps, and future acceptance-evidence requirements;$",
|
||||
"separate-gates": r"(?m)^6\. keep draft Tasks separate from implementation approval and Kanban Focus admission\.$",
|
||||
"planning-readiness": r"(?m)^Architecture must not report planning readiness while any Feature allocated to the release lacks this complete Task breakdown\. A Feature-shaped placeholder Task, a generated empty Task group, or requirement coverage without executable Tasks does not satisfy the gate\.$",
|
||||
"protected-history": r"(?m)^Approved, Kanban-admitted, in-progress, or completed Tasks must not be deleted or silently rewritten\. Retain an obsolete Task with a terminal Superseded or Cancelled status, its prior evidence and history, and explicit replacement links\.$",
|
||||
"approval-invalidation": approval_rule,
|
||||
}
|
||||
return [name for name, pattern in patterns.items() if re.search(pattern, section) is None]
|
||||
|
||||
|
||||
class TaskBreakdownPolicyTest(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.skill = Path(__file__).parents[1].joinpath("SKILL.md").read_text()
|
||||
cls.task_section = task_section(cls.skill)
|
||||
cls.approval_rule = (
|
||||
r"(?m)^A material change to Task scope, outcome, dependency, repository, or component invalidates the Task's existing implementation approval, returns the Task to its pre-approval state, and always requires renewed human `Approved for Implementation` before implementation can resume\. After renewed approval, execution still requires a separate exact-task Kanban Focus admission\.$"
|
||||
)
|
||||
|
||||
def test_operational_policy_is_complete_and_structured(self):
|
||||
self.assertIn("version: 1.7.0", self.skill)
|
||||
self.assertEqual(policy_failures(self.task_section, self.approval_rule), [])
|
||||
|
||||
def test_comments_and_weakened_rules_cannot_satisfy_policy(self):
|
||||
self.assertTrue(policy_failures(f"<!--{self.task_section}-->", self.approval_rule))
|
||||
mutations = {
|
||||
"draft-protection": ("with no implementation approval, Kanban admission, execution, or completion evidence", "even with implementation approval, Kanban admission, execution, or completion evidence"),
|
||||
"planning-readiness": ("must not report planning readiness", "may report planning readiness"),
|
||||
"placeholder-rejection": ("A Feature-shaped placeholder Task, a generated empty Task group, or requirement coverage without executable Tasks does not satisfy the gate.", ""),
|
||||
"cardinality": ("between two and six", "at least two"),
|
||||
"mapping": ("exactly, and reciprocally", "loosely"),
|
||||
"dependencies": ("all terminal Tasks", "some Tasks"),
|
||||
"approval": ("invalidates the Task's existing implementation approval", "invalidates prior readiness evidence"),
|
||||
"renewal": ("always requires renewed human", "may require renewed human"),
|
||||
}
|
||||
for name, (old, new) in mutations.items():
|
||||
with self.subTest(name=name):
|
||||
self.assertTrue(policy_failures(self.task_section.replace(old, new), self.approval_rule))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user