diff --git a/.governance/docs.json b/.governance/docs.json new file mode 100644 index 0000000..d9f3b76 --- /dev/null +++ b/.governance/docs.json @@ -0,0 +1,7 @@ +{ + "schema": "wellmanifest.docs/adoption/v1", + "repository": "autogrammar/testql", + "standard": "wellmanifest/docs", + "source_revision": "aa92136b4e94f48355c39fb206286aba024c6aa4", + "policy_sha256": "af5fde2d52e1c292e569cd47a4068f0e42181a8f8fb9fc21737a569bee9a206f" +} diff --git a/.governance/local-ci-publication.json b/.governance/local-ci-publication.json new file mode 100644 index 0000000..ef4ea39 --- /dev/null +++ b/.governance/local-ci-publication.json @@ -0,0 +1,6 @@ +{ + "schema": "new-project.local-ci-publication/v1", + "scope": { + "mode": "all" + } +} diff --git a/.governance/standard-requirements.json b/.governance/standard-requirements.json new file mode 100644 index 0000000..3ca1718 --- /dev/null +++ b/.governance/standard-requirements.json @@ -0,0 +1,57 @@ +{ + "schema": "wellman.standard-requirements/v1", + "profiles": [ + "baseline", + "deployment" + ], + "requirements": [ + { + "id": "wellmanifest/agent", + "minimumLevel": "S4" + }, + { + "id": "wellmanifest/authority-lifecycle", + "minimumLevel": "S5" + }, + { + "id": "wellmanifest/deployment", + "minimumLevel": "S5" + }, + { + "id": "wellmanifest/docs", + "minimumLevel": "S3" + }, + { + "id": "wellmanifest/git-lifecycle", + "minimumLevel": "S4" + }, + { + "id": "wellmanifest/logs", + "minimumLevel": "S5" + }, + { + "id": "wellmanifest/merge", + "minimumLevel": "S5" + }, + { + "id": "wellmanifest/new-project", + "minimumLevel": "S4" + }, + { + "id": "wellmanifest/poa", + "minimumLevel": "S5" + }, + { + "id": "wellmanifest/ticket-lifecycle", + "minimumLevel": "S3" + }, + { + "id": "wellmanifest/validation-attestation", + "minimumLevel": "S4" + }, + { + "id": "wellmanifest/worktrees", + "minimumLevel": "S3" + } + ] +} diff --git a/project/TICKETS.md b/project/TICKETS.md index 4845d1f..9c36c1e 100644 --- a/project/TICKETS.md +++ b/project/TICKETS.md @@ -21,5 +21,6 @@ This file indexes governance tickets without taking ownership of | **ticket-013** | [`README.md`](./ticket-013/README.md) | - | - | - | - | - | | **ticket-014** | [`README.md`](./ticket-014/README.md) | - | - | - | - | - | | **ticket-015** | [`README.md`](./ticket-015/README.md) | - | - | - | - | - | +| **ticket-016** | [`README.md`](./ticket-016/README.md) | - | - | [`ai-codex.md`](./ticket-016/ai-codex.md) | - | - | | **ticket-017** | [`README.md`](./ticket-017/README.md) | - | - | [`ai-codex.md`](./ticket-017/ai-codex.md) | - | - | diff --git a/project/ticket-016/README.md b/project/ticket-016/README.md new file mode 100644 index 0000000..ceba259 --- /dev/null +++ b/project/ticket-016/README.md @@ -0,0 +1,29 @@ +# Ticket 016: Adopt pinned Wellman validation + +- **ID**: ticket-016 +- **Owner**: agent:codex +- **Status**: IN_PROGRESS +- **Workflow state**: PUBLICATION +- **Created**: 2026-10-01 + +## Goal and scope + +Register baseline, Agent and Docs requirements, adopt repository-bound Docs +metadata, and validate these contracts with pinned Wellman in local checks locally. A dependent infrastructure-owned workflow is still required. +Preserve the existing new-project pin and all product code. + +## Acceptance criteria + +- [x] AC-01: Wellman registration is idempotent; Docs metadata validates. +- [x] AC-02: The existing managed governance gate accepts the scoped changes. +- [x] AC-03: Missing or invalid requirements and Docs metadata fail validation. +- [ ] AC-04: Publish the exact tested head through the independent controller. + +## Authorization + +SESSION_EXECUTION_AUTHORIZATION: the owner requested installation, completion, +testing and merging of Wellmanifest adoption across Autogrammar repositories. +This authorizes implementation and the declared protected delivery route; +it is not trusted merge approval. + +- [ ] AC-05: The infrastructure owner publishes the dependent Wellman CI workflow. diff --git a/project/ticket-016/ai-codex.md b/project/ticket-016/ai-codex.md new file mode 100644 index 0000000..257bf17 --- /dev/null +++ b/project/ticket-016/ai-codex.md @@ -0,0 +1,2 @@ +SESSION_EXECUTION_AUTHORIZATION: complete, test and publish adoption. +Governance owns metadata and the local checker. The separate infrastructure workstream owns .github/workflows/wellman.yml; do not transfer its scope. diff --git a/project/ticket-016/intent.json b/project/ticket-016/intent.json new file mode 100644 index 0000000..79249e6 --- /dev/null +++ b/project/ticket-016/intent.json @@ -0,0 +1,92 @@ +{ + "schema": "new-project.intent/v3", + "ticket": "ticket-016", + "summary": "Adopt pinned Wellman requirements and Docs validation", + "workstream": "governance", + "classification": { + "kind": "SERVICE", + "priority": "P1", + "origin": "requested" + }, + "allowedPaths": [ + "project/ticket-016/**", + "TODO.md", + "project/TICKETS.md", + ".governance/docs.json", + ".governance/local-ci-publication.json", + ".governance/standard-requirements.json", + "scripts/check-wellman.py" + ], + "forbiddenPaths": [ + "project/ticket-*/user-*.md" + ], + "stacks": [], + "dependsOn": [], + "conflictsWith": [], + "integrationTicket": null, + "delivery": { + "acceptedBaseSha": "e6e8045774d72d4c4ac0fa028a825f76572cf3d5", + "targetBranch": "main", + "outcome": "Register published Wellman requirements, adopt repository-bound Docs metadata, and provide a local validation command; infrastructure owns the dependent CI workflow.", + "nonGoals": [ + "No product source changes", + "No bypass of protected publication", + "No claim of unimplemented S3-S5 conformance" + ], + "complexity": "M", + "estimatedMinutes": 45, + "budgets": { + "maxImplementationFiles": 9, + "maxAffectedComponents": 3, + "maxPublicInterfaceChanges": 0, + "maxRuntimeDependencies": 1 + }, + "architecture": { + "status": "accepted", + "decision": "Compose the published Wellman runtime with the existing pinned new-project gate.", + "components": [ + { + "name": "governance", + "paths": [ + ".governance/**", + "scripts/check-wellman.py" + ] + } + ], + "responsibilityChanges": false, + "interfaceChanges": [], + "dataChanges": [ + { + "kind": "component-local-state", + "component": "governance", + "description": "Repository-bound requirements and Docs metadata; no application data migration." + } + ], + "ui": { + "impact": "none", + "states": [], + "evidence": [] + }, + "rollback": "Revert the adoption commit; preserve existing immutable governance pin." + }, + "runtimeDependencies": [ + "wellman@0.20.37" + ], + "validation": [ + { + "criterion": "AC-01", + "commands": [ + "python scripts/check-wellman.py" + ], + "evidence": "No Wellman errors; registration is idempotent and Docs metadata validates." + }, + { + "criterion": "AC-02", + "commands": [ + "bash project/governance-check.sh --actor agent" + ], + "evidence": "Existing managed gate accepts the scoped adoption." + } + ] + } +} diff --git a/scripts/check-wellman.py b/scripts/check-wellman.py new file mode 100644 index 0000000..069a555 --- /dev/null +++ b/scripts/check-wellman.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +"""Validate adopted metadata; the managed gate owns full repository governance.""" +import argparse +import json +import sys +from pathlib import Path + +from wellman import __version__ +from wellman.adoption import register, safe_path +from wellman.docs_adoption import validate_adoption +from wellman.runner import ConformanceRunner + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1]) + try: + root = safe_path(parser.parse_args().root) + except (OSError, ValueError) as error: + print(json.dumps({"valid": False, "findings": [{"code": "WELLMAN-ROOT", "message": str(error)}]})) + return 1 + findings = [] + if __version__ != "0.20.37": + findings.append({"code": "WELLMAN-VERSION", "message": "Install the pinned Wellman 0.20.37 runtime."}) + try: + registration = register(root, standards=("wellmanifest/docs", "wellmanifest/agent"), dry_run=True) + if registration["changed"]: + findings.append({"code": "WELLMAN-REQUIREMENTS", "message": "Required standards or publication metadata are missing or stale."}) + problem = registration["localCiPublication"]["problem"] + if problem: + findings.append({"code": "GOV-LOCAL-CI-001", "message": problem}) + findings.extend(validate_adoption(root, required=True)) + findings.extend(f.to_dict() for f in ConformanceRunner(root).run_all() if f.severity == "ERROR") + except (OSError, ValueError, UnicodeError) as error: + findings.append({"code": "WELLMAN-METADATA", "message": str(error)}) + print(json.dumps({"valid": not findings, "root": str(root), "findings": findings, + "scope": "adopted metadata and implemented Wellman checks; not S3-S5 certification"}, indent=2)) + return 1 if findings else 0 + + +if __name__ == "__main__": + sys.exit(main())