@fourier-labs/harbour-contracts 0.6.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +49 -4
  2. package/contract-release.json +146 -0
  3. package/dist/gen-ts/ai-budget-ledger-event.d.ts +21 -0
  4. package/dist/gen-ts/ai-budget-ledger-event.js +3 -0
  5. package/dist/gen-ts/ai-classification-stamp.d.ts +25 -0
  6. package/dist/gen-ts/ai-classification-stamp.js +3 -0
  7. package/dist/gen-ts/ai-composite-policy-digest-helper.d.ts +5 -0
  8. package/dist/gen-ts/ai-composite-policy-digest-helper.js +13 -0
  9. package/dist/gen-ts/ai-composite-policy-digest.d.ts +12 -0
  10. package/dist/gen-ts/ai-composite-policy-digest.js +3 -0
  11. package/dist/gen-ts/ai-deployment-gate-decision.d.ts +27 -0
  12. package/dist/gen-ts/ai-deployment-gate-decision.js +3 -0
  13. package/dist/gen-ts/ai-gateway-key-lifecycle-event.d.ts +49 -0
  14. package/dist/gen-ts/ai-gateway-key-lifecycle-event.js +16 -0
  15. package/dist/gen-ts/ai-governance-decision.d.ts +12 -0
  16. package/dist/gen-ts/ai-metering-policy.d.ts +16 -0
  17. package/dist/gen-ts/ai-metering-policy.js +3 -0
  18. package/dist/gen-ts/ai-pricing-revision.d.ts +29 -0
  19. package/dist/gen-ts/ai-pricing-revision.js +3 -0
  20. package/dist/gen-ts/ai-runtime-binding.d.ts +14 -0
  21. package/dist/gen-ts/ai-runtime-binding.js +3 -0
  22. package/dist/gen-ts/ai-runtime-contract.d.ts +15 -0
  23. package/dist/gen-ts/ai-trace-event-v2.d.ts +31 -0
  24. package/dist/gen-ts/ai-trace-event-v2.js +3 -0
  25. package/dist/gen-ts/ai-verification-evidence.d.ts +1 -0
  26. package/dist/gen-ts/binding-classification-digest-helper.d.ts +11 -0
  27. package/dist/gen-ts/binding-classification-digest-helper.js +47 -0
  28. package/dist/gen-ts/binding-classification-subject.d.ts +56 -0
  29. package/dist/gen-ts/binding-classification-subject.js +3 -0
  30. package/dist/gen-ts/contract-release.d.ts +7 -0
  31. package/dist/gen-ts/contract-release.js +9 -0
  32. package/dist/gen-ts/deploy-request.d.ts +52 -0
  33. package/dist/gen-ts/deploy-response.d.ts +8 -0
  34. package/dist/gen-ts/index.d.ts +15 -0
  35. package/dist/gen-ts/index.js +15 -0
  36. package/dist/gen-ts/promotion-request.d.ts +52 -0
  37. package/dist/gen-ts/promotion-response.d.ts +8 -0
  38. package/dist/gen-ts/sanitized-binding-digest-helper.d.ts +7 -0
  39. package/dist/gen-ts/sanitized-binding-digest-helper.js +58 -0
  40. package/dist/gen-ts/sanitized-binding-evidence.d.ts +47 -0
  41. package/dist/gen-ts/sanitized-binding-evidence.js +3 -0
  42. package/fixtures/ai/adversarial-binding-classification-value.json +28 -0
  43. package/fixtures/ai/adversarial-sanitized-binding-relabel.json +32 -0
  44. package/fixtures/ai/valid-binding-classification-subject.json +46 -0
  45. package/fixtures/ai/valid-blocked-trace-event.json +31 -0
  46. package/fixtures/ai/valid-budget-ledger-event.json +15 -0
  47. package/fixtures/ai/valid-classification-stamp.json +19 -0
  48. package/fixtures/ai/valid-composite-policy-digest.json +11 -0
  49. package/fixtures/ai/valid-deployment-gate-decision.json +18 -0
  50. package/fixtures/ai/valid-failed-trace-event.json +50 -0
  51. package/fixtures/ai/valid-gateway-key-lifecycle-event.json +16 -0
  52. package/fixtures/ai/valid-gateway-key-lookup.json +14 -0
  53. package/fixtures/ai/valid-governance-decision.json +53 -0
  54. package/fixtures/ai/valid-inventory.json +30 -0
  55. package/fixtures/ai/valid-metering-policy.json +8 -0
  56. package/fixtures/ai/valid-policy-snapshot.json +117 -0
  57. package/fixtures/ai/valid-pricing-revision.json +14 -0
  58. package/fixtures/ai/valid-runtime-binding.json +7 -0
  59. package/fixtures/ai/valid-runtime-contract.json +24 -0
  60. package/fixtures/ai/valid-sanitized-binding-evidence.json +32 -0
  61. package/fixtures/ai/valid-source-revision-digest.json +6 -0
  62. package/fixtures/ai/valid-trace-event-v2.json +24 -0
  63. package/fixtures/ai/valid-trace-event.json +41 -0
  64. package/fixtures/ai/valid-transform-event.json +32 -0
  65. package/fixtures/ai/valid-transform-result.json +23 -0
  66. package/fixtures/ai/valid-verification-evidence.json +33 -0
  67. package/gen-ts/ai-budget-ledger-event.ts +25 -0
  68. package/gen-ts/ai-callsite-inventory.ts +64 -0
  69. package/gen-ts/ai-classification-stamp.ts +28 -0
  70. package/gen-ts/ai-composite-policy-digest-helper.ts +18 -0
  71. package/gen-ts/ai-composite-policy-digest.ts +16 -0
  72. package/gen-ts/ai-deployment-gate-decision.ts +30 -0
  73. package/gen-ts/ai-gateway-key-lifecycle-event.ts +81 -0
  74. package/gen-ts/ai-gateway-key-lookup.ts +23 -0
  75. package/gen-ts/ai-gateway-key-token.ts +7 -0
  76. package/gen-ts/ai-governance-decision.ts +90 -0
  77. package/gen-ts/ai-metering-policy.ts +20 -0
  78. package/gen-ts/ai-policy-snapshot.ts +169 -0
  79. package/gen-ts/ai-pricing-revision.ts +33 -0
  80. package/gen-ts/ai-runtime-binding.ts +18 -0
  81. package/gen-ts/ai-runtime-contract.ts +46 -0
  82. package/gen-ts/ai-trace-event-v2.ts +35 -0
  83. package/gen-ts/ai-trace-event.ts +72 -0
  84. package/gen-ts/ai-transform-event.ts +51 -0
  85. package/gen-ts/ai-transform-result.ts +36 -0
  86. package/gen-ts/ai-verification-evidence.ts +54 -0
  87. package/gen-ts/api-error-response.ts +16 -0
  88. package/gen-ts/artifact-contract.ts +81 -0
  89. package/gen-ts/binding-classification-digest-helper.ts +44 -0
  90. package/gen-ts/binding-classification-subject.ts +60 -0
  91. package/gen-ts/contract-release.ts +10 -0
  92. package/gen-ts/data-dependency.ts +46 -0
  93. package/gen-ts/data-grant.ts +71 -0
  94. package/gen-ts/data-source.ts +78 -0
  95. package/gen-ts/deploy-request.ts +117 -0
  96. package/gen-ts/deploy-response.ts +33 -0
  97. package/gen-ts/deployment-environment.ts +7 -0
  98. package/gen-ts/deployment-source.ts +16 -0
  99. package/gen-ts/deployment-status-failure.ts +12 -0
  100. package/gen-ts/deployment-status-request.ts +11 -0
  101. package/gen-ts/deployment-status-response.ts +39 -0
  102. package/gen-ts/env-bindings.ts +64 -0
  103. package/gen-ts/error-category-registry.ts +108 -0
  104. package/gen-ts/error-category.ts +7 -0
  105. package/gen-ts/error-envelope.ts +49 -0
  106. package/gen-ts/index.ts +51 -0
  107. package/gen-ts/kvs-routing-entry.ts +30 -0
  108. package/gen-ts/promotion-request.ts +95 -0
  109. package/gen-ts/promotion-response.ts +28 -0
  110. package/gen-ts/sanitized-binding-digest-helper.ts +33 -0
  111. package/gen-ts/sanitized-binding-evidence.ts +51 -0
  112. package/gen-ts/secret-reference.ts +40 -0
  113. package/gen-ts/transform-report.ts +105 -0
  114. package/gen-ts/version-state-machine.ts +52 -0
  115. package/gen-ts/version-state.ts +19 -0
  116. package/package.json +8 -4
  117. package/schema/ai-budget-ledger-event.schema.json +29 -0
  118. package/schema/ai-classification-stamp.schema.json +40 -0
  119. package/schema/ai-composite-policy-digest.schema.json +27 -0
  120. package/schema/ai-deployment-gate-decision.schema.json +38 -0
  121. package/schema/ai-gateway-key-lifecycle-event.schema.json +61 -0
  122. package/schema/ai-governance-decision.schema.json +23 -2
  123. package/schema/ai-metering-policy.schema.json +18 -0
  124. package/schema/ai-pricing-revision.schema.json +38 -0
  125. package/schema/ai-runtime-binding.schema.json +26 -0
  126. package/schema/ai-runtime-contract.schema.json +24 -2
  127. package/schema/ai-trace-event-v2.schema.json +41 -0
  128. package/schema/ai-verification-evidence.schema.json +1 -0
  129. package/schema/binding-classification-subject.schema.json +119 -0
  130. package/schema/deploy-request.schema.json +37 -2
  131. package/schema/deploy-response.schema.json +11 -1
  132. package/schema/promotion-request.schema.json +5 -1
  133. package/schema/promotion-response.schema.json +11 -1
  134. package/schema/sanitized-binding-evidence.schema.json +102 -0
@@ -0,0 +1,31 @@
1
+ {
2
+ "schema": "harbour.ai-trace-event/1.0",
3
+ "traceId": "trc_blocked123",
4
+ "requestId": "req_blocked123",
5
+ "tenantId": "fourier",
6
+ "appId": "support-assistant",
7
+ "environment": "production",
8
+ "versionId": "fourier#support-assistant#production#000124",
9
+ "policyDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
10
+ "requestedModel": "gpt-4.1-mini",
11
+ "governedModelAlias": "harbour/standard",
12
+ "outcome": "blocked",
13
+ "costMicroUsd": 0,
14
+ "latencyMs": 4,
15
+ "retryCount": 0,
16
+ "fallbackUsed": false,
17
+ "reservationId": "req_blocked123#budget",
18
+ "attempts": [],
19
+ "guardrailResults": [
20
+ {
21
+ "ruleId": "input-secret-pattern",
22
+ "detectorId": "input.secret_pattern",
23
+ "detectorVersion": "1.0.0",
24
+ "phase": "input",
25
+ "action": "BLOCK",
26
+ "result": "blocked"
27
+ }
28
+ ],
29
+ "contentCaptureStatus": "off",
30
+ "occurredAt": "2026-08-02T10:00:00Z"
31
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schema": "harbour.ai-budget-ledger-event/2.0",
3
+ "eventId": "ledger_000124_1",
4
+ "idempotencyKey": "reserve_000124",
5
+ "budgetScope": "fourier/support-assistant/production",
6
+ "period": "2026-08",
7
+ "eventType": "RESERVED",
8
+ "reservationId": "req_example123#budget",
9
+ "requestId": "req_example123",
10
+ "amountMicroUsd": 500,
11
+ "committedMicroUsdAfter": 10500,
12
+ "pricingRevisionDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
13
+ "eventDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
14
+ "occurredAt": "2026-08-10T10:00:00Z"
15
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schema": "harbour.ai-classification-stamp/1.0",
3
+ "stampId": "cls_000124",
4
+ "tenantId": "fourier",
5
+ "appId": "support-assistant",
6
+ "environment": "preview",
7
+ "versionId": "fourier#support-assistant#preview#000124",
8
+ "sourceRevision": "0123456789abcdef",
9
+ "status": "AVAILABLE",
10
+ "classification": "Yellow",
11
+ "classifierId": "harbour-source-classifier",
12
+ "classifierVersion": "1.0.0",
13
+ "sourceDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
14
+ "inventoryDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
15
+ "securityEvidenceDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
16
+ "evidenceDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
17
+ "stampDigest": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
18
+ "stampedAt": "2026-08-10T10:00:00Z"
19
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "input": {
3
+ "schema": "harbour.ai-composite-policy-digest/1.0",
4
+ "baselineDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
5
+ "classificationStampDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
6
+ "tenantPolicyDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
7
+ "applicationPolicyDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
8
+ },
9
+ "preimage": "harbour.ai-composite-policy-digest/1\nsha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nsha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\nsha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\nsha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\n-",
10
+ "digest": "sha256:b6cf8539c27e06d64213c564c40455d56303cbf30fd346253ea1842c7377d2a0"
11
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "schema": "harbour.ai-deployment-gate-decision/1.0",
3
+ "decisionId": "gate_000124_1",
4
+ "sequence": 1,
5
+ "tenantId": "fourier",
6
+ "appId": "support-assistant",
7
+ "environment": "preview",
8
+ "versionId": "fourier#support-assistant#preview#000124",
9
+ "sourceRevision": "0123456789abcdef",
10
+ "decision": "PASS",
11
+ "reasonCodes": [],
12
+ "classificationStampDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
13
+ "planDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
14
+ "policyDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
15
+ "evidenceDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
16
+ "decisionDigest": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
17
+ "decidedAt": "2026-08-10T10:05:00Z"
18
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "schema": "harbour.ai-trace-event/1.0",
3
+ "traceId": "trc_failed123",
4
+ "requestId": "req_failed123",
5
+ "tenantId": "fourier",
6
+ "appId": "support-assistant",
7
+ "environment": "production",
8
+ "versionId": "fourier#support-assistant#production#000124",
9
+ "callsiteFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
10
+ "policyDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
11
+ "routeRevision": "harbour/standard#3",
12
+ "requestedModel": "gpt-4.1-mini",
13
+ "governedModelAlias": "harbour/standard",
14
+ "provider": "openai",
15
+ "providerModel": "gpt-4.1-mini",
16
+ "outcome": "failed",
17
+ "priceRevision": "openai-gpt-4.1-mini-2026-08-01",
18
+ "costMicroUsd": 48,
19
+ "latencyMs": 31204,
20
+ "retryCount": 1,
21
+ "fallbackUsed": false,
22
+ "reservationId": "req_failed123#budget",
23
+ "attempts": [
24
+ {
25
+ "attempt": 1,
26
+ "provider": "openai",
27
+ "providerModel": "gpt-4.1-mini",
28
+ "priceRevision": "openai-gpt-4.1-mini-2026-08-01",
29
+ "outcome": "failed",
30
+ "usage": null,
31
+ "costMicroUsd": 0,
32
+ "latencyMs": 30001,
33
+ "errorCode": "provider_unavailable"
34
+ },
35
+ {
36
+ "attempt": 2,
37
+ "provider": "openai",
38
+ "providerModel": "gpt-4.1-mini",
39
+ "priceRevision": "openai-gpt-4.1-mini-2026-08-01",
40
+ "outcome": "failed",
41
+ "usage": { "inputTokens": 120, "outputTokens": 0 },
42
+ "costMicroUsd": 48,
43
+ "latencyMs": 1203,
44
+ "errorCode": "provider_server_error"
45
+ }
46
+ ],
47
+ "guardrailResults": [],
48
+ "contentCaptureStatus": "off",
49
+ "occurredAt": "2026-08-02T10:00:00Z"
50
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "schema": "harbour.ai-gateway-key-lifecycle-event/1.0",
3
+ "eventId": "keyevt_000124_2",
4
+ "sequence": 2,
5
+ "keyId": "0123456789abcdef0123456789abcdef",
6
+ "tenantId": "fourier",
7
+ "appId": "support-assistant",
8
+ "environment": "preview",
9
+ "versionId": "fourier#support-assistant#preview#000124",
10
+ "fromStatus": "PENDING",
11
+ "toStatus": "ACTIVE",
12
+ "cause": "ACTIVATION",
13
+ "secretRef": "aws-sm://harbour/ai/fourier/support-assistant/preview/versions/000124/gateway-key",
14
+ "eventDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
15
+ "occurredAt": "2026-08-10T10:03:00Z"
16
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schema": "harbour.ai-gateway-key-lookup/1.0",
3
+ "keyId": "0123456789abcdef0123456789abcdef",
4
+ "tenantId": "fourier",
5
+ "appId": "support-assistant",
6
+ "environment": "preview",
7
+ "versionId": "fourier#support-assistant#preview#000124",
8
+ "tokenPrefix": "hbr_test_",
9
+ "status": "ACTIVE",
10
+ "keyMac": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=",
11
+ "createdAt": "2026-08-02T09:59:00Z",
12
+ "activatedAt": "2026-08-02T10:00:00Z",
13
+ "expiresAt": "2026-09-01T10:00:00Z"
14
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "schema": "harbour.ai-governance-decision/1.0",
3
+ "phase": "PLAN",
4
+ "tenantId": "fourier",
5
+ "appId": "support-assistant",
6
+ "environment": "preview",
7
+ "versionId": "fourier#support-assistant#preview#000124",
8
+ "sourceRevision": "0123456789abcdef",
9
+ "decision": "PASS",
10
+ "interceptionPath": "DETERMINISTIC_ADAPTER",
11
+ "reasonCodes": [],
12
+ "uncoveredCallsiteFingerprints": [],
13
+ "inventoryDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
14
+ "policyDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
15
+ "runtimeContractDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
16
+ "interceptionPlan": [
17
+ {
18
+ "callSiteFingerprint": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
19
+ "sourcePath": "src/ai-client.ts",
20
+ "expectedSourceFileSha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
21
+ "strategy": "deterministic_adapter",
22
+ "allowedSyntaxKinds": ["ImportDeclaration", "NewExpression"],
23
+ "transformId": "google-genai-client-boundary",
24
+ "transformVersion": "1.0.0",
25
+ "runtimeShimName": "@harbour/gemini-compat",
26
+ "runtimeShimVersion": "1.0.0",
27
+ "runtimeShimDigest": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
28
+ }
29
+ ],
30
+ "interceptionPlanDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
31
+ "runtimeContract": {
32
+ "schema": "harbour.ai-runtime-contract/1.0",
33
+ "tenantId": "fourier",
34
+ "appId": "support-assistant",
35
+ "environment": "preview",
36
+ "versionId": "fourier#support-assistant#preview#000124",
37
+ "sourceRevision": "0123456789abcdef",
38
+ "mode": "enforce",
39
+ "gatewayBaseUrl": "https://ai.harbour.example/v1",
40
+ "gatewayKeySecretRef": "aws-sm://harbour/ai/fourier/support-assistant/preview/versions/000124/gateway-key",
41
+ "modelAliases": { "generation": "harbour/standard" },
42
+ "policyDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
43
+ "runtimeBinding": {
44
+ "schema": "harbour.ai-runtime-binding/1.0",
45
+ "platform": "aws_lambda",
46
+ "workloadIdentityRef": "iam-role://harbour/preview/support-assistant/000124",
47
+ "secretRef": "aws-sm://harbour/ai/fourier/support-assistant/preview/versions/000124/gateway-key",
48
+ "runtimeBindingDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
49
+ },
50
+ "requiredStrategies": ["deterministic_adapter"]
51
+ },
52
+ "decidedAt": "2026-08-02T10:00:00Z"
53
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "schema": "harbour.ai-callsite-inventory/1.0",
3
+ "tenantId": "fourier",
4
+ "appId": "support-assistant",
5
+ "environment": "preview",
6
+ "versionId": "fourier#support-assistant#preview#000124",
7
+ "sourceRevision": "0123456789abcdef",
8
+ "analyzerVersion": "ai-callsites/1.0",
9
+ "coverage": "complete_for_supported_sdks",
10
+ "scanStatus": "cybersecurity_scan_unavailable",
11
+ "callsites": [
12
+ {
13
+ "fingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
14
+ "path": "src/ai-client.ts",
15
+ "sourceFileSha256": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
16
+ "line": 18,
17
+ "language": "typescript",
18
+ "sdk": "openai",
19
+ "method": "responses.create",
20
+ "requestedModel": "gpt-4.1-mini",
21
+ "strategy": "deployment_injection",
22
+ "status": "detected",
23
+ "securityFindingIds": [],
24
+ "evidence": {
25
+ "fingerprint": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
26
+ "excerpt": "openai call via responses.create"
27
+ }
28
+ }
29
+ ]
30
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "schema": "harbour.ai-metering-policy/2.0",
3
+ "policyDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
4
+ "pricingRevisionDigests": ["sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"],
5
+ "reservationMode": "committed_exposure",
6
+ "policyDigestV2": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
7
+ "publishedAt": "2026-08-10T09:00:00Z"
8
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "schema": "harbour.ai-policy-snapshot/1.0",
3
+ "scope": {
4
+ "level": "application_environment",
5
+ "tenantId": "fourier",
6
+ "appId": "support-assistant",
7
+ "environment": "preview"
8
+ },
9
+ "revision": 3,
10
+ "publishedAt": "2026-08-02T10:00:00Z",
11
+ "contentDigest": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
12
+ "baselineDigest": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
13
+ "classificationMinimum": {
14
+ "classification": "Yellow",
15
+ "mappingDigest": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
16
+ },
17
+ "providers": [
18
+ {
19
+ "id": "openai-primary",
20
+ "provider": "openai",
21
+ "baseUrl": "https://api.openai.com/v1",
22
+ "credentialSecretRef": "aws-sm://harbour/nonprod/ai/providers/openai/primary",
23
+ "enabled": true
24
+ }
25
+ ],
26
+ "models": [
27
+ {
28
+ "id": "openai-gpt-4.1-mini",
29
+ "providerId": "openai-primary",
30
+ "providerModel": "gpt-4.1-mini",
31
+ "capabilities": ["generation"],
32
+ "approved": true,
33
+ "pricing": {
34
+ "revision": "openai-gpt-4.1-mini-2026-08-01",
35
+ "inputMicroUsdPerMillion": 400000,
36
+ "outputMicroUsdPerMillion": 1600000
37
+ }
38
+ }
39
+ ],
40
+ "routes": [
41
+ {
42
+ "alias": "harbour/standard",
43
+ "version": 3,
44
+ "capability": "generation",
45
+ "targets": [
46
+ { "modelId": "openai-gpt-4.1-mini", "priority": 0, "weight": 10000 }
47
+ ],
48
+ "retryCount": 1,
49
+ "timeoutMs": 30000
50
+ }
51
+ ],
52
+ "policies": [
53
+ {
54
+ "name": "default-generation",
55
+ "version": 2,
56
+ "maxRequestBytes": 2097152,
57
+ "maxInputTokens": 32000,
58
+ "maxOutputTokens": 4096,
59
+ "bufferedDelivery": false,
60
+ "permittedRequestFields": {
61
+ "temperature": true,
62
+ "maxOutputTokens": true,
63
+ "responseFormat": false,
64
+ "tools": true
65
+ },
66
+ "guardrails": [
67
+ {
68
+ "ruleId": "input-tool-name-allowlist",
69
+ "detectorId": "tool.name_allowlist",
70
+ "detectorVersion": "1.0.0",
71
+ "phase": "input",
72
+ "action": "BLOCK",
73
+ "parameters": {
74
+ "allowedTools": ["search_documents"]
75
+ }
76
+ },
77
+ {
78
+ "ruleId": "output-json-shape",
79
+ "detectorId": "output.json_schema",
80
+ "detectorVersion": "1.0.0",
81
+ "phase": "output",
82
+ "action": "BLOCK",
83
+ "parameters": {
84
+ "jsonSchema": {
85
+ "type": "object",
86
+ "additionalProperties": false,
87
+ "properties": {
88
+ "answer": { "type": "string", "maxLength": 4000 },
89
+ "citations": {
90
+ "type": "array",
91
+ "maxItems": 16,
92
+ "items": { "type": "string", "maxLength": 256 }
93
+ }
94
+ },
95
+ "required": ["answer"]
96
+ }
97
+ }
98
+ }
99
+ ]
100
+ }
101
+ ],
102
+ "limits": [
103
+ {
104
+ "name": "application-default",
105
+ "enabled": true,
106
+ "scope": "application",
107
+ "requestsPerMinute": 60,
108
+ "tokensPerMinute": 100000,
109
+ "monthlyBudgetMicroUsd": 100000000
110
+ }
111
+ ],
112
+ "retention": {
113
+ "captureMode": "BEST_EFFORT",
114
+ "retentionDays": 30,
115
+ "revealRoles": ["tenant-admin"]
116
+ }
117
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "schema": "harbour.ai-pricing-revision/2.0",
3
+ "revisionId": "openai-gpt-test-2026-08-10",
4
+ "provider": "openai",
5
+ "providerModel": "gpt-test",
6
+ "currency": "USD",
7
+ "dimensions": [
8
+ { "dimension": "tokens", "direction": "input", "unit": "token", "scale": 1000000, "microUsdPerScale": 100000 },
9
+ { "dimension": "tokens", "direction": "output", "unit": "token", "scale": 1000000, "microUsdPerScale": 200000 }
10
+ ],
11
+ "revisionDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
12
+ "effectiveAt": "2026-08-10T00:00:00Z",
13
+ "publishedAt": "2026-08-10T09:00:00Z"
14
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "schema": "harbour.ai-runtime-binding/1.0",
3
+ "platform": "aws_lambda",
4
+ "workloadIdentityRef": "iam-role://harbour/preview/support-assistant/000124",
5
+ "secretRef": "aws-sm://harbour/ai/fourier/support-assistant/preview/versions/000124/gateway-key",
6
+ "runtimeBindingDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
7
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "schema": "harbour.ai-runtime-contract/1.0",
3
+ "tenantId": "fourier",
4
+ "appId": "support-assistant",
5
+ "environment": "preview",
6
+ "versionId": "fourier#support-assistant#preview#000124",
7
+ "sourceRevision": "0123456789abcdef",
8
+ "mode": "observe",
9
+ "gatewayBaseUrl": "https://ai.harbour.example/v1",
10
+ "gatewayKeySecretRef": "aws-sm://harbour/ai/fourier/support-assistant/preview/versions/000124/gateway-key",
11
+ "modelAliases": {
12
+ "generation": "harbour/standard",
13
+ "embeddings": "harbour/embeddings"
14
+ },
15
+ "policyDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
16
+ "runtimeBinding": {
17
+ "schema": "harbour.ai-runtime-binding/1.0",
18
+ "platform": "aws_lambda",
19
+ "workloadIdentityRef": "iam-role://harbour/preview/support-assistant/000124",
20
+ "secretRef": "aws-sm://harbour/ai/fourier/support-assistant/preview/versions/000124/gateway-key",
21
+ "runtimeBindingDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
22
+ },
23
+ "requiredStrategies": ["deployment_injection"]
24
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schema": "harbour.sanitized-binding-evidence/1.0",
3
+ "tenantId": "fourier",
4
+ "appId": "support-copilot",
5
+ "environment": "preview",
6
+ "versionId": "fourier#support-copilot#preview#123456",
7
+ "sourceRef": "https://github.com/Fourier-Labs-AI/support-copilot",
8
+ "sourceRevision": "git-sha1:0123456789abcdef0123456789abcdef01234567",
9
+ "sourceRevisionDigest": "sha256:79520355eb30e88bb0c6656008dd301d8f3d7cef6c14a96882557f13f7c512d9",
10
+ "classificationDigest": "sha256:43622df1d8bc3660a160a120f9af896cfc9c98009547869895b47d4c61a29688",
11
+ "bindings": {
12
+ "LOG_LEVEL": {
13
+ "kind": "configuration",
14
+ "value": "debug"
15
+ },
16
+ "STRIPE_API_KEY": {
17
+ "kind": "secret",
18
+ "secretRef": "secretref://tenant/fourier/app/support-copilot/secret/STRIPE_API_KEY"
19
+ }
20
+ },
21
+ "requiredAiMappings": {
22
+ "anthropic-messages-v1": {
23
+ "mappingVersion": "1.0.0",
24
+ "providerId": "anthropic"
25
+ },
26
+ "openai-responses-v1": {
27
+ "mappingVersion": "1.0.0",
28
+ "providerId": "openai"
29
+ }
30
+ },
31
+ "sanitizedBindingDigest": "sha256:2cc57565f45a645f96060c046d27e313531f34ff7d8dc24732b5f85572ca12a8"
32
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "sourceRef": "https://github.com/Fourier-Labs-AI/support-copilot",
3
+ "sourceRevision": "git-sha1:0123456789abcdef0123456789abcdef01234567",
4
+ "preimage": "D27:harbour.source-revision/1.0\nS50:https://github.com/Fourier-Labs-AI/support-copilot49:git-sha1:0123456789abcdef0123456789abcdef01234567",
5
+ "digest": "sha256:79520355eb30e88bb0c6656008dd301d8f3d7cef6c14a96882557f13f7c512d9"
6
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "schema": "harbour.ai-trace-event/2.0",
3
+ "traceId": "trc_example123",
4
+ "requestId": "req_example123",
5
+ "policyDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
6
+ "outcome": "succeeded",
7
+ "usageLineItems": [
8
+ {
9
+ "attempt": 1,
10
+ "dimension": "tokens",
11
+ "direction": "input",
12
+ "quantity": 120,
13
+ "unit": "token",
14
+ "priceRevisionDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
15
+ "scale": 1000000,
16
+ "costMicroUsd": 12,
17
+ "provenance": "reported"
18
+ }
19
+ ],
20
+ "totalCostMicroUsd": 12,
21
+ "reservationId": "req_example123#budget",
22
+ "meteringStatus": "settled",
23
+ "occurredAt": "2026-08-10T10:00:00Z"
24
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "schema": "harbour.ai-trace-event/1.0",
3
+ "traceId": "trc_example123",
4
+ "requestId": "req_example123",
5
+ "tenantId": "fourier",
6
+ "appId": "support-assistant",
7
+ "environment": "production",
8
+ "versionId": "fourier#support-assistant#production#000124",
9
+ "callsiteFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
10
+ "policyDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
11
+ "routeRevision": "harbour/standard#3",
12
+ "requestedModel": "gpt-4.1-mini",
13
+ "governedModelAlias": "harbour/standard",
14
+ "provider": "openai",
15
+ "providerModel": "gpt-4.1-mini",
16
+ "outcome": "succeeded",
17
+ "usage": { "inputTokens": 120, "outputTokens": 45 },
18
+ "priceRevision": "openai-gpt-4.1-mini-2026-08-01",
19
+ "costMicroUsd": 210,
20
+ "latencyMs": 842,
21
+ "retryCount": 0,
22
+ "fallbackUsed": false,
23
+ "reservationId": "req_example123#budget",
24
+ "attempts": [
25
+ {
26
+ "attempt": 1,
27
+ "provider": "openai",
28
+ "providerModel": "gpt-4.1-mini",
29
+ "priceRevision": "openai-gpt-4.1-mini-2026-08-01",
30
+ "outcome": "succeeded",
31
+ "usage": { "inputTokens": 120, "outputTokens": 45 },
32
+ "costMicroUsd": 210,
33
+ "latencyMs": 842
34
+ }
35
+ ],
36
+ "guardrailResults": [],
37
+ "contentCaptureStatus": "captured",
38
+ "contentRef": "s3://harbour-ai-evidence/fourier/support-assistant/trc_example123.enc",
39
+ "retentionExpiresAt": "2026-09-01T10:00:00Z",
40
+ "occurredAt": "2026-08-02T10:00:00Z"
41
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schema": "harbour.ai-transform-event/1.0",
3
+ "tenantId": "fourier",
4
+ "appId": "support-assistant",
5
+ "environment": "preview",
6
+ "versionId": "fourier#support-assistant#preview#000124",
7
+ "sourceRevision": "0123456789abcdef",
8
+ "workspace": {
9
+ "bucket": "harbour-deployment-workspaces",
10
+ "key": "fourier/support-assistant/000124/source.tgz",
11
+ "sha256": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
12
+ "size": 1024
13
+ },
14
+ "inventoryDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
15
+ "policyDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
16
+ "runtimeContractDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
17
+ "interceptionPlanDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
18
+ "entries": [
19
+ {
20
+ "callSiteFingerprint": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
21
+ "sourcePath": "src/ai-client.ts",
22
+ "expectedSourceFileSha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
23
+ "strategy": "deterministic_adapter",
24
+ "transformId": "google-genai-client-boundary",
25
+ "transformVersion": "1.0.0",
26
+ "allowedSyntaxKinds": ["CallExpression", "ImportDeclaration", "NewExpression"],
27
+ "runtimeShimName": "@harbour/gemini-compat",
28
+ "runtimeShimVersion": "1.0.0",
29
+ "runtimeShimDigest": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schema": "harbour.ai-transform-result/1.0",
3
+ "workspace": {
4
+ "bucket": "harbour-deployment-workspaces",
5
+ "key": "fourier/support-assistant/000124/ai-derived.tgz",
6
+ "sha256": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
7
+ "size": 1030
8
+ },
9
+ "interceptionPlanDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
10
+ "transformerVersion": "ai-interception/1.0.0",
11
+ "applied": [
12
+ {
13
+ "callSiteFingerprint": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
14
+ "transformId": "google-genai-client-boundary",
15
+ "transformVersion": "1.0.0",
16
+ "sourcePath": "src/ai-client.ts",
17
+ "beforeSha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
18
+ "afterSha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
19
+ "governedBoundaryFingerprint": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
20
+ "runtimeShimDigest": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schema": "harbour.ai-verification-evidence/1.0",
3
+ "tenantId": "fourier",
4
+ "appId": "support-assistant",
5
+ "environment": "preview",
6
+ "versionId": "fourier#support-assistant#preview#000124",
7
+ "sourceRevision": "0123456789abcdef",
8
+ "inventoryDigest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
9
+ "interceptionPlanDigest": "sha256:1111111111111111111111111111111111111111111111111111111111111111",
10
+ "runtimeContractDigest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
11
+ "policyDigest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
12
+ "runtimeBindingDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
13
+ "finalWorkspaceDigest": "sha256:2222222222222222222222222222222222222222222222222222222222222222",
14
+ "verifiedCallsiteFingerprints": ["sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"],
15
+ "appliedTransforms": [
16
+ {
17
+ "callSiteFingerprint": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
18
+ "governedBoundaryFingerprint": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
19
+ "transformId": "google-genai-client-boundary",
20
+ "transformVersion": "1.0.0",
21
+ "beforeSha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
22
+ "afterSha256": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
23
+ "runtimeShimDigest": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
24
+ }
25
+ ],
26
+ "endpointChecks": [
27
+ { "name": "gateway-smoke", "passed": true, "configurationMappingVersion": "openai-compatible/1.0.0" }
28
+ ],
29
+ "providerCredentialsAbsent": true,
30
+ "smokeTraceId": "trc_smoke123",
31
+ "evidenceDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
32
+ "verifiedAt": "2026-08-02T10:05:00Z"
33
+ }