Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
ec91eb3
docs: define MCP-compatible OAuth authorization boundary (#115)
seonghobae Aug 21, 2026
d2f4823
docs: harden MCP OAuth issuer contract
seonghobae Aug 21, 2026
c55f656
build(deps): bump step-security/harden-runner from 2.20.1 to 2.21.0 (…
dependabot[bot] Aug 21, 2026
9150e7c
build(deps): bump astral-sh/setup-uv from 9.0.0 to 10.0.1 (#106)
dependabot[bot] Aug 21, 2026
c167e4c
build(deps): bump uvicorn from 0.52.1 to 0.52.3 in /services/account_…
dependabot[bot] Aug 21, 2026
101e7ba
build(deps-dev): bump ruff from 0.16.1 to 0.16.3 in /services/account…
dependabot[bot] Aug 21, 2026
43406e7
build(deps-dev): bump typing-inspection from 0.4.2 to 0.4.4 in /servi…
dependabot[bot] Aug 21, 2026
e217b73
build(deps): bump github/codeql-action/analyze from 4.37.6 to 4.37.7 …
dependabot[bot] Aug 21, 2026
4c7963b
build(deps): bump github/codeql-action/init from 4.37.6 to 4.37.7 (#111)
dependabot[bot] Aug 21, 2026
036eb5f
docs(ci): refresh setup-uv cache comment
seonghobae Aug 21, 2026
31dd486
test(ci): execute repository documentation contracts
seonghobae Aug 21, 2026
44c2adb
docs: expand ADRs 0001–0007 and rewrite buyer README (#104)
seonghobae Aug 21, 2026
e1ada50
fix: require exact federation re-observation
seonghobae Aug 21, 2026
49d2fb9
ci: pin documentation contract environment
seonghobae Aug 21, 2026
f2aeb90
fix: tolerate keycloak default provider fields
seonghobae Aug 21, 2026
567a4c9
fix: reuse exact state checks for federation reads
seonghobae Aug 21, 2026
ec34ac1
fix: handle masked federation client secrets
seonghobae Aug 21, 2026
1cb467b
merge: current main into account-unification lockfile resync lane
seonghobae Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ jobs:
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.12"
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
with:
# v9 changed this default to false; retain bounded cache usage.
# Keep cache pruning enabled to bound runner disk usage.
prune-cache: true
Comment thread
seonghobae marked this conversation as resolved.
- name: Install locked dependencies
run: uv sync --locked --extra dev
Expand All @@ -38,6 +38,9 @@ jobs:
run: uv run interrogate .
- name: Compile Python sources
run: uv run python -m compileall -q app tests tools
- name: Test repository documentation contracts
working-directory: ${{ github.workspace }}
run: uv run --locked --project services/account_unification --extra dev pytest tests/test_documentation_contract.py -q
- name: Test and enforce production coverage
run: |
uv run coverage run --branch --source=app -m pytest -q
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Initialize CodeQL
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
with:
languages: python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
10 changes: 5 additions & 5 deletions .github/workflows/hourly-product-development.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
patch_sha256: ${{ steps.package.outputs.patch_sha256 }}
steps:
- name: Harden runner and block undeclared egress
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
disable-telemetry: true
Expand Down Expand Up @@ -319,7 +319,7 @@ jobs:

- name: Set up the locked package runner
if: steps.gate.outputs.develop == 'true'
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
with:
prune-cache: true

Expand Down Expand Up @@ -639,7 +639,7 @@ jobs:
publish: ${{ steps.seal.outputs.publish }}
steps:
- name: Harden independent verification
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
disable-telemetry: true
Expand Down Expand Up @@ -670,7 +670,7 @@ jobs:
python-version: "3.12"

- name: Set up the independent locked package runner
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
with:
prune-cache: true

Expand Down Expand Up @@ -780,7 +780,7 @@ jobs:
pull-requests: read
steps:
- name: Harden publication
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
with:
egress-policy: block
disable-telemetry: true
Expand Down
4 changes: 4 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,10 @@ private rendered payload

Validation never fetches metadata or discovery documents. Deployment egress
policy and Keycloak perform remote interaction only after explicit apply.
Reconciliation compares desired observable fields exactly; the fixed Keycloak
mask for the known non-observable `clientSecret` field is the sole exception and
does not prove secret equality. Missing, changed, or unknown fields remain
drift.

### LDAP and Active Directory

Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,24 @@ Keep a Changelog, and releases use semantic versioning.

### Changed

- Federation PUT and apply now report `applied_to_keycloak: true` only after a
fresh live Keycloak identity-provider observation matches the desired
observable representation. Keycloak's fixed mask for the known
non-observable `clientSecret` field is accepted without claiming secret
equality; mutation or any other observation drift retains desired state for
retry.
- Buyer README and accepted ADRs 0001–0007 now describe Keyverse as a
standalone identity leaf/hub, point operators at published OIDC/OAuth
2.0, SAML, LDAP, and SCIM contracts, and cite independently opened
official records in `docs/REFERENCES.md`. OAuth 2.1 is labeled an IETF
Internet-Draft, not a final RFC.
- Updated the design-only MCP authorization contract to MCP Authorization
2026-07-28, RFC 9207 callback-issuer validation, and RFC 9068 JWT
access-token header, claim, signature, and algorithm rejection evidence;
runtime acceptance remains unimplemented.
- Added the product/technical gap baseline and its APA 7th doctoring record,
including the current exact-head PR/Issue inventory and explicit
`gap-not-claimed` runtime and release boundaries.
- Relying-party deployment controllers now send validated, secret-free metadata
to Keyverse desired-state PUT instead of applying client representations
directly to Keycloak; confidential credential placement remains a separate
Expand Down
3 changes: 2 additions & 1 deletion DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Keyverse already has strong feature-specific specifications, doctoring, federati
| Test strategy | [`docs/TEST_STRATEGY.md`](docs/TEST_STRATEGY.md) |
| Operability/recovery/release | [`docs/OPERABILITY.md`](docs/OPERABILITY.md) |
| Requirements/evidence traceability | [`docs/TRACEABILITY.md`](docs/TRACEABILITY.md) |
| Product and technical gap baseline | [`docs/product-technical-gap-baseline.md`](docs/product-technical-gap-baseline.md) and [`docs/doctoring/product-technical-gap-baseline.md`](docs/doctoring/product-technical-gap-baseline.md) |
| Architecture decisions | [`docs/adr/README.md`](docs/adr/README.md) |
| Federation onboarding | [`docs/federation-onboarding.md`](docs/federation-onboarding.md) |
| RP onboarding | [`docs/rp-onboarding.md`](docs/rp-onboarding.md) |
Expand All @@ -34,4 +35,4 @@ Keyverse already has strong feature-specific specifications, doctoring, federati
- **external-system** — Keycloak/ADFS/LDAP/external OIDC/HR/IGA behavior not implemented by Keyverse itself.
- **planned** — accepted target without executable implementation.

Open PR #72 OIDC RP claim mapper profile and PR #74 hourly GitHub API remediation remain active-PR until merged. Keyverse's current protected-main desired-state/reconciliation capabilities are documented independently from those changes.
Open PR #72 OIDC RP claim mapper profile and PR #74 hourly GitHub API remediation remain active-PR until merged. Keyverse's current protected-main desired-state/reconciliation capabilities are documented independently from those changes.
Loading
Loading