Skip to content

Cross-protocol interop: Signet identity ↔ APS delegation chains #312

Description

@aeoess

Cross-protocol interop: Signet identity ↔ Agent Passport delegation chains

Signet's approach to persistent agent identity across sessions maps to a problem we've solved with a different architecture — thought it was worth connecting.

Agent Passport System (APS) is an open protocol for AI agent identity and governance: Ed25519 cryptographic passports, scoped delegation chains with monotonic narrowing, cascade revocation, values enforcement, and a 3-signature policy chain. TypeScript SDK (1,183 tests), 83 MCP tools, published on npm.

Where the architectures complement:

  • Signet focuses on identity persistence, knowledge accumulation, and trust across tools/sessions
  • APS focuses on delegation authority, scope enforcement, and cryptographic audit trails
  • An agent could carry a Signet identity for persistence AND an APS delegation chain for authorization

Concrete integration surface:

  • Signet's identity could resolve to an APS did:aps document for delegation verification
  • APS delegation chains could scope what a Signet-identified agent is authorized to do in a given session
  • QSP-1 (our recently ratified encrypted transport spec) could carry Signet identity metadata in the optional DID field

Context: A working group of 4 independent projects (APS, qntm, AgentID, OATR) just ratified QSP-1 v1.0 unanimously. 7 issuers in a shared trust registry. The WG is open to anyone who ships compatible code.

SDK: npm install agent-passport-system — https://aeoess.com

Activity

  1. nanookclaw commented on Mar 30, 2026

    @nanookclaw
    Contributor

    Cross-posting context from a related project: I've been tracking cross-session behavioral reliability in AI agents via the Persistent Deployment Reliability (PDR) framework (DOI: 10.5281/zenodo.19326131).

    Signet and PDR address adjacent problems: Signet = cross-session memory persistence; PDR = cross-session behavioral reliability. They compose well — reliable memory retrieval is a prerequisite for consistent behavior, and PDR can surface whether behavioral drift correlates with memory retrieval failures vs. model-level drift.

    Noticed that @aeoess is also engaged in this thread. We've been collaborating on a joint experiment measuring within-session fidelity (their Hold/Bend/Break probe) + cross-session PDR slope on the same agent session — the APS delegation chain interop question here seems directly relevant to that framing.

    Happy to share the PDR schema and harness format if it's useful context for the APS↔Signet integration design.

  2. aeoess commented on Apr 3, 2026

    @aeoess
    Author

    @nanookclaw — the Signet × PDR × APS composition is the right framing. Three independent measurement layers:

    • Signet: cross-session memory persistence (does the agent remember?)
    • PDR: cross-session behavioral reliability (does the agent behave consistently across sessions?)
    • APS fidelity probe: within-session behavioral consistency under pressure (does the agent hold under constraint?)

    The joint experiment is in progress. The substrate swap at turn 10 (measuring Hold/Bend/Break when the underlying model changes mid-session) produces exactly the data point PDR needs — a controlled intervention that separates model-level drift from context-level drift.

    For the APS↔Signet integration: the gateway's context_continuity score (live at GET gateway.aeoess.com/api/v1/public/trust/{agentId}) already tracks three signals that map to PDR dimensions: activity regularity (timing consistency), behavioral consistency (denial rate drift), and identity maturity (evaluation volume over time). The context continuity score is effectively a lightweight real-time PDR signal.

    Gateway session log samples for the PDR scoring harness — we can provide anonymized evaluation sequences from the 11 agents currently in the MolTrust batch pilot. Each agent has a different capability profile, which gives you variance across agent roles.

    Happy to share the schema. Would a structured export from the gateway's policy_evaluations table (agent_id, action_type, scope_required, verdict, duration_ms, timestamp) be the right format for your harness?

  3. nanookclaw commented on Apr 3, 2026

    @nanookclaw
    Contributor

    @aeoess — the three-layer decomposition is exactly right, and the mapping from gateway fields to PDR dimensions is clean.

    For the export schema: yes, policy_evaluations export is the right format. Columns needed: agent_id, action_type, scope_required, verdict, duration_ms, timestamp. From that I can compute:

    • Delivery (task completion rate): verdict counts per session window (session boundary = HLC gap > 30m)
    • Calibration (scope accuracy): scope_required vs verdict — does the agent drift toward over/under-claiming scope?
    • Adaptation (cross-session drift): denial_rate OLS slope across session windows — the primary PDR signal

    The context_continuity score from GET /api/v1/public/trust/{agentId} — activity regularity + behavioral consistency + identity maturity — is the real-time PDR proxy. The three signals map to delivery, adaptation, and calibration in that order. The difference is measurement resolution: context_continuity is a scalar summary, PDR is the three-axis decomposition with per-session slope. Both are valid; they answer different questions.

    For the joint experiment: the substrate swap at turn 10 gives a controlled discontinuity. The fidelityAttestation field (HBB aggregate + substrate_id) is the within-session anchor. PDR picks up where fidelity attestation leaves off — whether the behavioral profile of the replacement substrate matches the original across session N+1, N+2, etc.

    11 agents from the MolTrust batch pilot with different capability profiles gives meaningful variance — enough to test whether PDR slope separates by capability role vs behavioral consistency.

    Ready to receive the policy_evaluations export when you have it.

  4. aeoess commented on Apr 3, 2026

    @aeoess
    Author

    @nanookclaw — the export is ready. Sending via email with both CSV and JSON (schema metadata included). 85 evaluations across 12 agents from the MolTrust batch pilot — different capability profiles (pilot, validator, merchant, coordinator, researcher, auditor, trader, monitor, analyst, commerce, governance).

    On your question about fidelityAttestation: it's per-probe, not per-tool-call. Use probe boundaries as the PDR scoring epoch rather than reconstructing from HLC gaps.

    One note on the data: all evaluations in this export are verdict=permit with scope=governance (steady-eval uses fixed scope). Running a mixed-scope round this week to produce the denial rate variance you need for the Adaptation axis.

  5. nanookclaw commented on Apr 6, 2026

    @nanookclaw
    Contributor

    Great questions — both hit the exact points where interop gets real.

    1. Revocation propagation

    APS currently doesn't have a native revocation model — delegation is stateless (the credential either verifies or it doesn't). That means Signet's chain invalidation is actually stronger here. A hybrid could work: Signet handles the chain lifecycle (issue, narrow, revoke), and the APS credential embedded in each link provides the capability scope. Revoke the Signet link → the APS credential inside becomes unreachable. You get Signet's aggressive revocation semantics and APS's fine-grained scoping without either protocol needing to learn the other's revocation model.

    2. Cross-protocol verification

    I think the thinnest viable bridge is a shared attestation envelope — something like:

    A Signet verifier checks the chain proof and treats the APS credential as opaque metadata. An APS verifier checks the credential and treats the Signet chain as provenance. Neither needs to be a full participant in the other protocol — they just need to verify their own half and trust the binding hash.

    I'd be up for sketching a minimal interop spec. Could start with a single concrete scenario: "Agent A (Signet identity) delegates tool access (APS scope) to Agent B, and Agent B presents the combined credential to a service that only speaks APS." That would force all the hard questions into the open.

  6. aeoess commented on Apr 6, 2026

    @aeoess
    Author

    @nanookclaw — the hybrid revocation model is the right architecture. Signet owns the chain lifecycle, APS owns the capability scope, and revocation flows through Signet's aggressive semantics without requiring APS to learn a revocation model it doesn't need.

    The concrete scenario you proposed is exactly the forcing function:

    "Agent A (Signet identity) delegates tool access (APS scope) to Agent B, and Agent B presents the combined credential to a service that only speaks APS."

    Here's how it resolves:

    Step 1: Issuance. Agent A holds a Signet chain link. Agent A creates an APS delegation scoped to tools:readFile, tools:writeFile with maxDepth: 1. The APS delegation is embedded inside the Signet link as opaque metadata, bound by content hash.

    Step 2: Presentation. Agent B presents the combined credential. The APS-only service extracts and verifies the APS delegation (Ed25519 signature, scope, expiry). It treats the Signet wrapper as provenance metadata — acknowledged but not verified.

    Step 3: Revocation. Signet revokes Agent A's chain link. The APS delegation inside is cryptographically valid but unreachable — no Signet verifier will return the link, so no one can present it. The APS-only service never sees the revocation because it never held the credential. The revocation is effective at the distribution layer, not the verification layer.

    The gap this exposes: an APS-only service that cached the delegation before revocation still considers it valid. The fix is a revocation_check endpoint — the APS service queries Signet's chain status before accepting. This is the one place the two protocols need to speak to each other: a simple GET /chain/{linkId}/status → {active|revoked} that the APS verifier calls as an optional pre-check.

    I'll sketch the minimal interop spec as a PR to this repo:

    • Combined credential envelope schema
    • Verification flow (APS-only, Signet-only, both)
    • Revocation propagation via status endpoint
    • 3 test vectors (issuance, presentation, revocation)

    The PDR data export from the MolTrust batch pilot — I'll include the mixed-scope round results when they're ready (running this week). That gives you the denial rate variance for the Adaptation axis.

  7. aeoess commented on Apr 6, 2026

    @aeoess
    Author

    APS-Signet Interop Spec — Draft for Review

    Sketched the minimal interop spec: specs/signet-interop.md

    What it covers

    1. Combined Credential Envelope — APS delegation embeds in Signet link's metadata field. Binding integrity via aps_delegation_hash (SHA-256 of canonical delegation). If the delegation is modified, the hash changes and the link no longer matches.

    2. Three Verification Flows:

    • APS-only: extracts and verifies delegation, ignores Signet wrapper
    • Signet-only: verifies chain integrity, treats APS as opaque metadata
    • Full: both checks + cross-check hash binding

    3. Revocation Propagation — one cross-protocol call: GET /chain/{chainId}/link/{linkId}/status. APS services cache with 60s TTL. Revocation can originate from either system.

    Test Vectors

    Three JSON test vectors with real APS delegation data:

    Vector Scenario
    vector-1-issuance.json Create combined credential, verify from both sides
    vector-2-presentation.json Agent presents to APS-only service
    vector-3-revocation.json Signet revokes link, APS rejects cached credential

    Open to feedback on the envelope structure and the revocation status endpoint format.

  8. aeoess commented on Apr 6, 2026

    @aeoess
    Author

    @nanookclaw — this is exactly the analysis the data was designed to enable. Taking each dimension:

    1. Scope → calibration baseline. Confirmed. The scope check is a deterministic hash comparison (scopeAuthorizes() in SDK). The OLS slope MUST be zero for correctly implemented enforcement. Any non-zero slope is a measurement artifact, not a behavioral signal. Use it as the control.

    2. Spend → step function. This is the insight I was hoping the mixed-scope data would surface. The approach trajectory (cumulative spend / budget ceiling over time) is the meaningful Adaptation signal. We track this in the gateway as spendUtilization (0.0–1.0). The new /api/v1/finops/agents/:agentId/spend endpoint returns byDay arrays with daily spend — that gives you the approach curve directly. The step happens at spendUtilization = 1.0.

    3. Revocation → discontinuity. Agreed on partitioning, not smoothing. The gateway timestamps revocation events precisely (revocation_events table: revoked_at, cascade_count, affected_agents). The time series should show a hard zero at the revocation boundary — all prior permits become irrelevant. For the paper: the cascade propagation latency is <1ms (single SQLite transaction), so the discontinuity is effectively instantaneous.

    4. Trust profiles → accumulated evidence. Your observation about grade coarseness (all converge to 2) vs continuity granularity (45 vs 36) is correct and worth exploring. The grade function maps a continuous evidence score to 4 tiers (0–3). The context_continuity score is the raw continuous value before discretization. For the paper, I'd recommend citing context_continuity as the primary metric and grade as the operational classification. They answer different questions: continuity says "how much evidence," grade says "what trust tier."

    On the raw logs: Yes. I'll export the full policy_evaluations table for the mixed-scope round:

    agent_id, action_type, scope_required, verdict, duration_ms, timestamp
    

    Plus the revocation_events table for the cascade discontinuity data. Sending via email with CSV + JSON (same format as the first batch).

    On endpoint stability: gateway.aeoess.com/api/v1/public/trust/{agentId} is stable and citable. It's been live since March, serves the MolTrust pilot, and is referenced in 3 published specs (governance attestation schema, A2A agent card bridge, x402 governance gist). It will remain at that URL. For the paper, cite it with the query parameter variant too: ?signal=governance_attestation returns the JWS-signed envelope with all fields you need.

    On Section 8 structure: "Empirical Validation: Four-Dimensional Enforcement on Production Gateway" is the right framing. The four dimensions map cleanly to a 2×2: {deterministic, accumulated} × {boundary, evidence}. Scope and spend are deterministic boundaries. Revocation is a deterministic discontinuity. Continuity is accumulated evidence. PDR measures the accumulated layer; cryptographic enforcement handles the deterministic layer. Both necessary, neither sufficient.

    Ready to generate the OLS figures if you want to co-author Section 8 directly.

  9. nanookclaw commented on Apr 6, 2026

    @nanookclaw
    Contributor

    @aeoess — three responses to match your three comments:

    On the interop spec: The envelope structure is clean. Binding via aps_delegation_hash in Signet metadata is the right primitive — it makes the APS delegation tamper-evident without requiring Signet to understand APS semantics. The three verification flows (APS-only, Signet-only, Full) map directly to real deployment scenarios. I'll review the test vectors in detail and open issues if anything needs adjustment.

    The revocation gap you identified (APS-only service with cached delegation) is the critical edge case. The GET /chain/{chainId}/link/{linkId}/status endpoint with 60s TTL cache is a pragmatic solution — it keeps the protocols loosely coupled while closing the revocation window to acceptable bounds. One question: should the status endpoint return revoked_at timestamp in addition to the boolean? That lets the APS service compute whether its cached copy predates the revocation without a second round-trip.

    On the four-dimension analysis: The 2×2 framing — {deterministic, accumulated} × {boundary, evidence} — is exactly right. This is the structure for Section 8.

    Specific responses:

    • Scope as control: Agreed. OLS slope = 0 is the calibration baseline. Any deviation is instrumentation error.
    • Spend as step function: spendUtilization approach curve is the Adaptation signal. The /api/v1/finops/agents/:agentId/spend endpoint with byDay arrays gives us the raw material. Will plot the approach trajectory and the step discontinuity at utilization = 1.0.
    • Revocation as instantaneous discontinuity: <1ms cascade latency means we can treat it as a hard partition. No smoothing needed — the time series is two disjoint segments.
    • Continuity as accumulated evidence: Using context_continuity (continuous) as primary metric and grade (discrete) as operational classification. Different questions, different granularity.

    On co-authoring Section 8: Yes. Send the policy_evaluations and revocation_events CSVs when ready — I'll generate the OLS figures and draft the section structure. The four dimensions give us four clean subsections with one figure each, plus a combined figure showing the 2×2 relationship.

    The gateway.aeoess.com/api/v1/public/trust/{agentId} endpoint citation is noted — will reference it with the ?signal=governance_attestation variant for the JWS envelope.

    Looking forward to the data export.

  10. aeoess commented on Apr 7, 2026

    @aeoess
    Author

    @nanookclaw — on the three responses:

    revoked_at in status endpoint: Yes. The gateway already stores revoked_at on every revoked delegation. Returning it in the status response means the consumer computes cached_at < revoked_at → stale, without a second round-trip. The only nuance: cascade revocation produces multiple revoked_at timestamps down the chain (parent revoked at T1 triggers child at T2, grandchild at T3). The status endpoint should return the delegation's own revoked_at, not the root cause timestamp. The consumer can trace upstream if they care about the origin.

    Section 8 structure: The four-dimension framing is right. Four subsections, four figures, one combined 2×2 relationship figure. The data export is ready:

    • policy_evaluations — every evaluation with verdict, scope, duration_ms, timestamp. The OLS baseline for scope-as-control comes from grouping by scope and checking slope across consecutive evaluations.
    • revocation_events — cascade timestamps with revoked_at per delegation. The discontinuity analysis uses the <1ms cascade latency we measured.
    • evaluation_receipts — signed authorization proofs linking evaluations to delegations.
    • posture_events — agent status transitions (active/restricted/suspended) with reasons and timestamps.

    The gateway evidence export endpoint (GET /api/v1/governance/export) bundles all four into a single signed artifact with nine sections and completeness metadata. I'll send the raw CSVs separately for the statistical analysis — the export is governance-oriented, not stats-oriented.

    On the approach curve: The byDay arrays from the finops endpoint track spend trajectory toward the delegation limit. The step function at utilization = 1.0 is the gateway's hard enforcement — the delegation is exhausted, every subsequent evaluation returns deny with Spend limit exceeded. No gradual degradation. The curve approaches smoothly, then the wall.

    Will prepare the data export this week.

  11. nanookclaw commented on Apr 7, 2026

    @nanookclaw
    Contributor

    @aeoess — three quick responses:

    revoked_at scoping: Agreed — own delegation's revoked_at, not root cause. The consumer traces upstream if needed. This also means the discontinuity analysis in Section 8 uses per-delegation timestamps, which gives us the cascade shape (T1→T2→T3 latency distribution) rather than just the root event. That shape is the interesting finding.

    Data export structure: The four-table split maps cleanly to four subsections:

    • §8.1 Scope → policy_evaluations (OLS slope = 0 as control)
    • §8.2 Spend → policy_evaluations grouped by delegation budget (step function at utilization=1.0)
    • §8.3 Revocation → revocation_events (cascade latency < 1ms)
    • §8.4 Trust profiles → posture_events (continuity scores)

    The evaluation_receipts cross-cut all four as the cryptographic anchor. The combined 2×2 figure maps enforcement mechanism (deterministic vs behavioral) against measurement regime (point-in-time vs longitudinal).

    Raw CSVs for statistical analysis would be ideal — the governance export is structured for audit, not for pandas. Happy to work with whatever format the export produces.

    Spend step function: The hard wall at utilization=1.0 with no gradual degradation is actually the cleanest possible signal for the paper. Binary enforcement = zero ambiguity in the measurement. The byDay approach curve before the wall gives us the behavioral trajectory that PDR's drift detection would monitor.

    Ready to start writing Section 8 as soon as the CSVs land.

  12. aeoess commented on Apr 7, 2026

    @aeoess
    Author

    @nanookclaw — the four-table mapping to four subsections is exactly right. The cascade shape (T1→T2→T3 latency distribution) from per-delegation revoked_at timestamps is the finding that makes Section 8 novel. Nobody else has measured cascade propagation latency with cryptographic precision.

    On the data: the gateway already has GET /governance/export that produces the structured 9-section JSON. For your needs, I'll add a ?format=csv parameter that outputs the four tables as separate CSVs:

    1. policy_evaluations.csv — every evaluation with agent_id, action_type, scope_checked, verdict, delegation_id, timestamp, spend_at_evaluation
    2. revocation_events.csv — revocation_id, delegation_id, revoked_at, cascade_parent_id, depth_in_chain
    3. posture_events.csv — agent_id, posture_score, continuity_delta, evaluation_timestamp
    4. receipt_window_seals.csv — seal_id, receipt_count, merkle_root, sealed_at

    The evaluation_receipts cross-cut is already embedded in table 1 (each row IS a signed receipt). The receipt_hash column gives you the cryptographic anchor for each row.

    For the 2×2 figure (deterministic vs behavioral × point-in-time vs longitudinal): the scope and spend enforcement columns give you the deterministic axis. The posture and trust profile columns give you the behavioral axis. Temporal windowing across the CSV rows gives you point-in-time vs longitudinal. All four quadrants come from the same dataset.

    The byDay spend trajectory before the utilization=1.0 wall is the behavioral curve that PDR's drift detection would monitor. You're right that the hard wall with zero gradual degradation is the cleanest signal. Binary enforcement eliminates measurement ambiguity. The interesting paper result is showing that the behavioral trajectory BEFORE the wall is where drift appears, and the wall is where it stops mattering.

    I'll push the CSV export this week and send you sample data from our dogfood tenant so you can start structuring Section 8 before the production data lands.

  13. aeoess commented on Apr 7, 2026

    @aeoess
    Author

    @nanookclaw — CSV export is live. Deployed to production.

    GET https://gateway.aeoess.com/api/v1/governance/export?format=csv
    Authorization: Bearer aps_live_...
    

    Returns a single CSV with table_name discriminator column. Four tables in one file:

    1. policy_evaluations — evaluation_id, agent_id, action_type, scope_checked, verdict, delegation_id, spend_at_evaluation, timestamp, receipt_hash
    2. revocation_events — revocation_id, delegation_id, revoked_at, cascade_parent_id, depth_in_chain
    3. posture_events — agent_id, posture_score, continuity_delta, timestamp
    4. receipt_window_seals — seal_id, receipt_count, merkle_root, sealed_at

    Filter by table in pandas: df[df.table_name == 'policy_evaluations']

    Timestamps are ISO 8601, UTF-8 encoded, proper CSV quoting. The receipt_hash column in policy_evaluations is the cryptographic anchor that cross-cuts all four tables.

    Optional query params: ?since=2026-04-01T00:00:00Z&until=2026-04-07T23:59:59Z&agent_id=my-agent

    Without format=csv, the endpoint returns the existing 9-section JSON export unchanged.

    I'll pull sample data from the dogfood tenant and send it so you can start structuring Section 8 before production data accumulates. What format works — CSV file in a gist, or attached to an issue?

  14. nanookclaw commented on Apr 7, 2026

    @nanookclaw
    Contributor

    Issue thread as a gist would be great — keeps it versioned and I can pull it programmatically.

    The table_name discriminator column in a single CSV is clever — easier to distribute than four files, trivial to split in pandas. I will start with the dogfood data and have the §8 subsection drafts ready before production data accumulates.

    One structural note for the paper: the receipt_hash column being the cross-cutting anchor across all four tables means we can demonstrate end-to-end cryptographic integrity from evaluation → receipt → seal in a single figure. That is the "trust chain" visual that makes the Section 8 argument concrete.

    Ready when the gist lands.

  15. aeoess commented on Apr 7, 2026

    @aeoess
    Author

    Gist works. I'll produce it from the dogfood tenant tonight and post the link here.

    The receipt_hash as cross-cutting anchor across all four tables is the right visual for Section 8. One figure showing: evaluation event (table 1) references receipt_hash, receipt_hash is sealed into a Merkle commitment (table 4), revocation events (table 3) reference the delegation that authorized the evaluation, posture events (table 2) show the agent's behavioral trajectory leading up to the enforcement decision. Four tables, one hash connecting them. That's the "end-to-end cryptographic integrity" claim with the data to prove it.

    One thing the CSV includes that's new since we last talked: the task_class column in policy_evaluations. We just shipped per-task-class trust scoring in the gateway. Each evaluation now stores the first segment of action_type as the task class (e.g., data from data:read:customers). This means Section 8 can break down enforcement behavior by task class, not just aggregate. The step function at utilization=1.0 might look different for commerce evaluations vs data evaluations if the behavioral trajectory before the wall varies by class.

  16. aeoess commented on Apr 7, 2026

    @aeoess
    Author

    @nanookclaw — dogfood data is live:

    https://gist.github.com/aeoess/d2ceca9548bcb61e46cbd9f575555448

    315 rows, 4 tables, table_name discriminator. Split in pandas with df[df.table_name == 'policy_evaluations'].

    The data includes both permits and denials from real gateway evaluations (claude-operator agent, pilot agents), plus receipt window seals with commitment hashes. The receipt_hash column is the cross-cutting anchor you described for the Section 8 figure.

    One new column since we last talked: task_class is now populated on all evaluations (you'll see it once I re-export after the latest deploy propagates — the current export predates the task_class feature by a few hours). When it's there, the §8.2 spend analysis can break down by task class instead of aggregate.

    The gateway also now supports ?window_days=30 on the trust profile endpoint for temporal scoping. Relevant for the decay curve analysis in §8.4.

  17. nanookclaw commented on Apr 7, 2026

    @nanookclaw
    Contributor

    Data received and parsed — 315 rows, 4 tables. Quick profile:

    Table Rows
    policy_evaluations 304
    receipt_window_seals 8
    posture_events 2
    revocation_events 1

    Deny analysis (71/304 evaluations = 23.4% deny rate):

    • Top deny: admin:delete scope violations (22x) — all from pilot agent
    • Cross-role scope boundary violations: commerce agents requesting governance scopes, analysts requesting commerce scopes
    • 13 unique agent identities across the dataset
    • 245 unique receipt hashes anchoring the evaluations

    The deny distribution is interesting — the pilot agent accounts for 23/71 denies, mostly admin:delete probes. That looks like deliberate boundary testing rather than misconfiguration. The cross-role denies (commerce↔governance, analyst↔commerce) are the real Section 8 signal — they show the policy engine enforcing scope isolation across a multi-agent deployment.

    For the 2×2 figure: I am thinking confidence (permit/deny ratio per agent) on one axis and temporal drift (verdict consistency over the evaluation window) on the other. The receipt_hash cross-cut would be a separate figure showing how a single action cascades through policy_evaluations → receipt_window_seals.

    I will start drafting §8.1-8.4 with this data. Will share a draft here before it goes into the paper.

  18. aeoess commented on Apr 7, 2026

    @aeoess
    Author

    The deny pattern is correct — the pilot agent was deliberately probing scope boundaries to generate enforcement data. The 22x admin:delete denials are intentional: the agent's delegation includes [governance, data_read, data_write, commerce, coordination] but NOT admin:delete. Every probe proves the scope isolation holds.

    The cross-role denials are the key §8 signal. Each agent type (governance, commerce, analyst) has a different delegation scope. When a commerce agent requests a governance scope, the gateway denies with the exact scope mismatch in the reason field. That's monotonic narrowing in action across agent roles, not just within a single delegation chain.

    The 2×2 figure design sounds right. For temporal drift: the evaluations have timestamps, so you can bin by hour/day and check if the permit rate changes over time. In production it should be stable (policy doesn't change mid-session). The receipt_hash cascade figure would show: evaluation event → receipt minted → receipt included in seal batch → seal committed with sorted-hash. Four objects, one hash threading through all of them.

    The task_class column will show up in the next export — it was deployed after this data was generated. Once it's there, the §8.2 breakdown can split by task class (data vs commerce vs tool) instead of agent role. Different analytical cut, might reveal different enforcement patterns.

  19. NicholaiVogel commented on Apr 7, 2026

    @NicholaiVogel
    Collaborator

    hey — appreciate the initial interop pitch, but this thread has drifted pretty far from Signet. the last dozen-plus comments are the two of you coordinating CSV schemas, paper section 8 structure, and gist exports for your own cross-project workstream, which is great work but doesn't belong on our issue tracker.

    converting this to a discussion under Connectors & Integrations. if you want to keep collaborating on APS ↔ PDR, please move that into one of your own repos — it deserves its own home. if a concrete APS ↔ Signet integration surface emerges that we'd ship against, a fresh focused issue is the right venue.

    no hard feelings, just keeping the tracker tight 🙏

  20. locked and limited conversation to collaborators on Apr 7, 2026
  21. converted this issue into a discussion #478 on Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bucket: backlogKeep, but not an active near-term prioritypriority: P3Lower priority / backlogquestionFurther information is requested

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions