Skip to content

Commit 4ef55a4

Browse files
Knucklessg1claude
andauthored
fix: point Knuckles-Team/pipelines calls at @main, fix pages permissions (#7)
* docs(agents): add upstream currency edict (fleet standardization) Propagates the upstream-currency edict (target the newest release; a pin is a hypothesis, not a fact) from agent-utilities/AGENTS.md, following the same fleet-wide pattern the Version & lockfile drift edict used. D-upgrade-edict-1, reports/deferred/lane-upgrade-edict.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * chore(connectors): repair the MCP server alias and re-certify the bundle The fleet registry (deploy/mcp-fleet.registry.yml in agent-utilities) is the one authority for what this provider's MCP server is called. connectors/mcp_source_presets.json restated that name and had rotted to the *distribution* name, so a source_sync mcp_tool preset could not bind. The alias is now the registry's, and the whole capability bundle -- connector_manifest.yml, ontology/shapes, ontology/mappings, ontology/fixtures, ontology/migrations, ontology/certification.json -- was regenerated over the corrected input and re-signed with the release authority ontology.lock pins (QkigdPNpcUU7...), recovered from versioned OpenBao KV v2 custody. a2a.json is generated too: the certification pipeline now derives it from this package's own pyproject.toml before the ledger hashes it, so the previously hand-maintained card can no longer drift from what the certification signs. Nothing here was hand-edited; every artifact is generator output. Requires agent-utilities feat/connector-alias-recert, which composes feat/drift-proof-release-system (registry-derived alias, derived SOURCE_COMPATIBILITY, versioned-custody + lock-agreement signing gate) with 61ff41ec (generated a2a.json). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * lane-guard: reach the lane-concurrency canonical-checkout guard (D-CP-3) Adds the same lane-guard local hook agent-utilities/epistemic-graph/universal-skills already carry -- shells out, unmodified, to agent-utilities' check_lane_guard.py via the AGENT_UTILITIES_ROOT sibling-checkout idiom this repo already uses for check-stubs/check-sprawl. No new dependency. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix: point Knuckles-Team/pipelines calls at @main, fix pages permissions The stale pin dc60f5ca0cfd00bf2e66f912a33d6d0f8ee62874 broke pages.yml CI with "Invalid workflow file ... requesting 'contents: write', but is only allowed 'contents: read'" because the callee pages_pipeline.yml declares permissions: contents: write, pages: write, id-token: write. Bumped the job's contents permission from read to write to match. python_pipeline.yml and container_pipeline.yml (called from pipeline.yml) declare no permissions block, so no permission mismatch there -- only the stale ref needed fixing. Per operator intent: track main so the fleet always uses the latest pipeline release. This repo carries no supply-chain-source-contract SHA-pin gate, so a floating @main ref is appropriate (contrast agent-utilities, which does carry that gate and stays pinned to a concrete tip SHA instead). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 5424dc7 commit 4ef55a4

8 files changed

Lines changed: 70 additions & 18 deletions

File tree

.github/workflows/pages.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ jobs:
1616
publish-pages:
1717
uses: Knuckles-Team/pipelines/.github/workflows/pages_pipeline.yml@main
1818
permissions:
19-
contents: read
19+
contents: write
2020
pages: write
2121
id-token: write

.pre-commit-config.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ repos:
8282
language: system
8383
files: \.md$
8484
pass_filenames: true
85+
- id: lane-guard
86+
name: Lane guard — canonical checkout read-only + stray CARGO_TARGET_DIR (D-CP-3/D-CP-4 reach)
87+
entry: bash -c 'repo=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)"); root=${AGENT_UTILITIES_ROOT:-"$(dirname "$repo")/agent-utilities"}; python3 "$root/scripts/check_lane_guard.py"'
88+
language: system
89+
pass_filenames: false
90+
always_run: true
8591
- id: check-stubs
8692
name: Check for Active Stubs and TODOs
8793
entry: bash -c 'repo=$(dirname "$(git rev-parse --path-format=absolute --git-common-dir)"); root=${AGENT_UTILITIES_ROOT:-"$(dirname "$repo")/agent-utilities"}; python3 "$root/scripts/check_stubs.py" "$@"' --

AGENTS.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,3 +390,33 @@ is what Dependabot flags. Rules:
390390
Dependabot/security surface.
391391
4. **Patch CVEs with a version floor at the source, then re-lock.** `uv` resolves one version
392392
graph-wide, so a lower-bound in the extra that pulls a dependency raises it for the whole lock.
393+
394+
## Upstream currency edict — target the newest release; a pin is a hypothesis, not a fact (READ BEFORE capping, deferring, or opt-in-gating an upgrade)
395+
396+
This governs how we treat **other people's** releases, deprecations, and version caps in
397+
this repo (fleet-wide edict, propagated from `agent-utilities/AGENTS.md`).
398+
399+
1. **Latest by default.** Target the newest upstream release -- including a pre-release
400+
where the ecosystem has already moved onto it. Sitting on an old major because the
401+
upgrade is work is not a reason to defer it.
402+
2. **A conservative upstream pin is a hypothesis, not a fact -- test it, don't inherit
403+
it.** Upstream maintainers cap defensively (an unreleased major, an untested surface)
404+
as often as they cap for a known break. Worked example (from `agent-utilities`):
405+
`pydantic-ai-slim` 2.18.0 declared `fastmcp-slim[client]>=3.3.0` with no upper bound;
406+
2.19.0 added `<4` purely as a defensive guard while fastmcp 4 was still pre-release --
407+
not because of an observed incompatibility. Blocking an upgrade on that kind of cap
408+
without testing it is the wrong default.
409+
3. **Forward-fix only.** When an upgrade breaks something, fix the break to proceed --
410+
do not pin backwards, vendor a fork, or route around it. If a break is genuinely
411+
unfixable inside this repo, say exactly what and why, and carry a plan to unblock it
412+
-- never an indefinite pin.
413+
4. **Deprecations are fixed on sight, in code AND in tests.** A `DeprecationWarning` from
414+
an upstream library is a defect to fix now, not noise to filter. **Never** silence one
415+
with a warning filter, `# noqa`, or a pytest `filterwarnings` entry in order to go
416+
green.
417+
5. **Adopt upstream features rather than reimplementing them.** If upstream ships a
418+
capability this repo hand-rolled, migrate to theirs and delete the local one.
419+
6. **Nothing built on an upgrade ships opt-in.** A new capability an upgrade unlocks is
420+
default-on unless it genuinely costs compute, in which case it is policy-selected,
421+
never flag-gated. An opt-in extra or a dependency-conflict fork is an interim state
422+
that must carry a written plan to become the default, never a resting place.

a2a.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,25 @@
22
"name": "gitlab-api-agent",
33
"type": "agent",
44
"version": "27.0.0",
5-
"description": "Agent package for gitlab-api",
5+
"description": "GitLab API + MCP Server + A2A Server",
66
"url": "https://github.com/Knuckles-Team/gitlab-api/tree/main",
77
"license": "MIT",
88
"capabilities": [
99
{
1010
"id": "run_graph_flow",
1111
"name": "Graph Flow Execution",
1212
"description": "Execute a workflow through the agent's graph orchestration engine"
13+
},
14+
{
15+
"id": "epistemic-answer",
16+
"name": "Epistemic Answer",
17+
"description": "Answers epistemic_status/why/what_changed queries over the shared knowledge graph: calibrated confidence, evidence/source citations, belief justification trees, bitemporal valid/tx history, and policy-redaction-aware provenance.",
18+
"tags": [
19+
"epistemic",
20+
"provenance",
21+
"confidence",
22+
"kg"
23+
]
1324
}
1425
],
1526
"tools": [

connector_manifest.yml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ resources:
8383
id_prefix: runner
8484
relations: []
8585
actions:
86+
- id: epistemic-answer
87+
name: Epistemic Answer
88+
description: 'Answers epistemic_status/why/what_changed queries over the shared knowledge graph: calibrated
89+
confidence, evidence/source citations, belief justification trees, bitemporal valid/tx history, and
90+
policy-redaction-aware provenance.'
8691
- id: run_graph_flow
8792
name: Graph Flow Execution
8893
description: Execute a workflow through the agent's graph orchestration engine
@@ -330,7 +335,7 @@ schema_mappings:
330335
webUrl: xsd:string
331336
sync:
332337
- preset: gitlab-projects
333-
server: gitlab-api
338+
server: gitlab-mcp
334339
tool: gitlab_projects
335340
action: get
336341
records_path: data
@@ -342,7 +347,7 @@ sync:
342347
doc_type: repository
343348
tool_schema_sha256: 9949c8ae5d2415f22ebf5357da3a43b27a6e79758d56c641cf4d90db6aa41e24
344349
raw:
345-
server: gitlab-api
350+
server: gitlab-mcp
346351
tool: gitlab_projects
347352
action: get
348353
records_path: data
@@ -357,7 +362,7 @@ sync:
357362
doc_type: repository
358363
provenance:
359364
generated_by: scripts/generate_connector_manifests.py
360-
generated_at: '2026-07-18T15:00:00Z'
365+
generated_at: '2026-07-31T04:00:00Z'
361366
source_artifacts:
362367
- a2a.json
363368
- gitlab_api/connectors/mcp_source_presets.json
@@ -369,8 +374,8 @@ provenance:
369374
triple_count: 113
370375
signer: ontology-manifest-generator
371376
signature_algorithm: ed25519
372-
signing_public_key: q0Cp7bmQMqJhbofGKKw8xXC6KbFzukBDDke0UYVi8y4
373-
signature: rcp7_l7pwsKtsDEEA97SE1UfVWfYMe1vsvZoSyybLuq-Kg8xgG4ADnbI9ZLgeJXLjbsJEjIFtLcbUs31rI7NCQ
377+
signing_public_key: QkigdPNpcUU7x7NcSkwCsUXIQpaFncMQbYSoiSgI2SY
378+
signature: BTYLm4xWqKMjRQpCU__C6Bdve_9nRL0yefTC8kmm_H-zNQtipceMaAdzCwg9ob6G9GDIKfb5KjOMgKFVlyQtDA
374379
policy:
375380
pii_fields: {}
376381
tenant_boundary: null

gitlab_api/connectors/mcp_source_presets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"_comment": "Tier-1 mcp_tool source presets for gitlab-api (AU-KG.ingest.mcp-tool-connector). Syncs GitLab projects into the KG as repository documents via the gitlab-api MCP server. Contributed presets win over the central MCP_TOOL_PRESETS. Extend with merge-request / pipeline presets as needed.",
33
"gitlab-projects": {
4-
"server": "gitlab-api",
4+
"server": "gitlab-mcp",
55
"tool": "gitlab_projects",
66
"action": "get",
77
"records_path": "data",
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"api_version": "graphos.io/v1",
33
"artifacts": {
4-
"a2a.json": "c6a3a0e5b70db8d37aa0e25013f94fbe375ac0a743ec61c2e8687bf0fb8d7352",
5-
"connector_manifest.yml": "52eecad24646d9bca3561dc9ade22ee20568cdc7f1a2b71d4be7eab855fa8a6f",
6-
"gitlab_api/connectors/mcp_source_presets.json": "a7093f28b0eb3a211531a66fea312e0400bea643ac9f8536c14298079c0fdd35",
4+
"a2a.json": "a62ddb8b86cfa7c1d25732483601b16d0b71130cdec99da6813dcada61d7b9ff",
5+
"connector_manifest.yml": "7c9e8cc963c00ab0d57cb12655d74b7466254ab4e781b284ccbfd25407ebe7ae",
6+
"gitlab_api/connectors/mcp_source_presets.json": "e3d608244e0b66694fc82ab039613181a98e9e4c25a9bf2c8f0a2b09a0c23061",
77
"gitlab_api/connectors/tool_schema_fingerprints.json": "74f3e6a172be003056bb74279281308a900b53c4d2d12de7fc2affee9fbcc6a3",
88
"gitlab_api/ontology/fixtures/records.json": "5f0417820053941933f15b3f459750753f4e8e34cf1e7853fd030c1143356b40",
99
"gitlab_api/ontology/gitlab.ttl": "19fa64000d2e51c60c53074b1fae4ab98aed85318337b5a2199f4837ae9f3fc0",
10-
"gitlab_api/ontology/mappings/source.yaml": "5fc8629402243afe7223564e58233ab7273ba3b2286dc03aca20de617d5ca9fa",
10+
"gitlab_api/ontology/mappings/source.yaml": "167206b5387f7ca97ce02e0f15164f8fe41f06b413b591d0008c29e9f0a95e7f",
1111
"gitlab_api/ontology/migrations/manifest.json": "442c3c53df0b42c866eef7255b1889b8ada6f9f9c5125cad65d6b50dc6362a3e",
1212
"gitlab_api/ontology/shapes/connector.shacl.ttl": "20d2bfc3827fd6327a3b6f25828b41d9de3f855867c46264a7e0aa7f951c76fa"
1313
},
@@ -19,19 +19,19 @@
1919
"synthetic_fixture_contract": "passed"
2020
},
2121
"compatibility": {
22-
"agent_utilities": ">=1.27.1,<2",
22+
"agent_utilities": ">=2.1.0,<3",
2323
"bundle_schema": "2",
24-
"epistemic_graph": ">=2.23.1,<3"
24+
"epistemic_graph": ">=2.23.0,<3"
2525
},
2626
"connector": "gitlab-api",
2727
"kind": "ConnectorSourceAttestation",
2828
"live_certified": false,
2929
"mode": "offline-source",
3030
"schema_version": "2",
31-
"signature": "OT056oBz7h-O2BX29pZq-quN0J0yqx8c2NSYsVGz30yeovPFTzc3kOzRWJhx7dQU1Vd-yIfXVbudXVy0TqzYBQ",
31+
"signature": "WoJ1zh3sCOCepOJtZoKwAF7BXa4B9aiHouPNA26KFnnzNjTd0IEwaFN55ycpczPL8OFi4COrJHyabm8VtmhgBA",
3232
"signature_algorithm": "ed25519",
3333
"signer": "ontology-manifest-generator",
34-
"signing_public_key": "q0Cp7bmQMqJhbofGKKw8xXC6KbFzukBDDke0UYVi8y4",
34+
"signing_public_key": "QkigdPNpcUU7x7NcSkwCsUXIQpaFncMQbYSoiSgI2SY",
3535
"status": "source-validated",
36-
"validated_at": "2026-07-18T15:00:00Z"
36+
"validated_at": "2026-07-31T04:00:00Z"
3737
}

gitlab_api/ontology/mappings/source.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ connector: gitlab-api
33
ontology_source: gitlab
44
sync:
55
- preset: gitlab-projects
6-
server: gitlab-api
6+
server: gitlab-mcp
77
tool: gitlab_projects
88
action: get
99
records_path: data

0 commit comments

Comments
 (0)