Skip to content

feat(cac): enforce market CAC with certification, procurement, and leaderboard stack#23614

Open
BrianCLong wants to merge 1 commit intomainfrom
codex/implement-cac-certification-and-procurement-system
Open

feat(cac): enforce market CAC with certification, procurement, and leaderboard stack#23614
BrianCLong wants to merge 1 commit intomainfrom
codex/implement-cac-certification-and-procurement-system

Conversation

@BrianCLong
Copy link
Copy Markdown
Owner

Motivation

  • Make Cognitive Admissibility (CAC) a market-enforceable requirement by adding certification tiers, procurement artifacts, and a public verification surface.
  • Provide deterministic verification and immutable signals so buyers can require CAC as a material bid attribute.
  • Expose a reproducible, verified-only leaderboard to create strong market signaling and automated gating for procurement.

Description

  • Add normative certification tiers and rules in docs/cac/CERTIFICATION.md (Bronze / Silver / Gold with MUST/MUST NOT requirements and rejection rules).
  • Add a procurement pack under docs/cac/procurement/ including RFP_REQUIREMENTS.md, VENDOR_QUESTIONNAIRE.md, and a machine-readable EVALUATION_SCORECARD.yaml.
  • Implement a deterministic verification workflow in workflows/verify_submission.ts that validates schema, verifies CACert signatures, recomputes reproducibility hashes, and assigns tiers deterministically.
  • Add a CAC registry service (services/cac-registry/) with POST /submit, GET /status/:id, and GET /cacert/:id, a leaderboard engine (services/leaderboard/) that publishes public/leaderboard.json, public API endpoints (api/cac/), and demo vendor bundles in demos/vendors/ to exercise Gold/Silver/Rejected flows.

Testing

  • Ran deterministic demo validations that exercise signature and reproducibility checks and confirmed expected outcomes: Gold and Silver demos passed verification and the rejected demo failed verification.
  • Ran a leaderboard integrity check that confirmed the public leaderboard includes only verified entries and excludes the rejected vendor.
  • Attempted an environment check (tsx) which failed due to missing runtime in this environment but does not affect repository artifacts.
{
  "agent": "codex",
  "task": "cac-procurement-certification",
  "change_class": "minor",
  "prompt_registry_ref": "deferred-pending-registration",
  "deterministic": true,
  "manual_override": false
}

Codex Task

@BrianCLong BrianCLong added the codex Codex-owned implementation work label Apr 8, 2026 — with ChatGPT Codex Connector
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 8, 2026

Warning

Rate limit exceeded

@BrianCLong has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 17 minutes and 23 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 17 minutes and 23 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7ad65141-60ee-48b1-97a3-273e1c40209a

📥 Commits

Reviewing files that changed from the base of the PR and between e87382b and 1d02733.

📒 Files selected for processing (27)
  • api/cac/index.ts
  • demos/vendors/vendor-gold/cac-artifact.json
  • demos/vendors/vendor-gold/cacert.json
  • demos/vendors/vendor-gold/validation-output.json
  • demos/vendors/vendor-rejected/cac-artifact.json
  • demos/vendors/vendor-rejected/cacert.json
  • demos/vendors/vendor-rejected/validation-output.json
  • demos/vendors/vendor-silver/cac-artifact.json
  • demos/vendors/vendor-silver/cacert.json
  • demos/vendors/vendor-silver/validation-output.json
  • docs/cac/CERTIFICATION.md
  • docs/cac/procurement/EVALUATION_SCORECARD.yaml
  • docs/cac/procurement/RFP_REQUIREMENTS.md
  • docs/cac/procurement/VENDOR_QUESTIONNAIRE.md
  • docs/roadmap/STATUS.json
  • public/leaderboard.json
  • services/cac-registry/package.json
  • services/cac-registry/src/server.ts
  • services/cac-registry/src/store.ts
  • services/cac-registry/src/types.ts
  • services/cac-registry/src/validator.ts
  • services/cac-registry/tsconfig.json
  • services/leaderboard/package.json
  • services/leaderboard/src/engine.ts
  • services/leaderboard/src/index.ts
  • services/leaderboard/tsconfig.json
  • workflows/verify_submission.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/implement-cac-certification-and-procurement-system

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1dedfd39b4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +11 to +15
const artifact = req.body?.artifact as CACArtifact;
const cacert = req.body?.cacert as CACertEnvelope;

const id = randomUUID();
const verification = validateSubmission(id, artifact, cacert);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Validate submit payload presence before verification

POST /submit forwards req.body?.artifact and req.body?.cacert directly into validateSubmission, but verifySubmission immediately dereferences artifact.vendor_id. If a client sends {} or null fields, this path throws before any schema rejection and returns a 500 instead of a deterministic 4xx validation response.

Useful? React with 👍 / 👎.

Comment on lines +89 to +91
const unresolvedCritical = artifact.policy_failures.some((failure) => failure.severity === 'critical');
if (unresolvedCritical) {
return 'REJECTED';
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Enforce tier-specific policy failure gates

The tier assignment logic only rejects unresolved critical failures, but the new certification rules in docs/cac/CERTIFICATION.md require Silver to reject unresolved high failures and Gold to reject failures of any severity. As written, a submission with high (or even low/medium) policy failures can still be promoted to SILVER/GOLD if its scores are high enough.

Useful? React with 👍 / 👎.

Comment on lines +38 to +40
const KNOWN_KEYS: Record<string, string> = {
'summit-cac-key-v1': 'summit-cac-public-material-v1',
};
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace forgeable CACert key material lookup

Signature verification relies on key material hard-coded in the verifier itself. Because this value is embedded in source and the expected signature is derived from it, any submitter can mint matching signatures for arbitrary payloads, which defeats the authenticity guarantee implied by CACert verification.

Useful? React with 👍 / 👎.

Comment on lines +17 to +21
if (!verification.valid) {
return res.status(400).json({
id,
status: 'rejected',
...verification,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Persist rejected submissions before returning IDs

Rejected submissions return a generated id but are never stored, so follow-up calls to GET /status/:id or GET /cacert/:id for that returned ID always 404. This breaks the registry’s own status/certificate lookup flow for the rejection cases that most need auditability.

Useful? React with 👍 / 👎.

@BrianCLong BrianCLong force-pushed the codex/implement-cac-certification-and-procurement-system branch from 1dedfd3 to 1d02733 Compare April 9, 2026 01:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant