From e8ac9cc680729dec49b6f30472ad2763c3aea440 Mon Sep 17 00:00:00 2001 From: Jarvis Jr Hermes Date: Fri, 23 Oct 2026 07:53:01 +0000 Subject: [PATCH 1/2] chore: open scoped disposition implementation -- 2.54.0 From 9332432633a02e2a2e68644255d666b5f788a087 Mon Sep 17 00:00:00 2001 From: Jarvis Jr Hermes Date: Fri, 23 Oct 2026 08:11:38 +0000 Subject: [PATCH 2/2] refactor: implement concrete Delivery responsibility dispositions --- SKILL.md | 52 ++++++++++++++++++++++++++++++++++++++++++ tests/contract.json | 12 ++++++++++ tests/test_contract.py | 21 +++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 SKILL.md create mode 100644 tests/contract.json create mode 100644 tests/test_contract.py diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..64ff243 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,52 @@ +--- +name: delivery-docs +description: Maintain evidence-backed delivery documentation. +version: 0.1.0 +author: SKIC maintainers, Hermes Agent +license: MIT +platforms: [linux] +metadata: + hermes: + tags: [delivery, governance] + related_skills: [] +--- + +# Delivery documentation + +Owns the coverage and evidence-to-page reconciliation of Delivery-owned Ways of Working and Engineering. Documentation-platform mechanics and canonical term definitions remain with their named owners. + +## When to use +Before changing delivery process documentation or recording a durable engineering lesson. Do not use this to approve requirements or make planned practice operational. + +## Procedure +1. Obtain the consumer's documentation repository, current default revision, authoring skill and glossary binding. Stop the affected edit if a binding is absent or its source identity cannot be verified. +2. Load the bound documentation-platform skill before authoring, navigation, Markdown/MDX, configuration or build work. Load the bound glossary before defining reusable terms. A same-name unrelated installation does not satisfy a source-qualified load. +3. Compare changed implementation/decision evidence with the coverage below. For each affected area, record the existing page, evidence source, exact change and owner. Leave unaffected areas alone; report a missing source rather than inventing content. +4. Reconcile actual practice in the owning page, link shared definitions, and distinguish proposed practice from verified operation. Never copy the same procedure into several channel pages. +5. Run the repository's documented validation/build in that repository; review the changed pages against the evidence, publish under its workflow and read back the exact published content. Local build success is not publication. + +Bind the following coverage vocabulary to the consumer's lifecycle, verification owners and artifact responsibilities; it does not impose SKIC authorization on other projects. For AeroSim, the authoring binding must be `documentation-docusaurus-skic-aerosim` and shared terms must load `glossary-skic`, as supplied by its Delivery reference. + +## Domain coverage + +### Ways of Working — five sections + +1. **Delivery workflow** — intake, prioritization, implementation states, and definition of done. +2. **Branching and reviews** — branch conventions, pull requests, approvals, and merge expectations. +3. **Planning and ownership** — backlog, sequencing, owners, dependencies, blockers, and escalation. +4. **Quality practices** — review standards, test strategy, defect handling, and evidence expectations. +5. **Collaboration and decisions** — channel routing, handoffs, decision references, and communication norms. + +### Engineering — five sections + +1. **Repository and workspace** — monorepo/application/package structure and local prerequisites. +2. **Development and unit testing** — commands, unit-test fixtures, debugging, Delivery artifact validation, and the handoff to UAT for every functional non-unit suite. +3. **Build and continuous integration** — pipelines, checks, artifacts, runners, and failure diagnosis. +4. **Packaging and deployment preparation** — containers, Helm/GitOps interfaces, configuration, and release inputs. +5. **Operations and troubleshooting** — observability, known failure modes, recovery checks, and evidence collection. + +Update these pages from verified project practice. Do not document a planned process as already operational. + + +## Pitfalls and verification +A planned policy is not operational evidence. Do not turn a merged planning page into implementation approval. Before handing back, verify every changed domain statement has a current source, both required owner loads succeeded, links resolve and publication identity is retained. Delivery retains approval and lifecycle decisions. diff --git a/tests/contract.json b/tests/contract.json new file mode 100644 index 0000000..13b5ede --- /dev/null +++ b/tests/contract.json @@ -0,0 +1,12 @@ +[ + "Stop the affected edit", + "source identity", + "Do not document a planned process as already operational", + "Delivery workflow", + "Collaboration and decisions", + "Repository and workspace", + "Operations and troubleshooting", + "read back the exact published content", + "documentation-docusaurus-skic-aerosim", + "glossary-skic" +] diff --git a/tests/test_contract.py b/tests/test_contract.py new file mode 100644 index 0000000..2bb4377 --- /dev/null +++ b/tests/test_contract.py @@ -0,0 +1,21 @@ +"""Safeguard validation with negative mutation controls; no live operations.""" +from pathlib import Path +import json,unittest +ROOT=Path(__file__).resolve().parents[1] +CLAUSES=json.loads((Path(__file__).parent/'contract.json').read_text()) +def validate(text): + missing=[s for s in CLAUSES if s.lower() not in text.lower()] + if missing: raise ValueError(missing) +class Contract(unittest.TestCase): + def test_published_procedure_has_all_safeguards(self): + validate((ROOT/'SKILL.md').read_text()) + def test_each_removed_safeguard_is_rejected(self): + text=(ROOT/'SKILL.md').read_text().lower() + for s in CLAUSES: + with self.subTest(s=s),self.assertRaises(ValueError):validate(text.replace(s.lower(),'')) + def test_procedure_not_an_empty_router(self): + text=(ROOT/'SKILL.md').read_text() + self.assertIn('## Verification' if '## Verification' in text else 'verification',text) + self.assertTrue('Stop' in text or 'stop' in text or 'status unverified' in text) + self.assertTrue('## Procedure' in text or '## Failure-Repair Workflow' in text or '## Scope Status Vocabulary' in text) +if __name__=='__main__':unittest.main() -- 2.54.0