@yiaany/ghostapi 0.1.7 → 0.1.8
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.
- package/CHANGELOG.md +42 -2
- package/CONTRIBUTING.md +119 -117
- package/LICENSE +21 -21
- package/README.md +208 -185
- package/SECURITY.md +53 -37
- package/dist/actions/gateway.d.ts +179 -0
- package/dist/actions/gateway.js +514 -0
- package/dist/actions/gateway.js.map +1 -0
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.js +2 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/ai/aiClient.js +4 -4
- package/dist/ai/aiClient.js.map +1 -1
- package/dist/ai/aiGenerator.d.ts +2 -2
- package/dist/ai/aiGenerator.js +21 -72
- package/dist/ai/aiGenerator.js.map +1 -1
- package/dist/ai/prompts.js +51 -51
- package/dist/ai/prompts.js.map +1 -1
- package/dist/approvals/approvalInbox.d.ts +150 -0
- package/dist/approvals/approvalInbox.js +412 -0
- package/dist/approvals/approvalInbox.js.map +1 -0
- package/dist/approvals/index.d.ts +2 -0
- package/dist/approvals/index.js +2 -0
- package/dist/approvals/index.js.map +1 -0
- package/dist/behavior/behaviorStore.d.ts +2 -0
- package/dist/behavior/behaviorStore.js +50 -46
- package/dist/behavior/behaviorStore.js.map +1 -1
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +58 -14
- package/dist/cache/index.js.map +1 -1
- package/dist/cli/index.js +438 -58
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/openUrl.d.ts +10 -0
- package/dist/cli/openUrl.js +31 -0
- package/dist/cli/openUrl.js.map +1 -0
- package/dist/cli/parser.d.ts +155 -0
- package/dist/cli/parser.js +504 -2
- package/dist/cli/parser.js.map +1 -1
- package/dist/config/dataPaths.d.ts +31 -0
- package/dist/config/dataPaths.js +45 -0
- package/dist/config/dataPaths.js.map +1 -0
- package/dist/config/localConfig.d.ts +1 -2
- package/dist/config/localConfig.js +27 -21
- package/dist/config/localConfig.js.map +1 -1
- package/dist/config/serverConfig.d.ts +2 -0
- package/dist/config/serverConfig.js +8 -1
- package/dist/config/serverConfig.js.map +1 -1
- package/dist/contracts/contract.d.ts +76 -0
- package/dist/contracts/contract.js +603 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/credentials/credentialBroker.d.ts +207 -0
- package/dist/credentials/credentialBroker.js +588 -0
- package/dist/credentials/credentialBroker.js.map +1 -0
- package/dist/credentials/index.d.ts +2 -0
- package/dist/credentials/index.js +2 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/dashboard/app.js +685 -615
- package/dist/dashboard/index.html +13 -7
- package/dist/dashboard/styles.css +349 -349
- package/dist/egress/capabilities.d.ts +32 -0
- package/dist/egress/capabilities.js +165 -0
- package/dist/egress/capabilities.js.map +1 -0
- package/dist/egress/linuxBootstrap.d.ts +1 -0
- package/dist/egress/linuxBootstrap.js +121 -0
- package/dist/egress/linuxBootstrap.js.map +1 -0
- package/dist/egress/run.d.ts +18 -0
- package/dist/egress/run.js +305 -0
- package/dist/egress/run.js.map +1 -0
- package/dist/errors/errorEngine.d.ts +2 -2
- package/dist/errors/errorEngine.js +3 -40
- package/dist/errors/errorEngine.js.map +1 -1
- package/dist/evals/evals.d.ts +126 -0
- package/dist/evals/evals.js +466 -0
- package/dist/evals/evals.js.map +1 -0
- package/dist/evals/index.d.ts +2 -0
- package/dist/evals/index.js +2 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evidence/index.d.ts +2 -0
- package/dist/evidence/index.js +2 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/report.d.ts +143 -0
- package/dist/evidence/report.js +556 -0
- package/dist/evidence/report.js.map +1 -0
- package/dist/fault/faultLab.d.ts +5 -4
- package/dist/fault/faultLab.js +66 -24
- package/dist/fault/faultLab.js.map +1 -1
- package/dist/index.d.ts +46 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/inventory/analysis.d.ts +12 -0
- package/dist/inventory/analysis.js +457 -0
- package/dist/inventory/analysis.js.map +1 -0
- package/dist/inventory/index.d.ts +5 -0
- package/dist/inventory/index.js +4 -0
- package/dist/inventory/index.js.map +1 -0
- package/dist/inventory/inventoryController.d.ts +53 -0
- package/dist/inventory/inventoryController.js +1044 -0
- package/dist/inventory/inventoryController.js.map +1 -0
- package/dist/inventory/types.d.ts +579 -0
- package/dist/inventory/types.js +787 -0
- package/dist/inventory/types.js.map +1 -0
- package/dist/landing/assets/index-CxWsopzP.css +1 -0
- package/dist/landing/assets/index-DZlpyhqd.js +55 -0
- package/dist/landing/assets/index-Dk-Xezs3.js +55 -0
- package/dist/landing/index.html +15 -15
- package/dist/ledger/actionLedger.d.ts +125 -0
- package/dist/ledger/actionLedger.js +594 -0
- package/dist/ledger/actionLedger.js.map +1 -0
- package/dist/ledger/index.d.ts +2 -0
- package/dist/ledger/index.js +2 -0
- package/dist/ledger/index.js.map +1 -0
- package/dist/mcp/server.js +4 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/policy/index.d.ts +3 -0
- package/dist/policy/index.js +2 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/policy.d.ts +14 -0
- package/dist/policy/policy.js +282 -0
- package/dist/policy/policy.js.map +1 -0
- package/dist/policy/types.d.ts +52 -0
- package/dist/policy/types.js +2 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/productTelemetry/index.d.ts +16 -0
- package/dist/productTelemetry/index.js +142 -0
- package/dist/productTelemetry/index.js.map +1 -0
- package/dist/providers/conformance.d.ts +7 -0
- package/dist/providers/conformance.js +48 -0
- package/dist/providers/conformance.js.map +1 -0
- package/dist/providers/index.d.ts +4 -2
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/packs/resendPack.d.ts +2 -0
- package/dist/providers/packs/resendPack.js +147 -0
- package/dist/providers/packs/resendPack.js.map +1 -0
- package/dist/providers/packs/stripePack.d.ts +2 -0
- package/dist/providers/packs/stripePack.js +852 -0
- package/dist/providers/packs/stripePack.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -3
- package/dist/providers/registry.js +55 -4
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/resend.js +2 -11
- package/dist/providers/resend.js.map +1 -1
- package/dist/providers/runtime.d.ts +8 -0
- package/dist/providers/runtime.js +48 -0
- package/dist/providers/runtime.js.map +1 -0
- package/dist/providers/stripeWebhook.d.ts +13 -0
- package/dist/providers/stripeWebhook.js +50 -0
- package/dist/providers/stripeWebhook.js.map +1 -0
- package/dist/providers/types.d.ts +153 -0
- package/dist/proxy/cacheKey.js +3 -3
- package/dist/proxy/cacheKey.js.map +1 -1
- package/dist/proxy/providerDetector.d.ts +2 -7
- package/dist/proxy/providerDetector.js +4 -4
- package/dist/proxy/providerDetector.js.map +1 -1
- package/dist/proxy/proxyHandler.js +116 -12
- package/dist/proxy/proxyHandler.js.map +1 -1
- package/dist/proxy/requestNormalizer.d.ts +0 -1
- package/dist/proxy/requestNormalizer.js +2 -5
- package/dist/proxy/requestNormalizer.js.map +1 -1
- package/dist/reliability/costGovernance.d.ts +175 -0
- package/dist/reliability/costGovernance.js +515 -0
- package/dist/reliability/costGovernance.js.map +1 -0
- package/dist/reliability/index.d.ts +8 -0
- package/dist/reliability/index.js +5 -0
- package/dist/reliability/index.js.map +1 -0
- package/dist/reliability/reconciliation.d.ts +157 -0
- package/dist/reliability/reconciliation.js +522 -0
- package/dist/reliability/reconciliation.js.map +1 -0
- package/dist/reliability/runtimeHealth.d.ts +60 -0
- package/dist/reliability/runtimeHealth.js +356 -0
- package/dist/reliability/runtimeHealth.js.map +1 -0
- package/dist/reliability/slo.d.ts +131 -0
- package/dist/reliability/slo.js +375 -0
- package/dist/reliability/slo.js.map +1 -0
- package/dist/report/safetyReport.js +7 -3
- package/dist/report/safetyReport.js.map +1 -1
- package/dist/safety/index.d.ts +2 -0
- package/dist/safety/index.js +2 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/safetyController.d.ts +187 -0
- package/dist/safety/safetyController.js +477 -0
- package/dist/safety/safetyController.js.map +1 -0
- package/dist/scenarios/scenarioBundle.d.ts +75 -0
- package/dist/scenarios/scenarioBundle.js +750 -0
- package/dist/scenarios/scenarioBundle.js.map +1 -0
- package/dist/scenarios/scenarioStore.d.ts +1 -0
- package/dist/scenarios/scenarioStore.js +47 -32
- package/dist/scenarios/scenarioStore.js.map +1 -1
- package/dist/security/headerSanitizer.d.ts +2 -0
- package/dist/security/headerSanitizer.js +36 -1
- package/dist/security/headerSanitizer.js.map +1 -1
- package/dist/security/secrets.js +24 -4
- package/dist/security/secrets.js.map +1 -1
- package/dist/server/accessControl.d.ts +5 -0
- package/dist/server/accessControl.js +100 -0
- package/dist/server/accessControl.js.map +1 -0
- package/dist/server/createServer.d.ts +0 -5
- package/dist/server/createServer.js +9 -29
- package/dist/server/createServer.js.map +1 -1
- package/dist/server/eventsStore.d.ts +6 -1
- package/dist/server/eventsStore.js +83 -15
- package/dist/server/eventsStore.js.map +1 -1
- package/dist/server/routes.js +36 -10
- package/dist/server/routes.js.map +1 -1
- package/dist/server/sse.d.ts +2 -1
- package/dist/server/sse.js +15 -3
- package/dist/server/sse.js.map +1 -1
- package/dist/setup/setupGenerator.js +53 -6
- package/dist/setup/setupGenerator.js.map +1 -1
- package/dist/state/stateStore.d.ts +5 -0
- package/dist/state/stateStore.js +48 -62
- package/dist/state/stateStore.js.map +1 -1
- package/dist/storage/fileStore.d.ts +10 -0
- package/dist/storage/fileStore.js +131 -0
- package/dist/storage/fileStore.js.map +1 -0
- package/dist/teamControl/controlPlane.d.ts +255 -0
- package/dist/teamControl/controlPlane.js +918 -0
- package/dist/teamControl/controlPlane.js.map +1 -0
- package/dist/teamControl/deployment.d.ts +33 -0
- package/dist/teamControl/deployment.js +67 -0
- package/dist/teamControl/deployment.js.map +1 -0
- package/dist/teamControl/index.d.ts +4 -0
- package/dist/teamControl/index.js +3 -0
- package/dist/teamControl/index.js.map +1 -0
- package/dist/tests/testGenerator.js +4 -1
- package/dist/tests/testGenerator.js.map +1 -1
- package/dist/trust/index.d.ts +2 -0
- package/dist/trust/index.js +2 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/trust/trustLadder.d.ts +182 -0
- package/dist/trust/trustLadder.js +560 -0
- package/dist/trust/trustLadder.js.map +1 -0
- package/dist/worlds/index.d.ts +2 -0
- package/dist/worlds/index.js +2 -0
- package/dist/worlds/index.js.map +1 -0
- package/dist/worlds/worlds.d.ts +160 -0
- package/dist/worlds/worlds.js +491 -0
- package/dist/worlds/worlds.js.map +1 -0
- package/docs/assets/dashboard.png +0 -0
- package/docs/ci.md +49 -0
- package/docs/commercial/README.md +29 -0
- package/docs/commercial/data-inventory.md +36 -0
- package/docs/commercial/manual-invoicing.md +44 -0
- package/docs/commercial/metrics.md +51 -0
- package/docs/commercial/pricing.md +103 -0
- package/docs/commercial/privacy-policy-draft.md +41 -0
- package/docs/commercial/terms-topics-for-counsel.md +51 -0
- package/docs/design-partners/README.md +52 -0
- package/docs/design-partners/demo-narratives.md +33 -0
- package/docs/design-partners/design-partner-offer.md +39 -0
- package/docs/design-partners/discovery-questions.md +28 -0
- package/docs/design-partners/feedback-capture-template.md +48 -0
- package/docs/design-partners/icp-one-pager.md +43 -0
- package/docs/design-partners/onboarding-checklist.md +33 -0
- package/docs/design-partners/pilot-success-criteria.md +27 -0
- package/docs/design-partners/pricing-interview-script.md +18 -0
- package/docs/design-partners/telemetry-plan.md +48 -0
- package/docs/development/baseline.md +114 -0
- package/docs/development/onboarding-smoke.md +37 -0
- package/docs/development/verification-0.1.8.md +25 -0
- package/docs/enterprise-product-roadmap-ru.md +1879 -0
- package/docs/fundraising/README.md +87 -0
- package/docs/fundraising/data-room-checklist.md +72 -0
- package/docs/fundraising/demo-script.md +52 -0
- package/docs/fundraising/design-partners-50.md +74 -0
- package/docs/fundraising/launch-posts.md +37 -0
- package/docs/fundraising/metrics-and-evidence.md +30 -0
- package/docs/fundraising/roadmap-12-month.md +25 -0
- package/docs/fundraising/technical-due-diligence-index.md +37 -0
- package/docs/fundraising/yc-application.md +25 -0
- package/docs/github-actions.md +84 -0
- package/docs/hosted-pilot.md +111 -0
- package/docs/mcp.md +52 -50
- package/docs/operations/disaster-recovery-runbook.md +81 -0
- package/docs/operations/kill-switch-runbook.md +32 -0
- package/docs/policy.md +61 -0
- package/docs/providers/authoring-packs.md +175 -0
- package/docs/providers/stripe-core-pack.md +82 -0
- package/docs/release-checklist.md +83 -71
- package/docs/release-migration-and-rollback.md +63 -0
- package/docs/release-readiness.md +39 -0
- package/docs/security/action-gateway-threat-model.md +34 -0
- package/docs/security/action-ledger-incident-replay-threat-model.md +42 -0
- package/docs/security/approval-inbox-threat-model.md +35 -0
- package/docs/security/credential-broker-threat-model.md +52 -0
- package/docs/security/egress-threat-model.md +126 -0
- package/docs/security/inventory-threat-model.md +104 -0
- package/docs/security/kill-switch-budgets-threat-model.md +37 -0
- package/docs/security/reliability-threat-model.md +111 -0
- package/docs/security/trust-ladder-threat-model.md +33 -0
- package/docs/team-control-plane.md +72 -0
- package/docs/usage.md +571 -57
- package/examples/README.md +10 -0
- package/examples/agent-instructions/README.md +39 -39
- package/examples/ci-smoke/README.md +21 -0
- package/examples/ci-smoke/ghostapi.policy.yaml +22 -0
- package/examples/ci-smoke/package.json +9 -0
- package/examples/ci-smoke/production-egress.mjs +2 -0
- package/examples/ci-smoke/safe.mjs +17 -0
- package/examples/evals/README.md +24 -0
- package/examples/evals/retry-after.eval.json +52 -0
- package/examples/generic-rest/README.md +27 -27
- package/examples/github-fetch/README.md +35 -35
- package/examples/openai-streaming/README.md +16 -0
- package/examples/openai-streaming/streaming-tool-call.mjs +31 -0
- package/examples/policy/ghostapi.policy.yaml +27 -0
- package/examples/record-replay/README.md +19 -0
- package/examples/record-replay/replay-requests.json +22 -0
- package/examples/record-replay/stripe-checkout.har.json +30 -0
- package/examples/resend-node/README.md +22 -22
- package/examples/stripe-node/README.md +35 -29
- package/examples/stripe-node/checkout-flow.mjs +61 -0
- package/examples/twilio-node/README.md +21 -21
- package/examples/worlds/README.md +19 -0
- package/examples/worlds/subscription-recovery.mjs +12 -0
- package/package.json +27 -12
- package/dist/providers/stripe.d.ts +0 -2
- package/dist/providers/stripe.js +0 -15
- package/dist/providers/stripe.js.map +0 -1
- package/docs/assets/ghostapi-avatar.png +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Discovery Questions
|
|
2
|
+
|
|
3
|
+
Ask for concrete recent behavior before presenting GhostAPI. Do not ask all questions mechanically; follow the evidence.
|
|
4
|
+
|
|
5
|
+
1. Tell me about the last integration change written or materially changed by a coding agent.
|
|
6
|
+
2. Which external provider made that change risky: money, messages, source control, AI spend, webhooks, or something else?
|
|
7
|
+
3. What happened when the team tested it?
|
|
8
|
+
4. Has a test, script, or agent ever hit the wrong environment? What was the impact?
|
|
9
|
+
5. How do you currently prevent production credentials from reaching agents or CI jobs?
|
|
10
|
+
6. How would a reviewer know that a pull request never contacted production?
|
|
11
|
+
7. Which failure modes have caused the most rework: retries, idempotency, rate limits, timeouts, malformed responses, or webhooks?
|
|
12
|
+
8. Describe the last duplicate side effect, such as a payment, message, ticket, or deployment. Where did detection fail?
|
|
13
|
+
9. How do you validate webhook signatures today? Is that test mandatory before merge?
|
|
14
|
+
10. What must happen in CI before an agent-authored integration change can merge?
|
|
15
|
+
11. Which repositories and runners could support a Linux CI experiment?
|
|
16
|
+
12. Which provider integration would make a pilot meaningful within two weeks?
|
|
17
|
+
13. What would be unsafe to store in a testing tool or evidence artifact?
|
|
18
|
+
14. What information would security require before allowing a developer tool to observe test execution?
|
|
19
|
+
15. Who owns the budget if this removes a recurring risk or release delay?
|
|
20
|
+
16. What would make this a must-have rather than a nice-to-have?
|
|
21
|
+
17. What existing tool or workaround would GhostAPI need to displace or complement?
|
|
22
|
+
18. What proof would make you trust a claim that production egress was blocked?
|
|
23
|
+
19. If the pilot catches nothing, what result would still show operational value?
|
|
24
|
+
20. If the pilot catches a real defect or blocks egress, what procurement or budget step could follow?
|
|
25
|
+
|
|
26
|
+
## Capture Rules
|
|
27
|
+
|
|
28
|
+
Record direct quotes only with consent. Otherwise capture a sanitized summary, the workflow, severity, current workaround, decision owner, and next evidence-producing step. Never copy credentials, source code, raw traffic, customer data, or incident details into this repository.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Feedback Capture Template
|
|
2
|
+
|
|
3
|
+
Use this in a private founder system or a sanitized issue. Do not paste source code, traffic, credentials, tokens, personal data, or customer names unless independently authorized and stored in an approved system.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
## Validation Record
|
|
7
|
+
|
|
8
|
+
- Date: YYYY-MM-DD
|
|
9
|
+
- Record type: discovery | onboarding | CI run | bug caught | egress prevented | pricing | closeout
|
|
10
|
+
- Company segment and engineering size:
|
|
11
|
+
- Participant role:
|
|
12
|
+
- Workflow / integration:
|
|
13
|
+
- Coding-agent usage:
|
|
14
|
+
|
|
15
|
+
### Observed Facts
|
|
16
|
+
|
|
17
|
+
- What actually ran or occurred:
|
|
18
|
+
- Evidence location / sanitized reference:
|
|
19
|
+
- Frequency / severity:
|
|
20
|
+
|
|
21
|
+
### User Interpretation
|
|
22
|
+
|
|
23
|
+
- Why it matters to them:
|
|
24
|
+
- Current workaround and cost:
|
|
25
|
+
- Exact quote (only if consented):
|
|
26
|
+
|
|
27
|
+
### Product Hypothesis Tested
|
|
28
|
+
|
|
29
|
+
- Hypothesis:
|
|
30
|
+
- Supported / rejected / inconclusive:
|
|
31
|
+
- Why:
|
|
32
|
+
|
|
33
|
+
### Commercial Signal
|
|
34
|
+
|
|
35
|
+
- Buyer / decision process:
|
|
36
|
+
- Budget or willingness-to-pay signal:
|
|
37
|
+
- Paid pilot / LOI status:
|
|
38
|
+
|
|
39
|
+
### Next Step
|
|
40
|
+
|
|
41
|
+
- Owner:
|
|
42
|
+
- Due date:
|
|
43
|
+
- Smallest evidence-producing action:
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Evidence Quality
|
|
47
|
+
|
|
48
|
+
Prefer a dated CI artifact, issue/PR reference, or buyer confirmation over a feature request. Mark a signal `inconclusive` when it is based on a hypothetical answer, a demo reaction, or an unverified claim.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ICP One-Pager
|
|
2
|
+
|
|
3
|
+
## Primary ICP
|
|
4
|
+
|
|
5
|
+
SaaS companies with 10-200 engineers that actively use AI coding agents and operate sensitive Stripe, OpenAI, GitHub, Twilio, Resend, webhook, or generic external integrations.
|
|
6
|
+
|
|
7
|
+
## Buyer And User
|
|
8
|
+
|
|
9
|
+
| Role | Job | Pain To Validate |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Head of Platform / Developer Productivity | Make agent-assisted development safe and repeatable | Cannot prove AI-written integration tests stayed away from production. |
|
|
12
|
+
| AppSec / AI governance lead | Reduce credential and external-action exposure | Agent workflows create new egress and secret-leak paths without enforceable evidence. |
|
|
13
|
+
| Engineering manager / CTO | Ship integrations without operational surprises | Retry, webhook, and idempotency bugs reach review or production too late. |
|
|
14
|
+
| AI engineer / SDET / senior developer | Test the code the agent produced | Mocks are incomplete, manual setup is slow, and failures are hard to reproduce in CI. |
|
|
15
|
+
|
|
16
|
+
## Trigger
|
|
17
|
+
|
|
18
|
+
- The team has had an agent, test, script, or integration contact a real provider unexpectedly.
|
|
19
|
+
- A payment, webhook, retry, or timeout defect escaped review.
|
|
20
|
+
- The team is writing AI-agent governance or CI policy and cannot produce a credible evidence artifact.
|
|
21
|
+
- A platform team is standardizing coding-agent workflows across repositories.
|
|
22
|
+
|
|
23
|
+
## Job To Be Done
|
|
24
|
+
|
|
25
|
+
When an AI coding agent creates or modifies an external integration, help the team run a deterministic local/CI verification that blocks unsafe egress and proves the relevant failure path was exercised, so reviewers can merge without handing the agent production credentials or trusting an unverifiable mock.
|
|
26
|
+
|
|
27
|
+
## Current Alternatives
|
|
28
|
+
|
|
29
|
+
- SDK base-URL overrides, test-mode keys, and manual reviewer discipline.
|
|
30
|
+
- Generic mocks, contract tests, or API virtualization.
|
|
31
|
+
- CI logs and informal screenshots.
|
|
32
|
+
- Restricting agents from integration work entirely.
|
|
33
|
+
|
|
34
|
+
## Disqualifiers
|
|
35
|
+
|
|
36
|
+
- No coding-agent use and no external integrations.
|
|
37
|
+
- The only need is a hosted dashboard or generic API mocking.
|
|
38
|
+
- The buyer expects host-level sandboxing on unsupported Windows/macOS hosts.
|
|
39
|
+
- The team cannot run a small local or Linux CI experiment.
|
|
40
|
+
|
|
41
|
+
## Qualification Signal
|
|
42
|
+
|
|
43
|
+
Prioritize a pilot only if the team can name one repository, one sensitive integration, one failure mode, and one merge/release workflow where evidence would change a decision.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Design-Partner Onboarding Checklist
|
|
2
|
+
|
|
3
|
+
## Before Kickoff
|
|
4
|
+
|
|
5
|
+
- [ ] Confirm the partner has authorized the named technical contact and repository experiment.
|
|
6
|
+
- [ ] Select one integration, one failure mode, and one merge/release workflow.
|
|
7
|
+
- [ ] Confirm no production credentials, code, raw traffic, customer data, or incident exports will be sent to GhostAPI.
|
|
8
|
+
- [ ] Confirm a supported Linux CI runner is available if enforcement evidence is required.
|
|
9
|
+
- [ ] State the success criterion, decision owner, and pilot end date.
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
- [ ] Run `ghostapi doctor --json` and save only the non-sensitive capability result.
|
|
14
|
+
- [ ] Create or review `ghostapi.policy.yaml`; default external network access remains denied.
|
|
15
|
+
- [ ] Use fake/local credentials and provider-shaped local endpoints.
|
|
16
|
+
- [ ] Choose one deterministic scenario: egress block, duplicate payment, or webhook signature validation.
|
|
17
|
+
- [ ] Run the selected test locally and create one sanitized evidence artifact.
|
|
18
|
+
- [ ] Add the CI job only after the local artifact is understood.
|
|
19
|
+
|
|
20
|
+
## Weekly Review
|
|
21
|
+
|
|
22
|
+
- [ ] Count the selected CI runs without uploading CI logs or payloads.
|
|
23
|
+
- [ ] Record whether the agreed scenario ran and whether the evidence changed a review decision.
|
|
24
|
+
- [ ] Capture a sanitized bug/egress outcome, if any.
|
|
25
|
+
- [ ] Ask the buyer whether the current evidence is worth paying for and why.
|
|
26
|
+
- [ ] Record one blocker, owner, and due date; avoid open-ended feature requests.
|
|
27
|
+
|
|
28
|
+
## Closeout
|
|
29
|
+
|
|
30
|
+
- [ ] Score the criteria in `pilot-success-criteria.md` from evidence.
|
|
31
|
+
- [ ] Separate observed facts from user opinions and founder hypotheses.
|
|
32
|
+
- [ ] Capture a paid-pilot / LOI / no-decision outcome and date.
|
|
33
|
+
- [ ] Delete any local pilot notes that contain unnecessary sensitive data.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Pilot Success Criteria
|
|
2
|
+
|
|
3
|
+
Agree on the rows below before setup. A successful pilot needs more than installation.
|
|
4
|
+
|
|
5
|
+
| Dimension | Minimum measurable signal | Source of truth |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| Activation | A team completes `init`, configures one policy/scenario, and produces a valid local or CI evidence artifact. | Sanitized artifact hash and dated owner confirmation. |
|
|
8
|
+
| Regular CI use | At least one selected workflow runs in CI weekly for two consecutive weeks. | CI run links or sanitized run-count export. |
|
|
9
|
+
| Enforcement value | The team can explain a merge/release decision changed by egress enforcement or evidence. | Buyer/developer closeout note. |
|
|
10
|
+
| Defect value | At least one real integration defect is caught before merge, or a documented absence of defects after exercising agreed failure paths. | Sanitized issue/PR reference and reproduction summary. |
|
|
11
|
+
| Willingness to pay | The buyer states a budget range, paid-pilot decision, or LOI decision with a date. | Pricing interview summary. |
|
|
12
|
+
|
|
13
|
+
## Guardrails
|
|
14
|
+
|
|
15
|
+
- A synthetic demo alone does not count as a real bug caught.
|
|
16
|
+
- An installed CLI without repeated CI use does not count as retention.
|
|
17
|
+
- A product claim without a dated source record does not satisfy this table.
|
|
18
|
+
- Do not claim prevented production egress unless the supported enforcement evidence proves the relevant run.
|
|
19
|
+
|
|
20
|
+
## Exit Decisions
|
|
21
|
+
|
|
22
|
+
| Outcome | Decision |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| Weekly CI use plus real buyer value | Continue the narrow CI/shared-scenario product path and offer paid pilot terms. |
|
|
25
|
+
| Strong local value but CI blocker | Fix only the blocker proven across partners; do not expand general cloud scope. |
|
|
26
|
+
| No recurring pain or no buyer | Stop/reshape the wedge before building billing or enterprise control-plane features. |
|
|
27
|
+
| Security/platform mismatch | Document the limitation and qualify a different environment; do not overclaim enforcement. |
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Pricing Interview Script
|
|
2
|
+
|
|
3
|
+
Run this after the buyer understands one concrete workflow and outcome. Do not present a price as validated market data.
|
|
4
|
+
|
|
5
|
+
1. What would it cost if this risk caused one escaped defect, production contact, or delayed release per quarter?
|
|
6
|
+
2. Who feels that cost and who owns the decision to change the workflow?
|
|
7
|
+
3. Which part has value: local simulation, enforced CI evidence, shared scenarios, policy control, or audit history?
|
|
8
|
+
4. Is the value tied more to protected repositories, protected agents, CI runs, provider accounts, or retained evidence?
|
|
9
|
+
5. What tool or internal effort would this replace or reduce?
|
|
10
|
+
6. Would you fund a time-bounded paid pilot if it met the written success criteria? Why or why not?
|
|
11
|
+
7. What procurement, security, or deployment constraints would block payment?
|
|
12
|
+
8. What price range would make this a fast team-level decision, a director-level decision, or an enterprise review?
|
|
13
|
+
9. What proof would you require before renewal or expansion?
|
|
14
|
+
10. If this caught a real defect before merge, what would have to be true for you to sign an LOI or convert to a paid pilot?
|
|
15
|
+
|
|
16
|
+
## Capture
|
|
17
|
+
|
|
18
|
+
Record the buyer role, stated value unit, price range if voluntarily offered, decision path, and date. Do not turn a polite reaction into willingness to pay. `No budget`, `needs more proof`, and `would use OSS only` are valid outcomes.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Privacy-First Product Telemetry Plan
|
|
2
|
+
|
|
3
|
+
## Principles
|
|
4
|
+
|
|
5
|
+
- Collection is off by default and requires `ghostapi telemetry enable` on the local machine.
|
|
6
|
+
- The implementation has no network transport, endpoint, cloud account, automatic upload, or background process.
|
|
7
|
+
- It never records source code, prompts, commands, request/response traffic, URLs, provider names, credentials, tokens, personal data, repository identity, machine identity, or full timestamps beyond local aggregate activity timing.
|
|
8
|
+
- `ghostapi telemetry disable` deletes the local aggregate. Users can inspect it at any time with `status` or `export`.
|
|
9
|
+
|
|
10
|
+
## Local Implementation
|
|
11
|
+
|
|
12
|
+
The bounded aggregate is stored at `.ghostapi/product-telemetry.json` (or `GHOSTAPI_DATA_DIR`) with owner-only permissions on POSIX. It contains four integer counters, up to eight ISO week labels, and optional activation/last-activity timestamps. Atomic writes and a local file lock prevent lost updates between cooperating GhostAPI processes. Malformed or unknown-field data fails closed, and a telemetry file observed as a symlink is rejected. This local store is not a security boundary against a same-user attacker able to race filesystem operations.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
ghostapi telemetry status
|
|
16
|
+
ghostapi telemetry enable
|
|
17
|
+
ghostapi telemetry export --json
|
|
18
|
+
ghostapi telemetry disable
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`export` is a local JSON print operation, not an upload feature. If a partner chooses to share a result, they should review and transfer only the exported aggregate through an approved channel.
|
|
22
|
+
|
|
23
|
+
## Event Schema
|
|
24
|
+
|
|
25
|
+
| Event | Recorded only after opt-in | Why |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| `init_completed` | Incrementing count | Measures setup starts, not activation. |
|
|
28
|
+
| `enforced_run_completed` | Incrementing count and first activation time | Measures completion of the supported enforcement workflow. |
|
|
29
|
+
| `evidence_generated` | Incrementing count and first activation time | Measures evidence creation, the earliest useful product outcome. |
|
|
30
|
+
| `eval_completed` | Incrementing count | Measures recurring verification behavior. |
|
|
31
|
+
|
|
32
|
+
## Metrics
|
|
33
|
+
|
|
34
|
+
| Metric | Definition | Interpretation |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| Activation | At least one `enforced_run_completed` or `evidence_generated` event. | A user reached a meaningful safety/evidence result. |
|
|
37
|
+
| Weekly active local project | At least one tracked event in an ISO week. | Directional local engagement only; it does not identify a team. |
|
|
38
|
+
| Four-week retention | At least two active weeks separated by 21+ days. | Requires partner-shared aggregate or another consented evidence source. |
|
|
39
|
+
| CI retention | Repeated selected CI workflow runs weekly. | Must come from a partner's sanitized CI evidence; the local counter does not prove CI. |
|
|
40
|
+
|
|
41
|
+
## What Is Deliberately Not Measured Yet
|
|
42
|
+
|
|
43
|
+
- Users, companies, seats, repositories, agents, providers, commands, source files, traffic, errors, exact scenario names, runtime duration, revenue, or raw defect details.
|
|
44
|
+
- Any server-side metric, cross-device identity, attribution, or automatic product analytics.
|
|
45
|
+
|
|
46
|
+
## Review Trigger
|
|
47
|
+
|
|
48
|
+
Revisit the plan only when a design partner explicitly asks for aggregate sharing or hosted reporting. Any networked telemetry proposal requires a new opt-in, schema review, data-retention policy, threat model, and explicit customer approval.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Development Baseline
|
|
2
|
+
|
|
3
|
+
Baseline captured on 2026-08-05 before product changes.
|
|
4
|
+
|
|
5
|
+
## Repository
|
|
6
|
+
|
|
7
|
+
- Working copy: `./repo`
|
|
8
|
+
- Remote: `https://github.com/yiaany/ghostapi.git` (repository identity metadata corrected on 2026-08-22; historical verification outcomes are unchanged)
|
|
9
|
+
- Branch: `main`
|
|
10
|
+
- Commit before baseline documentation: `f02d3e914c50ab6ade952aa38347b4e7ac4a35d8`
|
|
11
|
+
- Package: `@yiaany/ghostapi@0.1.7`
|
|
12
|
+
- License: MIT
|
|
13
|
+
|
|
14
|
+
## Environment
|
|
15
|
+
|
|
16
|
+
- Platform: Windows x64
|
|
17
|
+
- Git: `2.54.0.windows.1`
|
|
18
|
+
- Node.js: `26.4.0`
|
|
19
|
+
- npm: `11.17.0`
|
|
20
|
+
- pnpm: `11.12.0` (available but not used)
|
|
21
|
+
- Corepack: unavailable
|
|
22
|
+
- Required package manager: npm, selected from `package-lock.json` and the CI workflow
|
|
23
|
+
- Declared Node.js support: `>=20`
|
|
24
|
+
- CI environment: `ubuntu-latest`, Node.js 20
|
|
25
|
+
|
|
26
|
+
The local Node.js version satisfies the declared engine range but is newer than the version exercised by CI.
|
|
27
|
+
|
|
28
|
+
## Project Inventory
|
|
29
|
+
|
|
30
|
+
- Runtime: TypeScript, Node.js, Express, ESM
|
|
31
|
+
- Tests: Vitest with serial test-file execution
|
|
32
|
+
- Build: TypeScript compiler plus Vite landing-page build and static dashboard copy
|
|
33
|
+
- Providers: Stripe, Twilio, Resend, GitHub, Discord, OpenAI, and generic REST
|
|
34
|
+
- State: local files under `.ghostapi/`
|
|
35
|
+
- Interfaces: CLI, HTTP proxy/dashboard, and MCP stdio server
|
|
36
|
+
- CI: `.github/workflows/ci.yml` runs install, typecheck, tests, and build
|
|
37
|
+
- Release: manual checklist in `docs/release-checklist.md`; no automated publish workflow was found
|
|
38
|
+
|
|
39
|
+
## Verification Results
|
|
40
|
+
|
|
41
|
+
| Command | Result | Details |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| `npm ci` | PASS | Installed 263 packages from the lockfile. npm reported 11 audit findings and two esbuild install scripts pending allow-scripts review. |
|
|
44
|
+
| `npm run typecheck` | PASS | Strict TypeScript check completed without diagnostics. |
|
|
45
|
+
| `npm test` | PASS | 21 test files and 102 tests passed. |
|
|
46
|
+
| `npm run build` | PASS | TypeScript, landing page, and dashboard static assets built successfully. |
|
|
47
|
+
| `node dist/cli/index.js --help` | PASS | Built CLI printed its command reference. |
|
|
48
|
+
| `node dist/cli/index.js providers list` | PASS | Printed seven registered providers. |
|
|
49
|
+
| `node dist/cli/index.js model get` | PASS | Printed `gpt-4o-mini`. |
|
|
50
|
+
| `npm pack --dry-run` | PASS | 188 files, 235.5 kB packed, 659.6 kB unpacked. No ignored local state or dependency directory was included. |
|
|
51
|
+
| Isolated packed-package install | PASS | Installed the generated tarball into a temporary project. The installed CLI, offline `/health`, and `/dashboard` smoke checks passed. |
|
|
52
|
+
| Formatter check | NOT RUN | No formatter script or repository formatter configuration exists. |
|
|
53
|
+
| Lint | NOT RUN | No lint script or repository lint configuration exists. |
|
|
54
|
+
| `npm audit` | FAIL | 11 findings: 7 moderate, 3 high, and 1 critical. |
|
|
55
|
+
| `npm audit --omit=dev` | FAIL | 5 runtime findings: 3 moderate and 2 high. |
|
|
56
|
+
|
|
57
|
+
The dependency tree was not updated during this baseline session. Audit remediation needs a controlled dependency session because one suggested full remediation upgrades Vite across a breaking major version.
|
|
58
|
+
|
|
59
|
+
## Findings
|
|
60
|
+
|
|
61
|
+
### P0
|
|
62
|
+
|
|
63
|
+
No confirmed secret disclosure, remote code execution, destructive production behavior, or live provider access by default was found during this baseline.
|
|
64
|
+
|
|
65
|
+
### P1
|
|
66
|
+
|
|
67
|
+
- Ambient `OPENAI_API_KEY` activates external LLM calls without a GhostAPI-specific opt-in. A local probe confirmed that `loadServerConfig` accepts the ambient key, and the configured path sends requests to the OpenAI API.
|
|
68
|
+
- Non-loopback bind is accepted without authentication. A local remote-bind probe confirmed an unauthenticated dashboard API mutation returned HTTP 200, and `/events` accepted a hostile browser origin with HTTP 200.
|
|
69
|
+
- Multiple tests recursively delete `.ghostapi/` relative to the repository working directory. Running the suite in a project with real GhostAPI state can erase user data.
|
|
70
|
+
- Persisted state and behavior updates use process-local locks and non-atomic whole-file writes. Multiple GhostAPI processes or a crash during a write can lose updates or leave corrupted JSON.
|
|
71
|
+
- Cache canonicalization sorts array elements. Requests whose array order is semantically meaningful can collide and receive an incorrect cached response.
|
|
72
|
+
|
|
73
|
+
### P2
|
|
74
|
+
|
|
75
|
+
- The root dependency tree has unresolved runtime and development advisories, including path traversal, host-confusion, SSRF-boundary bypass, ReDoS, and development-server findings. Exploitability in GhostAPI has not yet been established.
|
|
76
|
+
- `.ghostapi/events.jsonl` grows without a size or retention bound, and disk-write failures are silently ignored.
|
|
77
|
+
- CI tests only Linux on Node.js 20. The baseline was executed on Windows with Node.js 26.4.0, leaving other supported versions and operating systems uncovered.
|
|
78
|
+
- Formatting and linting are not automated.
|
|
79
|
+
- Generated tests hardcode `http://127.0.0.1:8080`, reducing portability in CI and parallel test environments.
|
|
80
|
+
- Package correctness depends on a prior build because no `prepack` verification prevents stale or missing `dist/` contents.
|
|
81
|
+
|
|
82
|
+
### P3
|
|
83
|
+
|
|
84
|
+
- `.env.example` describes `OPENAI_API_KEY` as future support even though the runtime currently consumes it.
|
|
85
|
+
- Release verification is documented but remains manual.
|
|
86
|
+
|
|
87
|
+
## Security Review Scope
|
|
88
|
+
|
|
89
|
+
The baseline inspected external network call sites, secret masking, request normalization, dashboard and SSE boundaries, local persistence, cache identity, tests that delete files, package contents, dependency advisories, and the release workflow.
|
|
90
|
+
|
|
91
|
+
The source tree contains one active external fetch target: the OpenAI chat-completions endpoint. Provider-shaped URLs in deterministic response bodies are data and are not outbound requests.
|
|
92
|
+
|
|
93
|
+
Deep fixes for authentication, LLM opt-in, data-directory isolation, retention, atomic persistence, cross-process locking, and dependency updates are intentionally deferred so the baseline remains a minimal documentation-only change.
|
|
94
|
+
|
|
95
|
+
## Reproduction
|
|
96
|
+
|
|
97
|
+
From `./repo`:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npm ci
|
|
101
|
+
npm run typecheck
|
|
102
|
+
npm test
|
|
103
|
+
npm run build
|
|
104
|
+
node dist/cli/index.js --help
|
|
105
|
+
node dist/cli/index.js providers list
|
|
106
|
+
node dist/cli/index.js model get
|
|
107
|
+
npm pack --dry-run
|
|
108
|
+
npm audit
|
|
109
|
+
npm audit --omit=dev
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Recommended Next Step
|
|
113
|
+
|
|
114
|
+
Run `sessions/02-security-and-reliability-baseline.md`. Prioritize explicit external-LLM opt-in, authentication for non-loopback control surfaces, isolated test data, bounded event persistence, atomic cross-process-safe state writes, and ordered cache-array semantics before expanding product surface area.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Onboarding Smoke Measurement
|
|
2
|
+
|
|
3
|
+
- Date: 2026-08-09
|
|
4
|
+
- Host: Windows, Node.js measured from the local runtime
|
|
5
|
+
- Package under test: source build plus tarball smoke for `@yiaany/ghostapi@0.1.7`
|
|
6
|
+
- Live provider credentials: not used
|
|
7
|
+
|
|
8
|
+
## Measured First Useful Result
|
|
9
|
+
|
|
10
|
+
Measured command sequence:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx @yiaany/ghostapi init
|
|
14
|
+
npx @yiaany/ghostapi doctor
|
|
15
|
+
npx @yiaany/ghostapi start --port <ephemeral>
|
|
16
|
+
curl-like POST /v1/customers with authorization: Bearer stripe_test_ghostapi
|
|
17
|
+
node examples/openai-streaming/streaming-tool-call.mjs
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Result on this host: `3.03` seconds from initialization start to successful local Stripe-shaped request plus OpenAI-shaped streaming completion.
|
|
21
|
+
|
|
22
|
+
This is a Windows local-provider-simulation measurement, not a Linux egress-enforcement measurement. `ghostapi run -- npm test` remains unsupported on Windows and macOS.
|
|
23
|
+
|
|
24
|
+
## Linux Enforcement Verification
|
|
25
|
+
|
|
26
|
+
- Date: 2026-08-09
|
|
27
|
+
- Host: Ubuntu WSL 2, Node.js `20.20.2`, working copy on the Linux filesystem rather than `/mnt/c`.
|
|
28
|
+
- Command: `ghostapi run -- npm test`.
|
|
29
|
+
- Result: `48.75` seconds; 42 test files passed, 232 tests passed, and 1 optional test skipped.
|
|
30
|
+
- Evidence: the exact run produced a PASS evidence report with a completed `linux-network-namespace` boundary, zero allowed or production egress attempts, no secret categories, and no warnings.
|
|
31
|
+
|
|
32
|
+
This is an enforced full-suite verification, not a time-to-first-value benchmark: it intentionally runs the entire test suite. The pinned GitHub workflow must still run on the exact release commit before publication.
|
|
33
|
+
|
|
34
|
+
## Automated Coverage
|
|
35
|
+
|
|
36
|
+
- `npm run smoke:package` builds a real npm tarball, installs it into a temporary project whose path contains spaces, runs `init`, `doctor --json`, and `providers inspect stripe`, and rejects prompt-pack/session/hosted artifacts plus live-secret-shaped package contents.
|
|
37
|
+
- Targeted tests cover CLI parsing, generated setup instructions, and machine-readable doctor output.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 0.1.8 Verification Record
|
|
2
|
+
|
|
3
|
+
- Date: 2026-08-22
|
|
4
|
+
- Package: `@yiaany/ghostapi@0.1.8`
|
|
5
|
+
- Scope: final local release verification, package/release evidence, hosted checks, Docker build, and native Linux enforcement
|
|
6
|
+
- Historical records: the 2026-08-05 baseline and 2026-08-09 onboarding smoke remain records of `0.1.7` and were not re-dated or relabeled
|
|
7
|
+
|
|
8
|
+
## Verification
|
|
9
|
+
|
|
10
|
+
This record is intentionally separate from the historical baseline and onboarding measurements. All results below passed against the final 0.1.8 working tree on 2026-08-22. GitHub Actions still must be observed on the exact final commit after that commit is pushed; local and WSL2 results do not substitute for that post-push check.
|
|
11
|
+
|
|
12
|
+
| Check | Result | Evidence |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| Root lint | PASS | `npm run lint`; configured Prettier check passed |
|
|
15
|
+
| Root typecheck | PASS | `npm run typecheck`; completed without diagnostics |
|
|
16
|
+
| Root tests | PASS | `npm test`; 55 files and 341 tests passed with zero skipped |
|
|
17
|
+
| Root build | PASS | `npm run build`; TypeScript and static dashboard builds completed |
|
|
18
|
+
| Package smoke | PASS | `npm run smoke:package`; packed artifact installed and its CLI, package export, generated project, doctor, and provider checks passed |
|
|
19
|
+
| Root dependency audits | PASS | Full `npm audit` and production-only `npm audit --omit=dev` both reported zero vulnerabilities |
|
|
20
|
+
| Hosted clean install and check | PASS | Fresh `npm ci`, then `npm run check`; hosted typecheck, 26 tests with zero skipped, and Bun build passed |
|
|
21
|
+
| Hosted dependency audit | PASS | `npm audit --audit-level=low`; zero vulnerabilities |
|
|
22
|
+
| Hosted Docker image | PASS | Local Docker image build completed, including frozen install, hosted typecheck, tests, Bun build, production dependency pruning, and non-root runtime image assembly |
|
|
23
|
+
| Hosted PostgreSQL migrations and quota race | PASS | Forward migrations `001` through `004` applied to PostgreSQL 17; two concurrent organization creates against a quota of one produced one success, one rejection, and one persisted organization |
|
|
24
|
+
| Native Ubuntu WSL2 Linux enforcement | PASS | Native Ubuntu WSL2 enforcement suite passed 12 of 12 tests with zero skipped, exercising the Linux namespace boundary rather than the Windows fallback path |
|
|
25
|
+
| GitHub Actions on exact final commit | PENDING POST-PUSH | Observe the pinned workflows on the exact final commit after push and retain the run/evidence links before publication; do not infer this result from the local verification |
|