Skip to content

agent-stack 0.27.0 — trust by machine, Fabric jobs, room in every description - #44

Merged
sshlg merged 5 commits into
mainfrom
w4/fabric-doctrine
Oct 12, 2026
Merged

sshlg merged 5 commits into
mainfrom
w4/fabric-doctrine

Conversation

@sshlg

@sshlg sshlg commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Integration wave 4 of the family's waves run (sshlg-skills docs/evidence/plans/2026-10-11-integration-waves.md, R23–R26).

Fix round (390a169, 86b7656). The first cut (4f88a0e) failed three blind readings (unit, seam, product). This revision rewrites the tier block against its sources and gates R25 and R26.

REQ Change Proof
R23 gateway.md trust tiers per fabric-agent-contract DL-25/DL-26 at 3cb03ab:
• a callee MUST NOT require a token, approval or grant record from a T0/T1 caller, even when it also serves T2
• a token such a caller presents is verified, refused when invalid, and used for attribution and narrowing
• the tier comes from the caller's origin, not its connection
• T1 is RM-21, still open
• five human gates and three money levels
• token-less T0 metering (Observatory slotsRequireGrant: when-token, keyserver off)
• DL-8 (fail closed) and DL-12 (descriptor token) scoped to T2 and the machine boundary
• pin 8e49fbd → 3cb03ab
sources: Fabric 19ad05ca (amendment 4), fabric-workspace 714808ac authority.md, project-observatory-dashboard METER.md at 5b24038, fabric-agent-adapter 0.20.0 building-fabric-services/references/delegation.md:47-55. test/audit_regressions/w4-fabric-doctrine.py passes 5/5 and fails 5/5 against the first cut
R24 mcp.md:
• the envelope names output and scope
• inputResponses (§C3.3)
• a caller without Tasks keeps receiving the job handle (replaces "works unchanged")
• the well-known degraded list from service.md:93-101 at bcada4a
• the per-reply degraded/human_steps envelope is named as an estate convention and deferred to backlog row B-156
w4-fabric-doctrine.py case 5
R25 agent-interop names fabric-agent-adapter:{creating-fabric-agents, adapting-projects-to-fabric, building-fabric-services} and observatory-log:handling-secrets, fully qualified check_interop_points_to_the_estate_skills in test/validate.py. A CI negative self-test removes one pointer on a copy, and the check was watched failing
R26 descriptions: evals 929, harness 936, interop 937, orchestrator 938. Ratchet 940 in test/validate.py; the house limit stays 970 CI negative self-test: 941 fails on the ratchet, 940 passes (watched locally). audit_skill.py --house: 0 GAP / 19 PASS for each skill

Description risks:

  • agent-evals names "observability" again.
  • agent-interop adds "delegation token", "on behalf of" and «делегирование».
  • All 46 ROUTES['agent-stack'] triggers from sshlg-skills origin/main:lib/triggers.js are still substrings of their skill's description.

CI: the first cut's validate run 38204211436 failed on the plant "a description must stay inside the working limit". It prepended a fixed 53 characters, which no longer reached 970 at 911 characters. The plant now sets an exact 971 and requires the working-limit message (86b7656).

Not in this PR: R28 (the AG-06a/b residue rows from the plan's packet W4-A) is not implemented here. It stays on the board.

Gate: npm test EXIT=0 (16 checks = 12 named + 4 per-skill).

🤖 Generated with Claude Code

Робот and others added 5 commits October 12, 2026 06:32
…ription

Integration wave 4 (sshlg-skills plan R23-R26): gateway.md opens delegation
with the operator's trust tiers (T0/T1 no token, T2 full on-behalf-of model;
money limits, human gates and no borrowed keys on every tier), pinned to Fabric
main 5bf15e5c (ADR-0144 amendment 4, 19ad05ca) and fabric-workspace 714808ac;
mcp.md names fabric-interop/0.1 jobs as the worked fallback for MCP Tasks
(fabric-agent-contract bcada4a); agent-interop points to the Fabric adapter
skills and observatory-log:handling-secrets; descriptions 935/936/938/911.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d per the contract, R25/R26 gated

Three blind readings failed the first cut (4f88a0e). This round:

- gateway.md: DL-26 replaces "optional, attribution only" and "a service
  taking calls across the boundary requires it" (per caller, not per
  service; a presented token verified, refused when invalid, used for
  attribution and narrowing); tier by origin (DL-25), T1 = RM-21 still
  open; five human gates and three money levels; token-less T0 metering
  (Observatory when-token, keyserver off, METER.md M0); DL-8 and DL-12
  scoped; pin 8e49fbd -> 3cb03ab (DL-25/DL-26); stale "read-only" meter
  scope and "device check" corrected at the new pin; two new traps.
- mcp.md: output and scope in the envelope, inputResponses (C3.3), the
  job handle for a caller without Tasks, the well-known degraded list
  (service.md at bcada4a); per-reply envelope deferred as B-156.
- test/validate.py: description ratchet 940 (house 970 kept);
  check_interop_points_to_the_estate_skills (R25). CI negative
  self-tests for both; watched failing locally (941 fails, 940 passes;
  a removed building-fabric-services pointer fails).
- test/audit_regressions/w4-fabric-doctrine.py: 5 cases, all fail on the
  first cut's gateway.md/mcp.md.
- agent-evals names observability again (929); agent-interop adds
  "delegation token", "on behalf of", «делегирование» (937); all 46 hub
  triggers still substrings.
- README, CHANGELOG and ledger rewritten for this round. R28 not included.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ding by 53

The fixed 53-character pad reached 970 only while agent-evals sat above 917;
at 911 (0.27.0's first cut) it planted nothing, the validator rightly
passed, and validate run 38204211436 reported the guard broken. The plant
now replaces the description with exactly 971 characters and requires the
working-limit message, so it fails for the right reason or says so.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ken is the host's, R28 named

Second blind reading: unit pass, seam pass, product pass with risks. Closes the cheap
risks without another round: approval/1 paragraph scoped to T2 (DL-26); T0 placement no
longer lists the descriptor token (DL-12); the undecided T1 scoping proposal is named;
mcp.md names degraded, human_steps and sources as the estate's per-reply convention (B-156
stays open); agent-interop triggers on "токен делегирования" (939 chars, ratchet 940);
AG-06a/b cite plan R28; B-157 for the one-way adapter back-links.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…losed in make-skill 0.31.0)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@sshlg
sshlg merged commit 96ed0f8 into main Oct 12, 2026
2 checks passed
@sshlg
sshlg deleted the w4/fabric-doctrine branch October 12, 2026 16:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant