Pulled directly from
git log on main in pavancharak/parmana-exp, commit hashes are
real and checkable. This page covers the commits that changed what a reader of this site can
actually do or rely on, not every commit in the repository’s history, run git log yourself
for the complete record, 358 commits as of this page’s last update. Known gap: entries
between 2026-08-19 and 2026-09-06, several commits landed on 2026-09-07 before the two below,
and everything on 2026-09-09 other than 25295ee, bab0981, and the ten commits below them
(including the changelog and validation-doc commits themselves) were not backfilled — git log for those ranges directly if you need them.2026-09-11 (later same day)
Same-day PQC production-readiness audit (scope: is Parmana’s cryptographic execution evidence independently verifiable by third parties?) found four real gaps and closed all four. Full detail:docs/VERIFICATION-GAPS.md (“Gaps closed in the 2026-09-11 PQC
production-readiness audit remediation”, gaps 51-54), docs/CLAIMS.md 2.14/2.28/3.12
updates. Commit 1f4b292.
- No standalone offline verifier existed anywhere in this repository — every
verification path was a call into Parmana’s own server. New
packages/crypto/src/OfflineVerifier.ts(zero network/disk/env-var access) and a Python counterpart,python/parmana/crypto/offline_verifier.py; cross-language determinism proven by spawning the real TypeScript signer as a subprocess and verifying its output independently in Python. (Correction to the audit’s own first pass: an external, independently maintained package,@parmana/sign(github.com/pavancharak/parmana-sign, verified real viagh api), already provides offline verification of the classical signature, but not the hybrid envelope or this system’s specific canonical field mapping.) - No public-key discovery endpoint existed. New
GET /keys/:keyIdandGET /.well-known/jwks.json(packages/api/src/routes/keys.ts), unauthenticated like/refusal/verifyand/audit/verify. Found and fixed alongside it:FileKeyProvider.getMetadata()reported the wrong algorithm for any keyId other than whichever one happened to match global config. VerificationCrypto/RefusalCrypto/AuditEventCrypto(Trust Records, Refusal Records, Audit Events) hardcoded keyId"default"with no rotation mechanism — reproduced empirically (sign, regenerate the key in place, re-verify: fails). NewPARMANA_VERIFICATION_KEY_ID/PARMANA_VERIFICATION_SECONDARY_KEY_ID, mirroring the existingPARMANA_GATEWAY_KEY_IDpattern, plusscripts/rotate-verification-key.ts.- A genuinely hybrid-signed Trust Record’s ML-DSA-65 signature could be silently
stripped with no detection (proven by this codebase’s own pre-existing test). New
opt-in
HYBRID_SIGNATURE_REQUIREDpolicy flag closes it for any deployment that enables it, with zero effect on any already-issued signature.
2026-09-11
Real-deployment verification session: deployed the real API (not the standalone buildathon demo) to a new environment for the first time with caller authentication actually enabled against a real, live Supabase project, which surfaced a genuine production bug invisible to the existing test suite. Full detail:docs/VERIFICATION-GAPS.md (“Gaps closed in the
2026-09-11 real-deployment verification session”) and docs/CLAIMS.md §2.31’s new update.
1eb8881fix(policy,api): newpolicies/agent-vendor-payment/1.0.0/policy.json, exercised end-to-end (realPolicyEngine, real Ed25519 signing, real Supabase storage) both locally and against a newparmana-api-realVercel deployment. Deliberately authorization-only, no connector wired — its signals are unverified caller attestations, the same shape G-27 found invendor-paymentand closed by removing that capability from production entirely. The same deployment surfaced and fixed a real bug:caller_audit_events.type’s CHECK constraint never included'caller.capability_granted', even thoughPOST /execute/POST /transactionswrite that event on every successful, authenticated capability check — against a real Postgres-backed audit sink with caller-auth enabled, this meant every successful authenticated request failed closed with503 AUDIT_UNAVAILABLEbefore Policy Engine ever ran. New migrationsupabase/migrations/20260911090000_add_capability_granted_to_caller_audit_events.sqlcloses it, following the same widening pattern as its four predecessors.
2026-09-10
Production-readiness pass against an external code-derived audit (13 items, none critical). Every item was independently re-verified from source before being acted on, not taken on the audit’s word. One item (persistent storage for the session-credential vault/gateway- session store) was overturned by that re-verification: both are strictly intra-request, single-process objects with no restart-survival requirement at all, confirmed by tracing every caller. Full detail:docs/VERIFICATION-GAPS.md (new “Gaps closed in the 2026-09-10
production-readiness session” table, gaps 40–49), docs/CLAIMS.md §2.16/§2.18/§2.26/§3.14/
new §3.21.
624adf7fix(crypto):KEY_PROVIDER=aws-kms/azure-key-vault/gcp-kms/hsmnow fails closed at startup instead of silently constructingFileKeyProvider. An operator configuring real KMS custody was getting private-key-on-disk instead, with no error.2d643cafeat(storage,api): newPostgresRateLimitStorecloses the fleet-wide half of/execute//health//readyrate limiting (docs/CLAIMS.md3.14’s own documented scope gap). Durable whenDATABASE_URLis configured, falls back to the in-process default with a loud warning otherwise. Correction to the source audit in the same commit: the session-credential vault and gateway-session store it also flagged are not actually a gap (see above).263387bfix(api):.env.exampleno longer shipsPARMANA_AUTH_DISABLED=trueuncommented;GET /readynow surfacesauthDisabled/warningin its JSON response, not just a startup log line.2761548feat(api):PARMANA_GATEWAY_IDmakes the Gateway’s identity configurable (was hardcoded to the literal"parmana-gateway"); the session-issuance capability token is now a real generated value instead of a bare{}.33d96b3feat(api): warns at startup whenHUBSPOT_PRIVATE_APP_TOKEN(a long-lived static credential) hasn’t been rotated in 90 days, or has no recorded rotation date at all.2aa585ffeat(api,runtime): newGET /trust-records, a bulk export of full signed Execution Trust Records (not just raw transactions), caller-scoped and paginated exactly likeGET /transactions, withsince/untildate-range filtering. Seedocs/CLAIMS.md§3.21.373a020fix(governance-ui):POST /login, this tool’s only unauthenticated route, is now rate-limited (10/minute, IP-keyed). Reviewed the rest ofgovernance-ui’s security posture in the same pass (session-fixation hardening, cookie flags, XSS escaping) and found it already correct.147a366feat(shared): newcreateLogger/getLogger(@parmana/shared), a structured, level-gated logger.LOG_LEVELwas already read into config but nothing gated output on it; this is the tested gating infrastructure, not yet threaded through the ~17 existingconsole.*call sites.669b198chore(deps):npm auditfound 12 vulnerabilities (3 high); resolved to 3 moderate via aqsoverride (^6.16.0, unblocking a versionexpress@4.22.2’s own pin couldn’t reach without one) and avitest/@vitest/coverage-v8patch bump (^4.1.9→^4.1.11). Residual 3 are entirely in this session’s own new load-test devDependency (next entry) and never ship in the production image.c32a861feat: newnpm run loadtest(scripts/load-test.ts). No load testing existed anywhere in the repo before this. Boots the real server and benchmarksPOST /execute(real policy evaluation, signing, connector execution) at configurable concurrency. Actually run: ~51 req/s sustained, p50 188ms/p99 444ms at 10 connections.b6671f7chore: gitignore the roottsconfig.tsbuildinfobuild artifact.1361f52fix:scripts/apply-all-migrations.sql(the Dashboard-only Supabase apply path) was three migrations behindsupabase/migrations/, two predating this session, found while adding the third (2d643ca’srate_limit_counters). A Dashboard-only deployment followingDEPLOYMENT.md’s own steps would have gotten an incomplete schema.d5b2c28docs:docs/VERIFICATION-GAPS.mdgaps 40–49, the session-credential-vault correction, and a new D-6 entry for the CI branch-protection blocker;docs/CLAIMS.md§2.16/§2.18/§2.26/§3.14 updates and new §3.21;DEPLOYMENT.mdupdates for the commits above.aa1e1ebdocs: addsRELEASE-NOTES-2026-09-10.md, replacing an earlier draft that cited fabricated commit hashes and nonexistent features (Redis-backed rate limiting, governance-ui bulk/CSV export, syslog streaming) with content verified against this same commit range.d2f2a42docs: a full sweep ofdocs/,docs/site/, anddocs/book/found several pages explicitly asserting this session’s pre-fix behavior as current fact (three pages saidKEY_PROVIDER=aws-kms/etc. “does nothing”; four described the rate limiter as unconditionally in-memory with no shared-store path; two saidLOG_LEVELwas read but consumed by nothing); all corrected.docs/site/deployment/production.mdxalso gained theKEY_PROVIDER/PARMANA_GATEWAY_ID/rate-limiter/GET /readynotesDEPLOYMENT.mdalready had. Dated point-in-time audit/certification snapshots were deliberately left untouched, per this repo’s own historical-record convention.417829edocs(book): full re-check ofdocs/book/’s remaining chapters anddocs/00X-*.mdagainst this session’s changes. Completed Chapters 10/14 with accurate additions (neither said anything false, they predated these capabilities).docs/00X-*.mdneeded no change, confirmed by grep: that series operates above the level of detail this session’s fixes touch.0e0534bdocs:README.md’s test count (1,313, last verified 2026-08-24) was stale from ordinary suite growth since then, not from this session’s changes. Updated to 1,671 (1,631 passed, 38 skipped, 0 failed), re-verified via a JSON-reporter run.9114285docs: swept all 37 tracked root.mdfiles;CODEBASE-REFERENCE.md(built 2026-09-07, three days pre-session) had the same gatewayId/session-token placeholder and unconditional in-memory rate-limiter claims this session fixed. Corrected, original text struck through and kept for historical accuracy. Five other files with hits are dated audit/snapshot reports tied to a specific commit or submission event and were deliberately left untouched.07f44d4docs(site): expandedroadmap.mdx’s KMS/HSM custody section (Move 1) with what’s pending, why it’s still pending (this repo’s own live-test evidence bar, and no real cloud credentials exist in this environment to meet it), and the concrete build order once someone does. Asked for directly rather than having aKeyProviderimplemented blind against a mocked SDK.ead566adocs: removed em-dashes from every prose file this session’s production-readiness pass touched (81 occurrences, 18 files), rewritten with periods, commas, colons, or parentheses. Meaning unchanged throughout. Requested directly, not applied toparmana-founder-case-study.md’s own prose (the founder’s writing, not this session’s).
2026-09-09
3023399docs(examples): newpolicies/api-key-issuance/1.0.0policy and Tutorial 106, written correctly under the fail-closedboundSignalsdiscipline (G-33) and zero-conflict shape (G-39) from the start — a worked template for authoring a new policy, rather than another retrofit. Demonstrates the approve path, aboundSignalsmismatch caught bySignalIntentBinder, a specific rejection reason, and zerofindRuleConflicts()warnings.npm run examples: 99/99, exit 0.a3d19bddocs:docs/VERIFICATION-GAPS.mdG-38/G-39 anddocs/CLAIMS.md§2.30 updates for the two commits below.f82f071feat(policy): newPolicyValidator.findRuleConflicts(policy)flags pairs of rules whose conditions can be true simultaneously — first-match-wins otherwise lets the earlier one silently decide with no signal the later rule is partly unreachable. Advisory only, never fail-closed. A first design (tested against every real policy before shipping, not assumed correct) had three real bugs — it would have flagged the ordinary trailingalways: truecatch-all as “conflicting” with everything, gotten asymmetric numeric thresholds wrong, and reported noise on every approve/reject pair since every real approve rule is a nestedall— all three fixed with real interval-overlap math and a sound conjunct-disjointness argument. Verified against all 10 real policies: zero false positives. Seedocs/VERIFICATION-GAPS.mdG-39.d1107b6chore(policy): removedPolicyOutcome/PolicyAction’s unused third value,REQUIRE_OVERRIDE— no real policy used it, and it collapsed to an ordinaryREJECTanyway. Disclosed rather than glossed over: two tests and three docs had treated it as a deliberately reserved future extension point, not dead code; removed anyway as an explicit, requested trade-off. Seedocs/VERIFICATION-GAPS.mdG-38.e1c5d04fix(examples): theboundSignalsfail-closed change (acf248a/b53bd4ebelow) applies to every policy, not just the 10 underpolicies/— brokenpm run examplesat Tutorial 14. Fixedexamples/tutorials/14-custom-policy’s own policy (one genuinely bindable fact,paymentAmount, now really bound) and the widely-sharedexamples/shared/policies/default-policy.json. Also wired Tutorial 105 intoscripts/run-examples.ts’s list for the first time, and corrected two doc-site pages whose own inline policy examples had gone stale relative to the fail-closed behavior they demonstrate (Write your first policy, Policies and the decision).npm run examples: 98/98, exit 0. Seedocs/VERIFICATION-GAPS.mdG-37.1899f6edocs: addsdocs/audit/PRODUCTION-READINESS-AUDIT-2026-09-09.md(5 critical claims, 4 known findings, and a structural dead-code/naming audit, verified against actual code — correcting several stale assumptions along the way) and updatesdocs/CLAIMS.md§2.14/§2.30/§3.11 to match the four fixes below.acf248achore(deps): removes the unused@supabase/supabase-jsdependency from 5 packages (api,crypto,policy,runtime,shared) — confirmed zero real usage by grep. Self-caught regression in the same pass, documented in full rather than glossed over: the grep missed two real usages outsidesrc/tests(packages/storage/scripts/migrate.ts,scripts/verify-policy-changes-approved.ts), neither covered bytsc -borvitest. Both restored. Seedocs/VERIFICATION-GAPS.mdG-36.5cd88e2feat(crypto):PRIMARY_SIGNATURE_PROVIDER/SECONDARY_SIGNATURE_PROVIDERnow acceptml-dsa-65as an alias for the internaldilithium3identifier — additive only, no rename, so an existingdilithium3-configured deployment is unaffected. Seedocs/VERIFICATION-GAPS.mdG-35 and Cryptography.5e291abchore: removes deadSupabaseClientFactoryandassertSupabaseConfigured.ts(zero remaining call sites, no tests) and rewrites 8 stale doc-comment references that still describedSupabaseClientFactoryas current. Seedocs/VERIFICATION-GAPS.mdG-34.b53bd4efix(policy):PolicyValidator.validate()now fails closed on any rule-referenced fact with neither aboundSignalsnor a newunboundSignalReasonsentry, replacing a load-timeconsole.warnnobody reviewing a running system would see. All 10 real policies updated — two (connector-capability,customer-refund) had a genuinely bindable amount fact that had simply never been bound, a real scope-drift gap now closed. Seedocs/VERIFICATION-GAPS.mdG-33.bab0981docs(examples): Tutorial 105 demonstrates the25295eefix below end-to-end — a transaction with a provisionedtenant.acme-corpkey signs and verifies only under that key (and fails verification under the shared default key), an unprovisioned tenantId falls back silently to"default", and a transaction with no tenantId is unaffected.examples/tutorials/105-tenant-key-isolation/.25295eefix(runtime):RuntimeAuthorizationSignerpreviously signed every Execution Authorization under the single shared"default"key regardless of tenant, even though verification already resolves the public key per-authorization by its ownkeyId(Cryptography, 2.28). NewTenantKeyResolver(packages/runtime/src/TenantKeyResolver.ts) signs under a dedicatedtenant.<tenantId>key when one has been provisioned, falling back to"default"otherwise — opt-in per tenant, no behavior change for deployments with no tenant keys provisioned. Found during a nono-style architecture audit of the authorization-proof model. Seedocs/CLAIMS.md§2.28 (“Update 2026-09-09”) anddocs/VERIFICATION-GAPS.mdG-32.
2026-09-07
7a1aa37feat(runtime): execution-time Policy Governance verification, wired intoRuntimeEngine.execute()— a policy with no approval record, a bad approval-record signature, or tampered live content can now be refused beforePolicyEngineevaluates a single rule, not just flagged minutes later. Feature-flagged (POLICY_EXECUTION_VERIFICATION_ENFORCED=true), default off, since every real production policy is currentlyPENDING_APPROVAL(seedocs/CLAIMS.md§2.26) and an unconditional gate would refuse them all today — confirmed with the user before building it. Seedocs/CLAIMS.md§2.35 anddocs/VERIFICATION-GAPS.mdgap 40.437f5ecfeat(governance): verifyPolicyChangeApprovalRecordsignatures (not just content hashes) in the deploy/startup integrity check, hash-chain each record to the one before it for the same policy (newpreviousRecordHashfield, requires a Supabase migration), and re-run the check every 5 minutes for the life of the process instead of only at startup. Also hardensPolicyValidator’smatchesregex against a class of catastrophic-backtracking patterns, surfacesfindUncoveredFacts()coverage warnings on the pending-change endpoints, and removes unused dead ledger code from@parmana/policy. Findings and fixes documented indocs/CLAIMS.md§2.34 anddocs/VERIFICATION-GAPS.mdgaps 35–38. Seedocs/CLAIMS.md§2.26 for the maker-checker feature this extends.4e1a8e3fix(scripts): the same-dayscripts/backfill-legacy-policy-approvals.ts(new in437f5ec) is corrected to never treat a real, already-PENDING_APPROVALpolicy proposal as “legacy” — it would otherwise have misclassified this repository’s own ten real production policies (docs/CLAIMS.md§2.26’s “Legacy-policy backfill” entry) awaiting a genuine human checker.docs/VERIFICATION-GAPS.mdgap 39.
2026-09-06
8a81dd8fix(policy):PolicyValidator.findUncoveredFacts()+ aPolicyRouter.load()warning when a rule decides on a fact absent fromboundSignals, see @parmana/policy anddocs/CLAIMS.md§2.30.1f479fffix(runtime):RuntimeEngine’s constructor logs which optional protections (signalStateVerifier,capabilityPolicyBinder, refusal recording) are configured, see @parmana/runtime anddocs/CLAIMS.md§2.30.cf7909cchore: remove stale doc-comment references to the deleted Razorpay connector’s classes/files across 13 source files (RazorpaySignalStateVerifier,createRazorpayConnector.ts,SupabaseRazorpayWebhookAuditSink, and similar) — a reader following any of these citations found nothing.41e7808docs(claims): add §2.30 for the two fixes above.806d6aafeat(execution-control): sign asubmittedBy/grantedCapabilitycaller-capability claim intoExecutionAuthorizationPayload(optional fields, same precedent aspolicyContentHash/signalsHash), checked for consistency against the executed action byDefaultConnectorPolicy.assertAllowed(). Defense-in-depth, not a fix for a live exploit — see Execution authorization, @parmana/execution-control, anddocs/CLAIMS.md§2.31 for the honestly-scoped writeup of what this does and does not close.26f1e17docs(claims): add §2.31 for the caller-capability claim above.66e77f9docs(site): add Objections and Evidence, indexing CLAIMS.md’s claims against real tests across 5 domains as objection→evidence, replacing a fabricated 52-scenario plan. Closed 3 real test gaps found in the process: a tampered-submittedBycase inauthorization-envelope.test.ts, a newAuditEventCryptounit test file (previously only indirectly covered), and two new performance tests (authorization-signing-performance.test.ts,execution-pipeline-latency.test.ts) — zero automated performance measurements existed anywhere in this repo before this commit.b752ff1feat(api): per-caller tamper-evident chaining forcaller_audit_events(SupabaseCallerAuditSink.record(), a Postgres advisory lock scoped per caller rather than a table-wide lock, sincecaller.authenticatedfires on every authenticated request). NewCallerAuditChainVerifierproves a deleted row breaks the chain, standalone, no server required. Seedocs/CLAIMS.md§2.32.1996220docs(claims): add §2.32 for the audit chain above, close the corresponding evidence-index gap.373402afix: close 2 pre-existing lint issues unrelated to the above (.cjsscripts incorrectly flagged for usingrequire(); an unused test import).c7bba81docs(site): add an honest key-compromise row to Objections and Evidence — rejected a proposed test claiming signature re-verification catches a stolen signing key (cryptographically incoherent: an attacker holding the real key can sign anything and it verifies as fully legitimate), documented the real, honest answer instead.01aae2edocs(site): backfill this changelog with the 5 commits above (66e77f9throughc7bba81) — they’d landed without an entry.d8ac856docs(site): add Caller Audit Trail — no dedicated reference page existed forCallerAuditSink/the per-caller chain (b752ff1) before this, a pre-existing gap surfaced while checking doc coverage against code.
2026-08-19
38658c0/751310a/5ffc85cfeat(connector-github): add a GitHub connector with ephemeral GitHub-App-installation credentials, wired into the production execution chain, seedocs/CLAIMS.md§3.17. No dedicated docs page yet, see Add a connector for the general pattern this follows.496c79e/030d01bdocs(claims): add §3.17 (GitHub connector, cross-referenced from §3.10) and §3.18 (deployment infrastructure requirements) todocs/CLAIMS.md.36f20c8/9f0f6b2test(hubspot): add an explicit credential-lifecycle non-exposure test, cited indocs/CLAIMS.md§2.23/§3.10.d496f41docs(claims): document §2.26’s CI policy-governance check and its real Git-enforcement gap.4fb7f1cdocs(claims): record and reject an atomic/fail-closed refusal-record proposal, a design considered during review and turned down, not shipped.cbd4650,57e9667,6cc0963,a835c98,1bbd196— a same-day claims-audit session: a master-verification pass across claims 2/3/7/9/10,PolicyNotFoundError’s fail-closed behavior documented in §2.2, and a final pass across claims 14-19 finding zero gaps.
2026-08-18
aae1acafeat(governance): Policy Governance, a maker-checker workflow for policy changes (propose/approve/reject, step-up auth, signed approval records), seedocs/CLAIMS.md§2.26. No dedicated concept page on this site yet.a13d52f/9bd595a/9e51df2feat+fix(governance): bind content hash at decision time, add a fail-open deploy/startup integrity check, and close two findings from an independent audit of the maker-checker feature.9b3ed34feat(governance-ui): add a read-only internal UI for Policy Governance.9374191/9b4f679ci: add policy-approval verification to CI, documented indocs/CLAIMS.md.8b66f35fix: remove secret-like HubSpot token examples from the repository, placeholder tokens made unambiguously fake.
2026-08-17
4959af3docs: add INC-10, an SDK version-tracking incident and its fix.b4c2e5achore: align package versions across the workspace.
2026-08-16
900621dfeat: add a durable audit record for principal-binding violations.1aba968fix(sdk): addRateLimitError, preserveCAPABILITY_NOT_ALLOWEDon the client, correct 403 docstrings, see Error catalog.41e5d2c/3253322/40aebe7test: add capability-denied and principal-denied scenarios to tutorial 84, plus caller-C/D key placeholders, and a pass documenting and investigating execution incidents.e848b98fix(hubspot): replace realistic-format placeholder tokens with clearly-fake ones.e5e0b1c,cca3231,f39f64f,3bed7d0— a documentation-cleanup series: fixed broken references to deleted Razorpay files, added a citation-integrity test, fixed danglingCLAIMS.mdsection citations, and a general README/llms-full.txt/API-reference cleanup pass.
2026-08-12
a996b89feat(api): caller-to-capability scoping (allowedCapabilities), see Authentication.d8a6deddocs: add HubSpot integration evidence and update the TRL assessment.
2026-08-11
1061e02build: include TypeScript SDK and configure Python tests.6a1c3aedocs: latency/voice-AI readiness investigation — four findings on whether Parmana can meet a sub-500ms latency budget (cold Postgres connections, since fixed; synchronous caller-auth audit writes, confirmed deliberate; a region mismatch; anycast relay overhead), explicit that a full, realPOST /executeround trip remains unmeasured. Also added Verification Log’s first entry (live HubSpot verification against the deployed instance) and repositioned the README tagline.09eb2d4feat(sdk): dogfood the SDKs end to end — the HubSpot live integration suite rewritten to run through the real@parmana/sdkpackage (ParmanaClient/HttpTransport) instead ofsupertestagainst an in-process Express object, and both documented “quickstart” example scripts (python/examples/quickstart/run.py,typescript/examples/02-execute.ts) proven to actually run for the first time, by a real test each. Found and fixed real bugs along the way, including all 7typescript/examples/*.tsfiles importing@parmana/typescript-sdk, a package name that has never existed. Seedocs/CLAIMS.md§3.15.bf6a413docs: document per-caller rate limiting on/execute(docs/CLAIMS.md§3.14,.env.example), see Authentication.6f39ef1feat(api): add rate limiting —POST /executeper authenticated caller identity,GET /health/GET /readyseparately by IP with a far more permissive limit, see Authentication.85dc62dfeat(sdk): add refusal-record and audit-verify route coverage to both SDKs.328be90fix(python-sdk): fix stale repository URLs, add missing Apache-2.0 license text.6f6c76ffix: resolve additional pre-existing test failures found while verifying SDK fixes, plus 2 lint errors.6597939fix(typescript-sdk): fix an env-path test bug, implement retry logic (backoff on idempotent GETs against 502/503/504), and rename the package@parmana/legacy-reference→@parmana/sdk, see TypeScript SDK.
2026-08-10
5b5cf2c/b4a2e9c/3cb4249Python SDK and API error-handling fixes: ashell=Trueplus list-argument bug that broke key generation in CI, andrufflint failures inclient.pyand its tests.
2026-08-09
2e94a0acomplete hybrid signature migration — see Security §3.13 for the current scope (built and tested, not yet running in any deployed environment).1d8ebf0refactor: strengthen execution authorization architecture.
2026-08-07
1e3bd90Update documentation and project artifacts.
2026-08-05
0e3e465feat(hubspot): implement Signed Approval Artifact, closing the HubSpot half of TD-23, see HubSpot.d6b3143fix(razorpay): derive the daily cumulative refund cap from the repository rather than a hardcoded value, closing the Razorpay half of TD-23. (Razorpay was removed from the repository entirely 2026-08-12, see thee5e0b1c/cca3231entry above.)e55c646,470121b,56cef07,17c5554,d38e775,a30f24a,ae7c930,58a3f39,e44bffc,5bd4ea6,4e5f78d,5470847— a technical-debt hardening series (TD-1 through TD-23) from an internal architecture review: canonical capability-to-policy binding, a dead composition-root removal, replay endpoint semantics certified by test, stale vendor-payment/caller-auth documentation corrected, and residual debug instrumentation removed.
2026-07-28
0e69ed4chore: npm audit fix, resolving 4 known transitive vulnerabilities (brace-expansion,js-yaml,postcss,body-parser, plusnanoidpulled in transitively) —npm audit fixalone, no--force, nopackage.jsonchanges. Full suite (597 tests) unchanged,npm auditnow reports 0 vulnerabilities.f89029efix: bind policy signals to executed intent, closing an execution-authorization bypass — the most severe finding in this project’s history, see Security for the incident anddocs/VERIFICATION-GAPS.mdG-24 for full detail.Policy.boundSignals+SignalIntentBinder(Policies and the decision),isPrincipalAllowed, andisOwnedByCaller(a compounding IDOR fix) landed together. Found via an external adversarial security exercise, not this project’s own audit process.
2026-07-20
f453713docs: fix CLAIMS.md escaping corruption, lead README/CLAIMS with execution-trust framing, scope key-compromise notice to what’s verifiable03aed1a/48320b3docs: add founder case study and update E2E documentation8a72f1achore: production hardening and live deployment improvements
2026-07-19
e13dd2afeat: production deployment, execution hardening, and live Razorpay validation, the live-mode refund validated against a second, live-mode Fly.io deployment, seedocs/CLAIMS.md§3.9 (historical; Razorpay removed from the repository entirely 2026-08-12).731465cfeat(razorpay): add webhook processing, settlement confirmations, and live integration support,POST /webhooks/razorpay,RazorpaySettlementProcessor(all removed from the repository entirely 2026-08-12, along with the connector).
2026-07-18
5fddcedfeat(api): add Razorpay connector and credential provider, refund creation against real Razorpay (removed from the repository entirely 2026-08-12).4df5cf6Add end-to-end documentation, Swagger UI, authentication improvements, and OpenAPI tooling.ce02554refactor(storage): improve repository initialization and availability handling.5c688b4feat(platform): Execution Integrity Platform v0.3, this commit added caller bearer-key authentication,createCallerAuthenticator.ts, gating every route except/health,/ready,/openapi.yaml, and/documentation, see Authentication. If you’re reading an older capture of this site’s Quickstart or FAQ that describes an unauthenticated API, that description predates this commit and is stale.
2026-07-17
de503e6docs(architecture): add implementation-backed execution flow audit.
2026-07-14
ec3735efeat(api): publish OpenAPI specification and add execution connector framework.
2026-07-11 to 2026-07-13
c282b8d,850e7ab,7c0f186Test and naming alignment: gateway session hardening,BusinessTrustRecordBuilderrename, separating the business trust pipeline from the execution trust builder.651497afeat: implement credential isolation and secure enterprise connectors, the commit most of this site’s[AVAILABLE]credential-isolation and content-binding claims are pinned to, see Credential isolation and Content binding & TOCTOU.5cc0c2efeat: add deterministic trust record ordering and verification hardening.7c529c4/82ebd31feat: add Execution Trust pipeline, hybrid signatures, and tutorials 47-56.
Earlier milestones
- 2026-07-07 to 2026-07-10: connector SDK and business transaction model
(
4740aee), runtime stabilization (ddf4bc5), execution system bootstrap composition root (6484349), tutorial series expansion through tutorial 56. - 2026-07-01: Python SDK
v1.0.0tagged and released, see Python SDK. This is a package version, not the overall product version, the running server’s/versionroute reports its own version independently. - 2026-06-25: first commit,
ba7bc45, “initialize Parmana architecture v1.”
A note on terminology in older commits
Commit messages and some earlier internal documents use “Execution Governance” as an architecture name. The product’s current, public-facing language avoids that framing, see Trust and claims for the discipline this site follows today. Commit messages are historical record and are quoted here as written, not edited to match current terminology.Full history
docs/CLAIMS.md in the repository, cited throughout this site wherever a
specific claim needs it.