Skip to content

feat(authorization): hierarchical PDP, start-login helper, and PATs - #103

Open
seonghobae wants to merge 9 commits into
mainfrom
cursor/authorization-plane-8585
Open

feat(authorization): hierarchical PDP, start-login helper, and PATs#103
seonghobae wants to merge 9 commits into
mainfrom
cursor/authorization-plane-8585

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Buyer-facing Keyverse authorization slice on main. It makes these six capabilities real as issuer-side contracts plus tests and docs, without restacking on open PRs #83, #100, or #101:

  1. Software-unit ACL (which relying party a subject may use)
  2. Menu-level ABAC + RBAC attributes and decisions
  3. SSO combination scopes (one Keyverse session, selected RP set)
  4. Higher-permission inheritance down the org tree (most-specific wins; default deny)
  5. App start-login / IdP-discovery helper (kc_idp_hint, no metadata fetch)
  6. Programmable application tokens hashed at rest, software-unit and API scoped

Tracks #2. Implements #102. Does not close #2 (cross-system SSO epic still includes live federation acceptance and remaining P5 work).

Boundary decisions

  • Orgmetra remains employment / org-tree source of record. Keyverse consumes an assignment snapshot (keyverse_subject, org_path, optional assignment_record_id) and does not copy the Orgmetra tree.
  • ADR-0008 is unchanged. Keyverse is the issuer/PDP of attributes and decisions. Each RP remains the PEP and must still validate issuer, audience, signature, expiry, and subject.
  • ADR-0009 is reserved for the unmerged LineageWeave role / org / workspace profile on PR Add account-derived LineageWeave RP profile #100. Hierarchical names are group_company, legal_entity, business_unit, team, person, and org_path.
  • Secrets and PATs never inherit. PATs are not a password or WebAuthn substitute.
  • Portable realm is untouched. Application RPs stay runtime desired state (fix(realm): reconcile application RPs at runtime #83 direction consumed, not restacked).

ADRs

ADR Change
0001–0008 Unchanged
0009 Reserved in the index for PR #100
0010 Hierarchical authorization plane
0011 App start-login helper
0012 Programmable application tokens

Head

Current head: 44fb43428eab0075b9e5ee114a5ade56bb18eec2

Hosted CI

Exact-head product CI on this SHA is green (run 32092028160):

  • account-unification-tests job 95575987666 — success
  • realm-config-validates job 95575987605 — success
  • compose-config-validates job 95575987627 — success

Predecessor 363b26c failed in account-unification-tests job 95575377973 (run 32091826557) at Install locked dependencies. uv sync --locked refused uv.lock because it still recorded coverage 7.15.2 and setuptools 83.0.0 after pyproject.toml moved to 7.15.4 and 84.0.0. This head only resynchronizes the lock to those already-reviewed pins.

Operator / app next action

See docs/authorization-onboarding.md:

  • RP starts federation with POST /federation/identity-providers:start-login, then adds PKCE locally and redirects to start_login_url.
  • PAT is minted with POST /application-tokens, stored in the application secret manager, and presented only to POST /application-tokens:verify.

Evidence still required

This PR does not claim production federation, login, or downstream PEP acceptance. Those remain controlled runtime evidence after IdP apply, confidential secret placement, and RP token validation.

Safety

No password authenticator, no unverified-email merge, no portable-realm application clients, no RP-environment secrets, no restack of #83 / #100 / #101. Draft remains draft.

Open in Web Open in Cursor 

Open in Devin Review

Summary by CodeRabbit

  • 새 기능
    • 계층형 조직·소프트웨어 단위·메뉴·SSO 조합 권한 부여 및 권한 결정 기능을 추가했습니다.
    • 로컬 IdP 정보를 기반으로 PKCE 로그인 시작 URL을 생성합니다.
    • 목적·API 범위·소프트웨어 단위로 제한된 애플리케이션 토큰의 발급, 검증, 폐기, 교체를 지원합니다.
  • 문서
    • 권한 온보딩, 운영 절차, 보안 정책 및 관련 아키텍처 문서를 추가·갱신했습니다.
  • 테스트
    • 권한 상속, ABAC/RBAC, 로그인 URL 보안, 토큰 수명주기와 실패 처리 검증을 확대했습니다.

Issue software-unit ACL, menu ABAC/RBAC, SSO combination scopes, and
org-path inheritance from Orgmetra assignment snapshots without copying
employment truth. Add a Keyverse-owned start-login helper and hashed
programmable application tokens. ADR-0008 remains the RP PEP boundary;
ADR-0009 stays reserved for the unmerged LineageWeave claim profile.

Tracks #2. Implements #102.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 11 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c11d694-3295-49b6-8b19-2c0c29280bcc

📥 Commits

Reviewing files that changed from the base of the PR and between d540515 and 9274d31.

📒 Files selected for processing (31)
  • ARCHITECTURE.md
  • CHANGELOG.md
  • README.md
  • deploy/bootstrap/bootstrap.example.yaml
  • deploy/keycloak/README.md
  • docs/ERD.md
  • docs/OPERABILITY.md
  • docs/TRD.md
  • docs/adr/0010-hierarchical-authorization-plane.md
  • docs/adr/0012-programmable-application-tokens.md
  • docs/authorization-onboarding.md
  • docs/doctoring/hierarchical-authorization-plane.md
  • docs/doctoring/programmable-application-tokens.md
  • docs/doctoring/start-login-helper.md
  • docs/federation-onboarding.md
  • docs/operations/authorization-plane.md
  • docs/papers/README.md
  • docs/papers/citations.bib
  • services/account_unification/app/application_tokens.py
  • services/account_unification/app/auth.py
  • services/account_unification/app/authorization_plane.py
  • services/account_unification/app/config.py
  • services/account_unification/app/main.py
  • services/account_unification/app/org_authorization.py
  • services/account_unification/app/start_login.py
  • services/account_unification/tests/test_application_tokens.py
  • services/account_unification/tests/test_auth.py
  • services/account_unification/tests/test_authorization_plane.py
  • services/account_unification/tests/test_config.py
  • services/account_unification/tests/test_org_authorization.py
  • services/account_unification/tests/test_start_login.py
📝 Walkthrough

Walkthrough

계층형 권한 평면, 로컬 IdP 기반 로그인 시작 헬퍼, 범위 제한 애플리케이션 토큰의 실행 로직과 테스트가 추가되었습니다. 관련 아키텍처, 온보딩, 운영, ADR 문서도 갱신되었습니다.

Changes

계층형 권한 평면

Layer / File(s) Summary
조직 경로 및 권한 결정
services/account_unification/app/org_authorization.py, services/account_unification/app/authorization_plane.py, services/account_unification/app/errors.py
조직 경로 상속, software-unit 및 메뉴 grant, ABAC/RBAC, SSO 조합 결정을 추가했습니다. 저장소 손상과 정책 오류는 fail-closed 방식으로 처리합니다.
권한 라우터 wiring 및 검증
services/account_unification/app/main.py, services/account_unification/tests/test_org_authorization.py, services/account_unification/tests/test_authorization_plane.py
권한 서비스를 애플리케이션 상태에 등록했습니다. CRUD 및 결정 API와 운영자 인증을 테스트합니다.

연합 로그인 시작 헬퍼

Layer / File(s) Summary
로컬 IdP 기반 URL 생성
services/account_unification/app/start_login.py, services/account_unification/app/main.py
활성 IdP 레지스트리만 조회하고 kc_idp_hint가 포함된 Keycloak authorization URL을 생성합니다. discovery 및 metadata URL 입력과 안전하지 않은 redirect URI를 거부합니다.
로그인 계약 검증
services/account_unification/tests/test_start_login.py, docs/federation-onboarding.md
단일·다중 IdP 선택, PKCE, 빈 레지스트리, 저장소 손상, 서비스 미준비 상태를 검증하고 온보딩 절차를 문서화합니다.

프로그래밍 가능한 애플리케이션 토큰

Layer / File(s) Summary
토큰 생명주기 및 검증
services/account_unification/app/application_tokens.py
토큰을 목적, software unit, API capability 및 수명으로 제한합니다. SHA-256 hash만 저장하고 plaintext는 발급 또는 회전 시 한 번만 반환합니다. 검증, 폐기, 회전, 감사 이벤트를 제공합니다.
토큰 계약 테스트
services/account_unification/tests/test_application_tokens.py
정상 발급·검증과 잘못된 형식, 만료, capability 거부, software-unit 불일치, 손상 데이터, 비밀번호 목적 거부를 검증합니다.

문서 및 설계 기록

Layer / File(s) Summary
아키텍처 및 데이터 소유권
ARCHITECTURE.md, docs/ERD.md, docs/PRD.md, docs/TRD.md, docs/UML.md
Keyverse의 grant, SSO combination scope, hash token 저장 범위와 Orgmetra 조직 원장 경계를 문서화했습니다.
온보딩 및 운영 절차
docs/authorization-onboarding.md, docs/operations/authorization-plane.md, docs/OPERABILITY.md, README.md, docs/rp-onboarding.md
권한 설정, 로그인 시작, 토큰 저장·검증·회전·폐기 절차를 추가했습니다.
ADR 및 검증 문서
docs/adr/*, docs/TEST_STRATEGY.md, docs/THREAT_MODEL.md, docs/TRACEABILITY.md, docs/doctoring/*, docs/papers/*
ADR-0009 예약 상태와 ADR-0010–0012를 등록했습니다. 테스트 범위, 위협 통제, 표준 근거 및 구현 추적성을 갱신했습니다.

Estimated code review effort: 5 (Critical) | ~120 minutes

Merge Risk: 🔴 Critical · up to d5405

The PR adds new authorization, login, and token-management endpoints, but the current head still permits unauthenticated token administration in direct router deployments and can redirect users to an arbitrary issuer; it also ignores software-unit access constraints, lacks tenant isolation in authorization keys and matching, and can leave token state inconsistent after failures. These are concrete security and authorization-integrity risks, so merge should be blocked until fixed.

Sequence Diagram(s)

권한 결정 흐름

sequenceDiagram
  participant Orgmetra
  participant Keyverse
  participant RelyingParty
  Orgmetra->>Keyverse: assignment snapshot 전달
  Keyverse->>Keyverse: grant 및 조직 경로 결정
  Keyverse-->>RelyingParty: authorization decision 반환
  RelyingParty->>RelyingParty: 로컬 enforcement 수행
Loading

로그인 시작 흐름

sequenceDiagram
  participant Application
  participant Keyverse
  participant Keycloak
  Application->>Keyverse: start-login 요청
  Keyverse->>Keyverse: 로컬 IdP registry 조회
  Keyverse-->>Application: authorization URL 반환
  Application->>Keycloak: PKCE authorization URL로 리디렉션
Loading

애플리케이션 토큰 흐름

sequenceDiagram
  participant Operator
  participant Keyverse
  participant Application
  Operator->>Keyverse: 토큰 발급 요청
  Keyverse-->>Operator: plaintext token 1회 반환
  Application->>Keyverse: 토큰 검증 요청
  Keyverse-->>Application: allow 또는 deny 반환
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Linked Issues check ❓ Inconclusive #2는 광범위한 SSO 로드맵이며, 이 PR은 관련 인가·로그인 시작·PAT 일부만 구현하므로 부분 이행의 기준을 확인할 수 없습니다. 이 기능의 직접 하위 이슈를 연결하거나, #2에 대한 부분 구현임을 정의하는 명시적 수용 기준을 추가하십시오.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 계층형 PDP, 로그인 시작 helper, PAT 추가라는 주요 변경을 정확하고 간결하게 요약합니다.
Out of Scope Changes check ✅ Passed 변경된 문서, 코드, 테스트는 PR에 명시된 인가 평면, 로그인 시작 helper, PAT 범위와 일치하며 무관한 변경은 확인되지 않습니다.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 158 functions across 10 files. (26 skipped: 26 unsupported.)
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/authorization-plane-8585

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.

cursoragent and others added 2 commits August 18, 2026 02:26
Cover omitted assignment snapshots, failed menu grant PUTs, and
policy errors on token verify so statement and branch coverage stay
at 100% on the authorization slice.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
Hosted account-unification-tests failed at uv sync --locked because
uv.lock still recorded coverage 7.15.2 and setuptools 83.0.0 after
pyproject.toml moved to 7.15.4 and 84.0.0. Refresh the lock metadata
only so CI can install the already-reviewed pins.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@seonghobae
seonghobae marked this pull request as ready for review August 18, 2026 02:33
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 44fb43428eab0075b9e5ee114a5ade56bb18eec2.

  • Head SHA: 44fb43428eab0075b9e5ee114a5ade56bb18eec2

  • Workflow run: 32095234736

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (12 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (12 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (21 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (21 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (4 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (4 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 44fb43428eab0075b9e5ee114a5ade56bb18eec2
  • Workflow run: 32095234736
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 44fb43428eab0075b9e5ee114a5ade56bb18eec2.

  • Head SHA: 44fb43428eab0075b9e5ee114a5ade56bb18eec2

  • Workflow run: 32095234736

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (12 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (12 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (21 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (21 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (4 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (4 files)"]
  R3 --> V3["targeted test run"]
Loading

@seonghobae

Copy link
Copy Markdown
Contributor Author

Please independently re-review PR 103 at exact current head 44fb434 against main. The current hosted checks are terminal-success except the known Strix failure; verify whether any current-head actionable changes remain, and do not self-approve or transfer predecessor coverage evidence.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Security evidence note for exact head 44fb434: the authorization grant and combination routes are mounted with the shared operator_auth_dependency in services/account_unification/app/main.py, and auth.py documents this as a coarse operator-admin boundary. actor_identity_id is persisted grant metadata, not an untrusted end-user identity extracted from the bearer request. The Strix PoC models User A/User B changing grants with different body identities but does not establish two distinct authenticated principals at this operator-only boundary. Please independently validate this trust-boundary interpretation and re-run or review the exact head; keep the failure blocking until validated.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact-head evidence update for 44fb434: local full pytest passed; Ruff, compileall, Interrogate 100%, branch coverage 3649 statements / 938 branches at 100%, uv build, and diff check passed. The remaining hosted failure is Strix run 32092025335/job 95576032571. Its report requests actor_identity_id ownership checks but also states the issue was already fixed, while the current routes are operator-admin gated by the shared operator_auth_dependency and actor_identity_id is grant/audit metadata. Keep the Strix failure blocking; independently validate this trust-boundary interpretation and do not transfer predecessor evidence.

Copy link
Copy Markdown
Contributor Author

@opencode-agent please re-review exact current head 44fb43428eab0075b9e5ee114a5ade56bb18eec2; current review evidence must be bound to this SHA. Revalidate the authorization trust boundary and coverage gate.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Please re-review exact current head 157b768. Addressed the current Strix authorization finding at the trust boundary: the authorization router now carries operator bearer authentication and privileged-path validation itself, so direct embedding cannot mount grant administration open; the application factory no longer supplies that router's only gate. Added a RED→GREEN direct-embedding regression (unauthenticated 401, configured operator bearer 200). Preserved the documented coarse operator-admin model: actor_identity_id remains grant metadata, not an end-user principal. Local exact-head verification passed: complete pytest, Ruff, Interrogate 100%, compileall, 100% statement/branch coverage (3,651/938), uv build, and diff check. Re-run Strix and validate the trust-boundary interpretation on this exact SHA.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

Copy link
Copy Markdown
Contributor Author

@opencode-agent Please independently review exact current head 157b76893b32cda66fc586aa67ae72a30ac6b0d6 against main. Revalidate the operator-auth trust boundary and the prior Strix report against current source and Checks; bind any result to this SHA only, keep fail-closed treatment, and do not self-approve or merge.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review Please independently review exact current head 157b76893b32cda66fc586aa67ae72a30ac6b0d6 against main. Current hosted Checks have no terminal failure, with Strix and coverage evidence still pending. Revalidate the operator-auth trust boundary and prior Strix finding against current source; bind any result to this SHA only and do not treat pending Checks or prior review as approval.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review Please independently review exact current head d540515be66a6ca0aa538c61f977a57bf7a69fb8 against main. This head adds a RED regression for percent-encoded .well-known, metadataUrl, and discoveryEndpoint markers, normalizes public_issuer_url with stdlib unquote before the no-fetch policy check, and records the scan interpretation in doctoring. Local exact-head evidence: focused and full pytest passed, Ruff, Interrogate 100%, and 100% statement/branch coverage (3,651 statements / 938 branches). Bind any result to this SHA only; do not treat pending Checks or prior review as approval.

devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review Please independently review exact current head ec8a1a5210c84c854eff365934ac7c057cf477ed against main. Addressed the exact-head Devin finding: rotation now validates the replacement via _mint before revoking the active token. Added RED-to-GREEN HTTP regressions for forbidden purpose, empty capabilities, short lifetime, and overlong lifetime; invalid rotation now preserves the active credential. Updated ADR-0012, operations, doctoring, and CHANGELOG. Local exact-head evidence: full pytest, Ruff, Interrogate 100%, compileall, and 100% statement/branch coverage (3,651/938). Bind any result to this SHA only; do not treat pending Checks or prior review as approval.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Current-head review request: please re-review commit 1f8c8ac0d1a7afc4b71f0d59a8410de2bd18c394 (full head). This head includes: failure-compensating token issue/revoke/rotate writes with KV/audit injection tests; operator-authenticated embedded management router plus separate runtime service-token routes for start-login and PAT verification; tenant-qualified assignment/grant/combination matching and storage keys; software-unit ABAC enforcement; trusted public issuer binding; and synchronized ERD/ADR/doctoring/operations standards documentation. Please publish fresh review and Checks against this exact SHA.

Copy link
Copy Markdown
Contributor Author

Correction to the current-head request above: the exact full SHA is 1f8c8ac29e6860d289d4b54e9bd6e418bf731638. Please anchor fresh review and Checks to this SHA.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Follow-up review request for exact current head 5514a24d99b6822451fce6bf9c07266e9b21e16e.

Validated and pushed a focused fix for the current-head Devin finding: application-token rotation now fails closed with HTTP 409 when the predecessor is revoked, already rotated, or expired, so retired credentials cannot be revived. Added a parametrized regression covering all three states and updated CHANGELOG.md.

Local exact-head evidence before push:

  • uv run pytest -q: 443 passed
  • uv run ruff check app tests: passed
  • uv run interrogate app -v: 100%
  • uv run coverage run --branch -m pytest -q + coverage report --include='app/*' --fail-under=100: 3,708 statements / 954 branches, 100%
  • uv build: passed

Please re-review exact head 5514a24d99b6822451fce6bf9c07266e9b21e16e. No merge claim is made until current-head independent review, terminal required Checks, and latest-pusher protection are all satisfied.

Copy link
Copy Markdown
Contributor Author

Correction: the exact current head is 5514a24c1a3c56cc0a2a5c458ec4f8cb900c571a. The prior comment contained an incorrect expanded SHA; please use this exact GitHub-reported head for review and Checks correlation. No merge action is being taken while current-head review and required Checks are pending.

Copy link
Copy Markdown
Contributor Author

Exact current head update: 9274d3184443fba6c6294e08dff20734f3ae6fb4.

Added the required architecture, operations, ADR, and doctoring wording for the fixed rotation contract: only active, unexpired predecessors may rotate; revoked, rotated, and expired predecessors fail closed. This commit is documentation-only; git diff --check passed. The application code and regression suite are unchanged from the locally verified parent 5514a24c1a3c56cc0a2a5c458ec4f8cb900c571a. Please bind fresh review and Checks to 9274d3184443fba6c6294e08dff20734f3ae6fb4.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Please submit a fresh independent review bound only to exact current head 9274d3184443fba6c6294e08dff20734f3ae6fb4. The current Devin review reports no issues, but no current formal approval is recorded; required Checks remain pending. Do not transfer predecessor approval, self-approve, or merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cross-system SSO: keyverse central IdP + federate external IdPs

2 participants