feat: issue tenant-safe credential references - #9
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
seonghobae
left a comment
There was a problem hiding this comment.
Exact-head review request for 2099bd6: the credential projection is tenant-scoped, uses composite registration/decision integrity, requires completed status, and maps duplicate issuance to 409. Local Rust checks, actionlint, and real PostgreSQL 18.4 API smoke evidence passed. Please independently review this exact head and rerun the required workflow checks; no approval or protected merge bypass is requested.
seonghobae
left a comment
There was a problem hiding this comment.
Updated exact-head review request for a60ff94: the workflow now pins both validate and rust-kernel checkouts to the pull request head SHA. Please independently review this current head and use only its required check results for merge decisions.
seonghobae
left a comment
There was a problem hiding this comment.
Current-head review request for 10ec343. Re-verify the exact-head diff, required Checks, tenant/security boundaries, and any valid review findings after the shared Rust component-install fix. COMMENT only; no approval or protected-merge bypass is requested.
…to HEAD # Conflicts: # .github/workflows/quality.yml # CHANGELOG.md # README.md # docs/ARCHITECTURE.md # docs/product-technical-gap-baseline.md
|
Current-head review request for |
| decision_id=$(python3 -c 'import json, sys; print(json.load(open(sys.argv[1]))["completion_decision_id"])' "$RUNNER_TEMP/lms_completion_response.json") | ||
| test "$(psql --host 127.0.0.1 --username lms_kernel --dbname lms_kernel_test \ | ||
| --tuples-only --no-align --command "SELECT count(*) FROM completion_decision WHERE tenant_id = '$tenant_id' AND learner_id = '$learner_id'")" = '1' | ||
| credential_id=$(curl --fail --silent --show-error --request POST \ |
Summary
credential_recordprojection with composite registration/decision integrityPOST .../completion-decisions/{completion_decision_id}/credentialsfor issued external credential referencesBuyer-visible outcome
A learner who reaches a persisted, Rust-evaluated completed decision can receive one local credential reference without copying Open Badges/CLR payloads or collapsing learner, tenant, registration, and decision identity.
Evidence
actionlint .github/workflows/quality.ymlcargo +1.97.1 fmt --all -- --checkcargo +1.97.1 test --workspace --all-targets --locked(6 passed)cargo +1.97.1 clippy --workspace --all-targets --locked -- -D warningsRUSTDOCFLAGS='-D warnings' cargo +1.97.1 doc --workspace --no-deps --lockedcargo +1.97.1 build --bin lms_api --lockedNOSUPERUSER NOBYPASSRLSrole: 15 RLS policies; completion decision returnedcompleted; credential issuance returnedissued; duplicate issuance returned HTTP 409; cross-tenant issuance returned HTTP 40032440007668, SAST32440007637, Security32440007712, OpenCode32440007620, Noema32440007677, Strix32440007679, scheduler32440007631, Close Empty PR32440007617Scope boundary
This is a reference projection, not Open Badges/CLR conformance or a released external adapter. Assessment execution, versioned external contracts, browser E2E, revocation workflow, audit/outbox, and production coverage/load evidence remain explicit follow-up gaps.
Merge gate
The branch is stacked on PR #8. Please review exact current head
f22806a539a9e6fe3f1943013dd74f14e648ffdbagainst basecb649e9fa3ec15e408e91da94ce6c743217cd12cand rerun all required checks. Do not treat local or green CI checks as semantic approval.