feat(forge-credential): add gitea-ssh-hatchmate/v1 layer + 4 hatchmate composite forks
M2-CRS W4 unblock: dispatched agents could not clone hatchmate/hatchmate-agents
because the shared gitea-ssh/v1 context mounts the ai_enablement deploy key,
which is scoped to skynet/* only. Same bug would hit every project whose
working repo lives outside the skynet org.
This implements the per-org pattern the framework already uses for accelerators
(gitea-ssh-accelerators/v1) and homelab (gitea-ssh-homelab/v1):
- harnesses/contexts/gitea-ssh-hatchmate/v1/{init.sh,harness.yaml} — NEW
forge-credential context mirroring accelerators, with account_ref
'hatchmate.space:platform' and write_targets covering hatchmate/*. The
init.sh stages the ESO-mounted private key to ~/.ssh/gitea-oreillyit-nz-hatchmate
(matching the ssh alias declared in harness.yaml). URL host pattern
'gitea.oreillyit.nz-hatchmate' (per-org alias) drives SSH config block
selection — already auto-written by harness_init.py from each layer's
ssh_hosts: declarations.
- harnesses/composites/code-*-tdd-repo-hatchmate/v1/ — NEW composites for
fable/minimax/airouter/opus that compose BOTH gitea-ssh/v1 (for reference
clones, skynet org) AND gitea-ssh-hatchmate/v1 (for working-repo clone +
push, hatchmate org). Composites are unchanged for non-hatchmate projects.
- tests/invariants/test_forge_credentials_declare_write_targets.py — the
existing xfail(strict=True) marker was wrong: the 4 existing layers all
declare write_targets today, so the test was XPASSing. Removed the
xfail marker so HC-11 is now a real positive gate (5 layers instead
of 4). This was a pre-existing test bug surfaced by the 5th layer.
W4 next step: dispatcher's account_ref resolution needs the hatchmate CP
account + grant to be created (via the new scripts/provision-hatchmate-fork-key.sh
in the hatchmate app repo).
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
kind: composite
|
||||
name: code-airouter-tdd-repo-hatchmate
|
||||
version: 1
|
||||
description: "Airouter Qwen3.6 code agent (hatchmate fork) — adds gitea-ssh-hatchmate for write access to hatchmate/hatchmate-agents. Use this for hatchmate work; the un-suffixed composite uses the shared ai-enablement key which has no access to the hatchmate org."
|
||||
|
||||
# Inherits airouter context's label gate — only the airouter dispatcher
|
||||
# advertises this composite (see dispatcher/poller._collect_supported_harnesses).
|
||||
requires_labels: [airouter]
|
||||
|
||||
layers:
|
||||
- context: qwen-code-methodology/v1
|
||||
- context: best-practices/v1
|
||||
- context: airouter/v1
|
||||
- context: gitea-ssh/v1
|
||||
- context: gitea-ssh-hatchmate/v1
|
||||
- context: agent-repo/v1
|
||||
- context: tdd-protect/v1
|
||||
- context: tdd-gate/v1
|
||||
- capability: python-dev/v1
|
||||
- capability: tdd-file-lock/v1
|
||||
@@ -0,0 +1,14 @@
|
||||
kind: composite
|
||||
name: code-fable-tdd-repo-hatchmate
|
||||
version: 1
|
||||
description: "Fable code agent (hatchmate fork) — adds gitea-ssh-hatchmate for write access to hatchmate/hatchmate-agents. Use this for hatchmate work; the un-suffixed composite uses the shared ai-enablement key which has no access to the hatchmate org."
|
||||
layers:
|
||||
- context: code-methodology/v1
|
||||
- context: anthropic-cloud-paul-oauth/v1
|
||||
- context: gitea-ssh/v1
|
||||
- context: gitea-ssh-hatchmate/v1
|
||||
- context: agent-repo/v1
|
||||
- context: tdd-protect/v1
|
||||
- context: tdd-gate/v1
|
||||
- capability: python-dev/v1
|
||||
- capability: tdd-file-lock/v1
|
||||
@@ -0,0 +1,15 @@
|
||||
kind: composite
|
||||
name: code-minimax-tdd-repo-hatchmate
|
||||
version: 1
|
||||
description: "MiniMax code agent (hatchmate fork) — adds gitea-ssh-hatchmate for write access to hatchmate/hatchmate-agents. Use this for hatchmate work; the un-suffixed composite uses the shared ai-enablement key which has no access to the hatchmate org."
|
||||
|
||||
layers:
|
||||
- context: minimax-code-methodology/v1
|
||||
- context: minimax/v1
|
||||
- context: gitea-ssh/v1
|
||||
- context: gitea-ssh-hatchmate/v1
|
||||
- context: agent-repo/v1
|
||||
- context: tdd-protect/v1
|
||||
- context: tdd-gate/v1
|
||||
- capability: python-dev/v1
|
||||
- capability: tdd-file-lock/v1
|
||||
@@ -0,0 +1,15 @@
|
||||
kind: composite
|
||||
name: code-opus-tdd-repo-hatchmate
|
||||
version: 1
|
||||
description: "Opus code agent (hatchmate fork) — adds gitea-ssh-hatchmate for write access to hatchmate/hatchmate-agents. Use this for hatchmate work; the un-suffixed composite uses the shared ai-enablement key which has no access to the hatchmate org."
|
||||
|
||||
layers:
|
||||
- context: code-methodology/v1
|
||||
- context: anthropic-cloud-paul-oauth/v1
|
||||
- context: gitea-ssh/v1
|
||||
- context: gitea-ssh-hatchmate/v1
|
||||
- context: agent-repo/v1
|
||||
- context: tdd-protect/v1
|
||||
- context: tdd-gate/v1
|
||||
- capability: python-dev/v1
|
||||
- capability: tdd-file-lock/v1
|
||||
Reference in New Issue
Block a user