Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .governance/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,10 @@
"git2mcp/**",
"mcp-gateway/**",
"mcp-docs/**",
"mcp-webui/**"
"mcp-webui/**",
"llm-agent/**",
"mcp-git-proxy/**",
"mcp-skills/**"
]
},
"governance": {
Expand Down
16 changes: 8 additions & 8 deletions .governance/standard-adoption.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -54,7 +54,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -94,7 +94,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -129,7 +129,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -169,7 +169,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -209,7 +209,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -244,7 +244,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down Expand Up @@ -284,7 +284,7 @@
"artifacts": [
{
"target": ".governance/manifest.json",
"sha256": "2254f0b710fbe784c7e331ceabe37f1371b169b75fddef01e72691a627e2266f"
"sha256": "1e1f98ea4ec6d2926a2d9c4d219a1f487238c0ceec39abbf89c77a75e116570c"
}
],
"evidence": [
Expand Down
1 change: 1 addition & 0 deletions project/TICKETS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ This file indexes governance tickets without taking ownership of
| **ticket-016** | [`README.md`](./ticket-016/README.md) | - | - | - | - | - |
| **ticket-019** | [`README.md`](./ticket-019/README.md) | - | - | - | - | - |
| **ticket-020** | [`README.md`](./ticket-020/README.md) | - | - | - | - | - |
| **ticket-021** | [`README.md`](./ticket-021/README.md) | - | - | - | - | - |
<!-- AUTO:TICKET_INDEX:END -->
3 changes: 2 additions & 1 deletion project/ticket-019/intent.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
"project/TICKETS.md",
".gitattributes",
"project.bat",
".governance/manifest.json"
".governance/manifest.json",
"tests/test_openwebui_configurator.py"
],
"forbiddenPaths": [
"project/ticket-*/user-*.md"
Expand Down
22 changes: 22 additions & 0 deletions project/ticket-021/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Ticket 021: Dependency maintenance: llm-agent and mcp-skills requirement manifests

- **ID**: ticket-021
- **Owner**: agent:claude
- **Status**: IN_PROGRESS
- **Workflow state**: EDIT
- **Created**: 2026-10-23

## Goal and scope

Own the automated dependency updates for `llm-agent/requirements.txt` and
`mcp-skills/requirements.txt` (requires the `llm-agent/**` and
`mcp-skills/**` application ownership declared by ticket-019).

## Acceptance criteria

- [ ] AC-01: the mcp requirement bump resolves to this ticket and passes
the governance gate on a current base.

## Tracking boundary

Requirement manifests only; no runtime code changes.
29 changes: 29 additions & 0 deletions project/ticket-021/intent.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"schema": "new-project.intent/v3",
"ticket": "ticket-021",
"summary": "Dependency maintenance: llm-agent and mcp-skills requirement manifests",
"workstream": "application",
"classification": {
"kind": "SERVICE",
"priority": "P2",
"origin": "health"
},
"allowedPaths": [
"project/ticket-021/**",
"TODO.md",
"project/TICKETS.md",
"llm-agent/requirements.txt",
"mcp-skills/requirements.txt",
"mcp-docs/requirements.txt",
"mcp-gateway/requirements.txt",
"mcp-git-proxy/requirements.txt",
"mcp-webui/requirements.txt"
],
"forbiddenPaths": [
"project/ticket-*/user-*.md"
],
"stacks": [],
"dependsOn": [],
"conflictsWith": [],
"integrationTicket": null
}
19 changes: 19 additions & 0 deletions tests/test_openwebui_configurator.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,22 @@ def test_image_override_preserves_authenticated_boundary(override: str) -> None:
for volume in webui["volumes"]
)
assert "@sha256:" in services["redis"]["image"]


def test_application_workstream_owns_every_subproject_requirement_manifest():
"""Governance contract (ticket-019/ticket-021): the application workstream
owns all subproject requirement manifests, and ticket-021 resolves
automated dependency updates for them to exactly one active ticket."""
import json

manifest = json.loads((ROOT / ".governance" / "manifest.json").read_text(encoding="utf-8"))
owned = manifest["coordination"]["workstreams"]["application"]["ownedPaths"]
subprojects = ("llm-agent", "mcp-docs", "mcp-gateway", "mcp-git-proxy", "mcp-skills", "mcp-webui")
for name in subprojects:
assert f"{name}/**" in owned, f"application workstream must own {name}/**"

intent = json.loads((ROOT / "project" / "ticket-021" / "intent.json").read_text(encoding="utf-8"))
allowed = set(intent["allowedPaths"])
assert intent["workstream"] == "application"
for name in subprojects:
assert f"{name}/requirements.txt" in allowed, f"ticket-021 must own {name}/requirements.txt"
Loading