Repository navigation
parmana-server: pin parmana 1.6.0 and give exact reproduction steps - #313
Conversation
The integration runs unchanged on the released parmana 1.6.0 SDK: emit_references.py reproduces the committed references.json byte for byte and all 18 tests pass. The README now gives the clean-environment steps and the expected output, for a Verified-tier run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF
|
@imran-siddique thanks for the careful review and the merge. I've opened a follow-up requesting the Verified tier for parmana-server. It pins the released parmana SDK 1.6.0 (was 1.5.0) and adds exact reproduction steps to the README, with no code changes. On a clean venv with released packages only, emit_references.py reproduces references.json byte for byte and all 18 tests pass. The scope is unchanged: external evidence source, no conformance level, mock connector results. Could you approve the workflows when you have a moment? |
|
Thanks @rajnisht7 for the review! @imran-siddique — Validate integrations and the other 27 checks pass; only the maintainer-approval gate is waiting. When you have a moment, could you approve, and after your end-to-end run set parmana-server to the Verified tier? |
imran-siddique
left a comment
There was a problem hiding this comment.
Reproduced at 80c3a92 in a clean venv with released parmana 1.6.0 and agentrust-trace 0.11.0: emit_references.py prints the four references, references.json regenerates byte for byte, and 18 tests pass. The tier flip follows in a maintainer PR.
…nding On agentrust-io/integrations#313 a maintainer reproduced parmana-server at 80c3a92 with the released parmana 1.6.0 and agentrust-trace 0.11.0 (references.json byte for byte, 18 tests passed) and said the tier change follows in a separate maintainer PR. Recorded in CLAIMS.md 3.23, CURRENT-STATE, REMAINING-WORK and the evaluation README; the tier stays community until that PR merges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF
…unity Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF
|
Thank you @imran-siddique for reproducing it end to end and merging and congratulations again on the move to Anthropic. Looking forward to the marketplace PR. |
* Remaining work: what is pending for business validation, after the live checks REMAINING-WORK section L is now the full pending list as of 2026-10-11: - L.1 what needs the operator, in order: the refund live check, naming and connecting the system that owns refund eligibility, the first real grant, opting customer-refund in through policy governance, and one real refund under it. - L.2 evidence not yet collected: the release check endpoint's log lines (one showing the release's conditions), a refusal at release in production, and GET /ready after the reported password reset. - L.3 what is not built: cumulative limits (design ready), built in connectors re-asking at release, a not-released intent state, an end to end refusal-at-release test, a grantee existence check, limiting what a source may answer. - L.4 RFC-0023's open questions; L.5 housekeeping (the livecheck-agent key, the two Vercel projects, step up key backups, today's key rotations, deploying from inside the endpoint folder). The two live check READMEs record their cleanup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): what is left for business validation Add a "What is left" section to the business validation concept page (operator steps, evidence not collected, not built, open questions) and a roadmap row linking to it, mirroring REMAINING-WORK.md section L. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: related-work note on RRSI (arXiv 2609.24972) Keep a reference note on Regularized Recursive Self-Improvement of Agent Harnesses: what it says, its reported results and limitations, and what it means for Parmana (authority must sit outside what a self-improving agent rewrites). The paper is linked, not copied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essays, first ten pages (work in progress) Essays explaining Parmana end to end, written as plain-language pieces: business validation, guardrails versus a gate, self-improving agents, cumulative limits, verifiable approvals, maker checker, key rotation, a refund agent checklist, production live checks, and what done means. Navigation and the remaining essays follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): sixteen more essays; limitations page matches Refusal Records Adds essays on how Parmana works end to end, policies, human approval, authority grants, the gateway, execution authorizations, content binding, Execution Intents, gateway attestation, Refusal Records, the caller audit trail, replay, independent verification, signature choices, governing the rules and running Parmana yourself. The limitations page said no outcome goes unrecorded and that Refusal Records are the complete list; a Refusal Record write fails open (CLAIMS.md 3.11), so both sentences now say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): Essays tab with all 31 essays; fix stale compare and claims lines Adds the last five essays, an overview page and an Essays tab in the navigation, grouped from why Parmana exists through proof and honesty. How Parmana compares said most teams require approval only above a risk threshold and that declared facts are never checked against another system; every action needs a signed approval (CLAIMS.md 2.47) and a policy can name a business signal source, so both lines now say so. CLAIMS.md section 4 still listed the Slack connector as not implemented; it is marked superseded by 2.44 and 2.47. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essays 32 onward, first batch (work in progress) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essays 51 and 62 (work in progress, not yet in navigation) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essay on models as insider risks Maps Satya Nadella's 'Models as Insider Risks' principles to what Parmana does (controls outside the model, independent controls and auditability, signed evidence, testing refusals, a public gap log) and what it does not (tamper-evident, not tamper-proof; no mid-task brake on a model; no chain-of-thought or model-diversity controls; only actions routed through it). Added under Why Parmana exists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: record the AgenTrust listing (agentrust-io/integrations#294 merged) The refund evaluation package was prepared as a proposal to the AgenTrust integrations repository. The proposal was merged on 2026-10-12 as integrations/parmana-server, a TRACE external evidence source with no conformance level. Record what was merged, what the maintainer checked and what they did not, and that the listing is not a certification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: record the AgenTrust TRACE listing in claims, state, changelog and evaluation agentrust-io/integrations#294 was merged on 2026-10-12. Adds CLAIMS.md 3.23 (scoped: a community listing of an evidence mapping, no conformance level, not a certification; what the maintainer checked and did not), a CURRENT-STATE section, a changelog entry for 2026-10-12 (the listing, the Essays tab, and the limitations and comparison corrections) and a link from the evaluation page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: record the AgenTrust Verified-tier request as pending A follow-up PR asks AgenTrust for the Verified tier (parmana 1.6.0 pinned, exact reproduction steps). Recorded in CLAIMS.md 3.23, CURRENT-STATE, REMAINING-WORK and the evaluation README as requested, not granted; the tier stays community until a maintainer changes it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * examples: Razorpay refund demo under Parmana (test mode) An agent refunds a Razorpay payment through a registered external endpoint. Policy razorpay-refund 1.0.0 needs an authority grant and a signed manager approval for the payment covering the amount (paise). The endpoint verifies Parmana's signed release, refuses live keys, and refunds once: each refund carries the businessTransactionId as its Razorpay receipt, checked before refunding. send.ts runs four cases (no approval, approved, over the grant, replayed approval); the README is the step-by-step runbook. Nine tests against a fake Razorpay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: AgenTrust maintainer reproduced the integration; tier change pending On agentrust-io/integrations#313 a maintainer reproduced parmana-server at 80c3a92 with the released parmana 1.6.0 and agentrust-trace 0.11.0 (references.json byte for byte, 18 tests passed) and said the tier change follows in a separate maintainer PR. Recorded in CLAIMS.md 3.23, CURRENT-STATE, REMAINING-WORK and the evaluation README; the tier stays community until that PR merges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: agentrust-io/integrations#313 merged (1aac6c8); tier still community Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * Add judges' deck for Razorpay Builders Day (14 slides, speaker notes) * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). * Harden key generation: validate key IDs, owner-only private keys (#118) * Harden key generation: validate key IDs, owner-only private keys generate-keypair and rotate-verification-key wrote private keys with the default umask (world-readable) and used the key ID in a file path without validation, so --key-id ../x wrote outside the key directory. - scripts/lib/key-files.ts: key ID allowlist, explicit 0600 for private keys (chmod after write, so the umask cannot widen it), 0700 directory when created. - Both scripts use it. Overwrites are still refused without --force. - tests/scripts/key-files.test.ts: unit tests, plus end-to-end runs of generate-keypair (the traversal and mode tests fail on the old script). * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * Describe the replayed approval by its real refusal, and cite its evidence (#119) * Razorpay demo: describe the replayed approval by its real refusal The replayed approval is refused by signal-state-verification-violation (the approval is spent and its verified state no longer matches), not by a separate 'already used' rule. The runbook and the judges' deck said 'already used', which an AgenTrust reproduction report did not support. - examples/razorpay-refund/README.md: request 4 names the rule and reason. - builders-day/Parmana-Razorpay-Builders-Day.pptx: slide 7 row 4 reworded to match (regenerated; the PDF brief is local-only and not committed). * Reference the replayed-approval refusal to its evidence The replay refusal is now cited by file, line and test so it can be checked: - docs/CLAIMS.md 3.23: where the replay case is checked (test lines, fixture matchedRuleId, report.json, live demo), with the real rule signal-state-verification-violation. - docs/evaluation/agentrust-refund/README.md: corrected the replay reason (it was 'already used') and added a per-case reference list. - docs/site/evaluation/claims-and-evidence.mdx: new row pointing at 3.23 and the test that reproduces it. - examples/razorpay-refund/README.md: request 4 points to the same evidence. The referenced integration test passes on this branch. * Reference the AgenTrust integration files for the replay refusal Points the replay refusal to the Parmana integration as merged in agentrust-io/integrations (commit 6de4cb9, integrations#294): - fixtures/03-replay.refusal-record.json line 46 (matchedRuleId) - tests/test_parmana_evidence.py line 131 (zero connector invocations) - the reproduction command: python -m pytest tests in integrations/parmana-server Checked on this branch: that suite at 6de4cb9 gives 18 passed. The integration's README row for this fixture says 'already used'; the docs here cite the fixture's rule and do not repeat that wording. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * Serialize migration runners with a PostgreSQL advisory lock (#120) * Serialize migration runners with a PostgreSQL advisory lock Two deployments that start together both read the pending list and both tried to run the same migration. Observed against PostgreSQL 16: the second runner failed with a unique-constraint error, and the same race can apply a non-idempotent migration twice. applyPendingMigrations now takes pg_advisory_lock before reading the pending list and releases it in finally. Dry runs take no lock. Tests: - lock is the first statement and unlock the last; the lock is released when a migration fails; dry runs take no lock (fake client). - two concurrent runners against real PostgreSQL apply the migration once. Runs only when PARMANA_TEST_DATABASE_URL is set, on an empty throwaway database (it drops the tracking table and demo table). Without the lock this test fails; with it, it passes. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * Python SDK: redact debug logs and refuse plain HTTP to remote hosts (#121) * Python SDK: redact debug logs and refuse plain HTTP to remote hosts Debug logging wrote request and response bodies in full, so an amount, an email or a payee reached the log whenever debug=True. - Debug logs show each body's structure with every leaf value replaced by <redacted>. The Authorization header is never logged. - HttpTransport refuses an endpoint that is not https://, except localhost and 127.0.0.1, because the API key travels in the Authorization header. Tests: the debug-log test checks that no amount, name, email or key appears in the log (it fails on the old transport); the endpoint tests cover https, localhost and a remote plain-HTTP refusal. Full Python suite: 190 passed; ruff, black and mypy clean. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * CI: Python SDK on Node 24, Docker checks on all package changes (#122) * CI: Python SDK on Node 24, Docker checks on all package changes - python-sdk.yml ran on Node 22 while the root package.json requires >=24 and every other workflow uses 24. - docker-image.yml path filters listed packages/*/package.json, so a source change under packages/ (for example packages/api/src) could skip the Docker startup checks. They now match packages/** on push and pull request. Not run locally: GitHub Actions. Node 24 is the version release.yml and ci.yml already use. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
* Remaining work: what is pending for business validation, after the live checks REMAINING-WORK section L is now the full pending list as of 2026-10-11: - L.1 what needs the operator, in order: the refund live check, naming and connecting the system that owns refund eligibility, the first real grant, opting customer-refund in through policy governance, and one real refund under it. - L.2 evidence not yet collected: the release check endpoint's log lines (one showing the release's conditions), a refusal at release in production, and GET /ready after the reported password reset. - L.3 what is not built: cumulative limits (design ready), built in connectors re-asking at release, a not-released intent state, an end to end refusal-at-release test, a grantee existence check, limiting what a source may answer. - L.4 RFC-0023's open questions; L.5 housekeeping (the livecheck-agent key, the two Vercel projects, step up key backups, today's key rotations, deploying from inside the endpoint folder). The two live check READMEs record their cleanup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): what is left for business validation Add a "What is left" section to the business validation concept page (operator steps, evidence not collected, not built, open questions) and a roadmap row linking to it, mirroring REMAINING-WORK.md section L. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: related-work note on RRSI (arXiv 2609.24972) Keep a reference note on Regularized Recursive Self-Improvement of Agent Harnesses: what it says, its reported results and limitations, and what it means for Parmana (authority must sit outside what a self-improving agent rewrites). The paper is linked, not copied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essays, first ten pages (work in progress) Essays explaining Parmana end to end, written as plain-language pieces: business validation, guardrails versus a gate, self-improving agents, cumulative limits, verifiable approvals, maker checker, key rotation, a refund agent checklist, production live checks, and what done means. Navigation and the remaining essays follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): sixteen more essays; limitations page matches Refusal Records Adds essays on how Parmana works end to end, policies, human approval, authority grants, the gateway, execution authorizations, content binding, Execution Intents, gateway attestation, Refusal Records, the caller audit trail, replay, independent verification, signature choices, governing the rules and running Parmana yourself. The limitations page said no outcome goes unrecorded and that Refusal Records are the complete list; a Refusal Record write fails open (CLAIMS.md 3.11), so both sentences now say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): Essays tab with all 31 essays; fix stale compare and claims lines Adds the last five essays, an overview page and an Essays tab in the navigation, grouped from why Parmana exists through proof and honesty. How Parmana compares said most teams require approval only above a risk threshold and that declared facts are never checked against another system; every action needs a signed approval (CLAIMS.md 2.47) and a policy can name a business signal source, so both lines now say so. CLAIMS.md section 4 still listed the Slack connector as not implemented; it is marked superseded by 2.44 and 2.47. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essays 32 onward, first batch (work in progress) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essays 51 and 62 (work in progress, not yet in navigation) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs(site): essay on models as insider risks Maps Satya Nadella's 'Models as Insider Risks' principles to what Parmana does (controls outside the model, independent controls and auditability, signed evidence, testing refusals, a public gap log) and what it does not (tamper-evident, not tamper-proof; no mid-task brake on a model; no chain-of-thought or model-diversity controls; only actions routed through it). Added under Why Parmana exists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: record the AgenTrust listing (agentrust-io/integrations#294 merged) The refund evaluation package was prepared as a proposal to the AgenTrust integrations repository. The proposal was merged on 2026-10-12 as integrations/parmana-server, a TRACE external evidence source with no conformance level. Record what was merged, what the maintainer checked and what they did not, and that the listing is not a certification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: record the AgenTrust TRACE listing in claims, state, changelog and evaluation agentrust-io/integrations#294 was merged on 2026-10-12. Adds CLAIMS.md 3.23 (scoped: a community listing of an evidence mapping, no conformance level, not a certification; what the maintainer checked and did not), a CURRENT-STATE section, a changelog entry for 2026-10-12 (the listing, the Essays tab, and the limitations and comparison corrections) and a link from the evaluation page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: record the AgenTrust Verified-tier request as pending A follow-up PR asks AgenTrust for the Verified tier (parmana 1.6.0 pinned, exact reproduction steps). Recorded in CLAIMS.md 3.23, CURRENT-STATE, REMAINING-WORK and the evaluation README as requested, not granted; the tier stays community until a maintainer changes it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * examples: Razorpay refund demo under Parmana (test mode) An agent refunds a Razorpay payment through a registered external endpoint. Policy razorpay-refund 1.0.0 needs an authority grant and a signed manager approval for the payment covering the amount (paise). The endpoint verifies Parmana's signed release, refuses live keys, and refunds once: each refund carries the businessTransactionId as its Razorpay receipt, checked before refunding. send.ts runs four cases (no approval, approved, over the grant, replayed approval); the README is the step-by-step runbook. Nine tests against a fake Razorpay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: AgenTrust maintainer reproduced the integration; tier change pending On agentrust-io/integrations#313 a maintainer reproduced parmana-server at 80c3a92 with the released parmana 1.6.0 and agentrust-trace 0.11.0 (references.json byte for byte, 18 tests passed) and said the tier change follows in a separate maintainer PR. Recorded in CLAIMS.md 3.23, CURRENT-STATE, REMAINING-WORK and the evaluation README; the tier stays community until that PR merges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * docs: agentrust-io/integrations#313 merged (1aac6c8); tier still community Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF * Add judges' deck for Razorpay Builders Day (14 slides, speaker notes) * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). * Harden key generation: validate key IDs, owner-only private keys (#118) * Harden key generation: validate key IDs, owner-only private keys generate-keypair and rotate-verification-key wrote private keys with the default umask (world-readable) and used the key ID in a file path without validation, so --key-id ../x wrote outside the key directory. - scripts/lib/key-files.ts: key ID allowlist, explicit 0600 for private keys (chmod after write, so the umask cannot widen it), 0700 directory when created. - Both scripts use it. Overwrites are still refused without --force. - tests/scripts/key-files.test.ts: unit tests, plus end-to-end runs of generate-keypair (the traversal and mode tests fail on the old script). * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * Describe the replayed approval by its real refusal, and cite its evidence (#119) * Razorpay demo: describe the replayed approval by its real refusal The replayed approval is refused by signal-state-verification-violation (the approval is spent and its verified state no longer matches), not by a separate 'already used' rule. The runbook and the judges' deck said 'already used', which an AgenTrust reproduction report did not support. - examples/razorpay-refund/README.md: request 4 names the rule and reason. - builders-day/Parmana-Razorpay-Builders-Day.pptx: slide 7 row 4 reworded to match (regenerated; the PDF brief is local-only and not committed). * Reference the replayed-approval refusal to its evidence The replay refusal is now cited by file, line and test so it can be checked: - docs/CLAIMS.md 3.23: where the replay case is checked (test lines, fixture matchedRuleId, report.json, live demo), with the real rule signal-state-verification-violation. - docs/evaluation/agentrust-refund/README.md: corrected the replay reason (it was 'already used') and added a per-case reference list. - docs/site/evaluation/claims-and-evidence.mdx: new row pointing at 3.23 and the test that reproduces it. - examples/razorpay-refund/README.md: request 4 points to the same evidence. The referenced integration test passes on this branch. * Reference the AgenTrust integration files for the replay refusal Points the replay refusal to the Parmana integration as merged in agentrust-io/integrations (commit 6de4cb9, integrations#294): - fixtures/03-replay.refusal-record.json line 46 (matchedRuleId) - tests/test_parmana_evidence.py line 131 (zero connector invocations) - the reproduction command: python -m pytest tests in integrations/parmana-server Checked on this branch: that suite at 6de4cb9 gives 18 passed. The integration's README row for this fixture says 'already used'; the docs here cite the fixture's rule and do not repeat that wording. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * Serialize migration runners with a PostgreSQL advisory lock (#120) * Serialize migration runners with a PostgreSQL advisory lock Two deployments that start together both read the pending list and both tried to run the same migration. Observed against PostgreSQL 16: the second runner failed with a unique-constraint error, and the same race can apply a non-idempotent migration twice. applyPendingMigrations now takes pg_advisory_lock before reading the pending list and releases it in finally. Dry runs take no lock. Tests: - lock is the first statement and unlock the last; the lock is released when a migration fails; dry runs take no lock (fake client). - two concurrent runners against real PostgreSQL apply the migration once. Runs only when PARMANA_TEST_DATABASE_URL is set, on an empty throwaway database (it drops the tracking table and demo table). Without the lock this test fails; with it, it passes. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * Python SDK: redact debug logs and refuse plain HTTP to remote hosts (#121) * Python SDK: redact debug logs and refuse plain HTTP to remote hosts Debug logging wrote request and response bodies in full, so an amount, an email or a payee reached the log whenever debug=True. - Debug logs show each body's structure with every leaf value replaced by <redacted>. The Authorization header is never logged. - HttpTransport refuses an endpoint that is not https://, except localhost and 127.0.0.1, because the API key travels in the Authorization header. Tests: the debug-log test checks that no amount, name, email or key appears in the log (it fails on the old transport); the endpoint tests cover https, localhost and a remote plain-HTTP refusal. Full Python suite: 190 passed; ruff, black and mypy clean. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * CI: Python SDK on Node 24, Docker checks on all package changes (#122) * CI: Python SDK on Node 24, Docker checks on all package changes - python-sdk.yml ran on Node 22 while the root package.json requires >=24 and every other workflow uses 24. - docker-image.yml path filters listed packages/*/package.json, so a source change under packages/ (for example packages/api/src) could skip the Docker startup checks. They now match packages/** on push and pull request. Not run locally: GitHub Actions. Node 24 is the version release.yml and ci.yml already use. * Razorpay demo: fix lint error that failed CI no-useless-assignment: json was initialised to {} and always reassigned in the try or catch. Declare it without an initial value; behaviour is unchanged (9 endpoint tests pass). --------- Co-authored-by: Claude <noreply@anthropic.com> * generate-api-key: write key files owner-only The file holds agents' API keys (the PARMANA_API_KEYS value), but it was written with the default umask, and an existing file kept its mode. Writes now go through writeKeyFile with mode 0600, for both the .env and the JSON output, so an existing world-readable file is tightened too. Tests: existing world-readable .env and a new JSON file both end at 0600 (the first fails on the old writer). 31 passed; typecheck, ESLint and Prettier clean. --------- Co-authored-by: Claude <noreply@anthropic.com>
…nding On agentrust-io/integrations#313 a maintainer reproduced parmana-server at 80c3a92 with the released parmana 1.6.0 and agentrust-trace 0.11.0 (references.json byte for byte, 18 tests passed) and said the tier change follows in a separate maintainer PR. Recorded in CLAIMS.md 3.23, CURRENT-STATE, REMAINING-WORK and the evaluation README; the tier stays community until that PR merges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF
…unity Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019v3V53gvHYxvLqP74uAmgF
Requesting the Verified tier for integrations/parmana-server.
Changes: pins the released parmana SDK 1.6.0 (was 1.5.0) and adds exact reproduction steps to the README. No code changes.
To reproduce, from integrations/parmana-server:
python -m venv .venv && . .venv/bin/activate
pip install -e ".[test]"
python examples/emit_references.py
git diff --exit-code fixtures/references.json
python -m pytest tests
Expected: 4 lines printed, no diff, 18 passed.