Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
385 commits
Select commit Hold shift + click to select a range
2eee262
temp
anatolykoyfman Jun 26, 2026
43267a4
temp, fix tests
anatolykoyfman Jun 26, 2026
a422ac4
fix prompts + add tests
anatolykoyfman Jun 28, 2026
8d7d4eb
docs: redesign AIAC policy architecture — Policy Store, PCE, Policy M…
oblinder Jun 28, 2026
ee3b6ed
docs(aiac-agent): replace PolicyBuilder TBD with SharedApplyGraph and…
oblinder Jun 29, 2026
70bd6b2
refactor: rename aiac.pdp.library.configuration → aiac.idp.configurat…
oblinder Jun 29, 2026
bf745b4
docs: sync ARCHITECTURE-SUMMARY diagram and component table with PRD
oblinder Jun 29, 2026
7057171
docs(aiac-agent): replace shared apply node with Policy Rules Builder…
oblinder Jun 29, 2026
050646a
docs(aiac-agent): align PRD with Policy Rules Builder architecture
oblinder Jun 29, 2026
3de182a
docs(aiac-agent): remove stale shared module and LLM integration; ext…
oblinder Jun 29, 2026
19e6968
docs(aiac-agent): simplify file structure tree
oblinder Jun 29, 2026
863dd14
docs(aiac-agent): align main PRD with grill-me shared contract
oblinder Jun 29, 2026
6d61e4d
docs(aiac-agent): rewrite UC1, UC2, UC3 sub-PRDs per grill-me session
oblinder Jun 29, 2026
990b382
docs(aiac-agent): rename Service Policy Update sub-agent to Service P…
oblinder Jun 29, 2026
9d6e4b0
docs(aiac-agent): specify Policy Rules Builder interface
oblinder Jun 30, 2026
ba9ae0b
docs(aiac-agent): move PRB calls from Controller into producing sub-a…
oblinder Jun 30, 2026
03218be
docs(aiac): align idp-configuration-service spec with implementation
oblinder Jun 30, 2026
d715b89
feat(aiac): implement id-only hash/eq, remove set_service_type, updat…
oblinder Jun 30, 2026
df10fd7
minor pathe related fixes
anatolykoyfman Jun 30, 2026
b02f400
Merge branch 'aiac' of github.com:s-and-p-team/kagenti-extensions int…
anatolykoyfman Jun 30, 2026
bbafbd3
docs(aiac): add subject_roles to AgentPolicyModel and PCE algorithm
oblinder Jun 30, 2026
b9667dd
feat(aiac): add get_subjects_by_role, move IdP tests to test/idp/
oblinder Jun 30, 2026
8f1f718
Adding aiac/.gitignore
oblinder Jun 30, 2026
7dadcdf
test(aiac): add unit tests for Subject hashability and get_subjects_b…
oblinder Jun 30, 2026
d515332
feat(aiac): add aiac.policy.model package with PolicyRule, AgentPolic…
oblinder Jun 30, 2026
43c5f0e
feat(aiac): add policy store service with SQLite-backed FastAPI and u…
oblinder Jun 30, 2026
9a0c18d
feat(aiac): add policy store library and unit tests
oblinder Jun 30, 2026
fa4253f
new model struct
anatolykoyfman Jul 1, 2026
d270cad
new rego builder + new policy retuns
anatolykoyfman Jul 1, 2026
d3f55ab
docs: rename aiac-pdp-policy-service ClusterIP to aiac-pdp-policy-wri…
oblinder Jul 1, 2026
3389cc2
refactor(policy): remove IdP model hashability, key policy maps by st…
oblinder Jul 1, 2026
dc8f879
docs: Align PDP writer, PCE, and PRD with revised policy model spec
oblinder Jul 1, 2026
b6dfcb3
feat(aiac): add Rego package generator for PDP policy writer
oblinder Jul 1, 2026
7a3e05e
feat(aiac): add PDP Policy Writer OPA filesystem stub service
oblinder Jul 1, 2026
094d650
style: Sort imports in OPA policy-writer per ruff
oblinder Jul 1, 2026
c7f5d9c
Style: Fix ruff lint errors across src/aiac
oblinder Jul 1, 2026
8a4606e
remove old rego generation
anatolykoyfman Jul 1, 2026
bff3dea
merge
anatolykoyfman Jul 1, 2026
b129075
remove old
anatolykoyfman Jul 1, 2026
137fa5f
cleanup
anatolykoyfman Jul 1, 2026
0839b3a
feat(aiac): Add aiac.pdp.policy.library OPA HTTP client with unit tests
oblinder Jul 1, 2026
a384ab2
style(aiac): Add aiac-local ruff config and fix lint violations
oblinder Jul 1, 2026
76673a9
docs: Rework PDP policy-writer PRD to ID-only rego model; index integ…
oblinder Jul 1, 2026
e254369
docs: Add PDP Policy Writer (OPA) integration-test spec
oblinder Jul 1, 2026
48c6d33
refactor(aiac): Rewrite OPA Rego generator to ID-only model
oblinder Jul 1, 2026
ad0a971
test(aiac): Add PDP policy-writer OPA integration launcher (generate_…
oblinder Jul 1, 2026
efd8bb2
Refactor(aiac): Reset stale agent layer; finish pdp.policy.library cl…
oblinder Jul 2, 2026
5e64916
Docs(aiac): Update CLAUDE.md for the agent layer reset
oblinder Jul 2, 2026
12dcb1b
feat(aiac): Add Policy Computation Engine (aiac.policy.computation)
oblinder Jul 2, 2026
299b83e
docs(aiac): Move role flattening upstream of PRB; add PCE append/over…
oblinder Jul 3, 2026
72be811
feat(aiac): Add PCE override merge mode and drop role flattening
oblinder Jul 3, 2026
9c97d22
Refactor(aiac): Drop unused _BASE_URL constant in policy store library
oblinder Jul 5, 2026
98f6ffe
feat(aiac): Add agent Controller skeleton + flatten_role helper
oblinder Jul 5, 2026
a9a34a2
docs: Record resolved Policy Rules Builder internal design
oblinder Jul 5, 2026
3aa30fa
feat(aiac): Implement Policy Rules Builder phase 1
oblinder Jul 5, 2026
f036229
docs: add Keycloak access control analysis for U→A→T scenario with RB…
oblinder Jul 6, 2026
615286e
chore: gitignore aiac/inception/plans and remove stale aiac artefact …
oblinder Jul 6, 2026
e650bd3
docs: add OPA-as-PDP architecture sections to Keycloak access control…
oblinder Jul 6, 2026
13c47b7
fix(aiac): Filter services client-side and drop role→scopes endpoint
oblinder Jul 7, 2026
842de2a
feat(aiac): route PCE rules by kind and add outbound subject gate
oblinder Jul 7, 2026
26acebb
docs: Add policy-pipeline integration-test spec and index it in the PRD
oblinder Jul 8, 2026
fbbe9be
feat(aiac): add policy-pipeline integration test (5.3) with shared la…
oblinder Jul 8, 2026
0a69bc2
docs(aiac): record 5.3 launcher deviations in policy-pipeline spec
oblinder Jul 8, 2026
8544600
feat(aiac): mark AIAC-provisioned roles/scopes and filter Keycloak bu…
oblinder Jul 8, 2026
0d37879
feat(aiac): canonical client.type attribute for service typing with I…
oblinder Jul 8, 2026
8304b75
docs(aiac): make policy-pipeline scenario descriptions generic and ty…
oblinder Jul 8, 2026
5ab2fa1
docs(aiac): reframe policy-pipeline spec as asserting opa-eval pytest…
oblinder Jul 9, 2026
94d036a
test(aiac): add policy-pipeline OPA-eval integration test; align scen…
oblinder Jul 9, 2026
2f09954
docs(aiac): elaborate policy-pipeline roles; rename agent roles to so…
oblinder Jul 12, 2026
dc3b5b2
fix(aiac): scope PRB auditor to one access relationship per verdict
oblinder Jul 12, 2026
ff28299
fix(aiac): converge PRB output across explicit/abstract policy variants
oblinder Jul 12, 2026
0c85274
chore(aiac): gitignore policy-pipeline integration-test rego_out
oblinder Jul 12, 2026
9f8b61b
refactor(aiac): remove spiffe:// clientId type fallback in IdP models
oblinder Jul 12, 2026
dba699f
docs(aiac): label-based onboarding classification + hybrid MCP tool l…
oblinder Jul 12, 2026
dc696f0
chore(aiac): untrack and gitignore gh-issues drafts
oblinder Jul 12, 2026
1546c51
docs: Clarify UC1 own-vs-other roles/scopes and self-mapping invariant
oblinder Jul 12, 2026
1c08a03
feat(aiac): Service Provision sub-agent (UC1) + shared ServiceType
oblinder Jul 12, 2026
1b65c53
feat(aiac): Service Policy sub-agent (UC1) + shared run_upstream helper
oblinder Jul 12, 2026
7838ab0
refactor(aiac): Rename Service Policy sub-agent to Service Policy Bui…
oblinder Jul 12, 2026
7d56f1f
feat(aiac): Service Onboarding Orchestrator (UC1) — provision → polic…
oblinder Jul 12, 2026
89ec0da
refactor(aiac): Relocate run_upstream to project level and push retri…
oblinder Jul 12, 2026
e977da4
Fix(aiac): Reconcile PRB deny-by-default with description-based grants
oblinder Jul 12, 2026
25d54e2
Refactor(aiac): Factor generic policy into the PRB prompt
oblinder Jul 12, 2026
9be73e2
Docs(aiac): Add github-agent demo spec (source + issue A2A agent)
oblinder Jul 12, 2026
d893168
Docs(aiac): Spec UC-1 onboarding-pipeline integration test + github-t…
oblinder Jul 13, 2026
bbbd1cc
Test(aiac): Assert onboarding orchestrator invokes provision graph wi…
oblinder Jul 13, 2026
08113fc
Feat: Add minimal github-tool MCP demo server (UC-1 discovery)
oblinder Jul 13, 2026
3085e24
Feat(aiac): Add github-agent demo (GA-1…GA-9)
oblinder Jul 13, 2026
d5d0808
Feat(aiac): Add k8s deployment manifests Phase 1 — Interface Pod, Pol…
oblinder Jul 13, 2026
dd59149
Fix(aiac): Phase 1 k8s — Policy Store own ConfigMap, keycloak PDP Pol…
oblinder Jul 13, 2026
84cc2ae
fix: use localhost/...:local image names in AIAC k8s production manif…
oblinder Jul 13, 2026
560f921
docs: reorganise inception/ into docs/ — specs, issues, handoffs, gh-…
oblinder Jul 13, 2026
29fa093
Test(aiac): Add UC-1 onboarding-pipeline integration test (5.4)
oblinder Jul 13, 2026
16856df
Chore(aiac): Retarget github demo manifests to aiac-demo namespace
oblinder Jul 13, 2026
e999512
Docs: Add AIAC specification documents
oblinder Jul 13, 2026
2929605
Merge branch 'aiac' into aiac-phase1
oblinder Jul 13, 2026
6b764be
Chore(aiac): Defer aiac-init and phase-gated env vars from Phase 1 de…
oblinder Jul 14, 2026
c983a34
Chore(aiac): Retarget github demo manifests back to team1 namespace
oblinder Jul 14, 2026
dfbaaf7
Chore(aiac): Point github demo at existing kagenti realm
oblinder Jul 14, 2026
b51ebd5
Docs(aiac): Reframe uc1-onboarding integration test as a rung ladder
oblinder Jul 14, 2026
24767fc
Docs(aiac): Apply SPM/APM redesign across policy component specs
oblinder Jul 14, 2026
98ad2c3
feat(aiac): Add ServicePolicyModel + Role/Scope SPM fields (Wave 1)
oblinder Jul 15, 2026
195590e
Test(aiac): Verify idp Configuration surfaces SPM/APM fields (handoff…
oblinder Jul 15, 2026
27304c7
Feat(aiac): SPM-centric policy store (persist SPMs, drop APM persiste…
oblinder Jul 15, 2026
eaa8961
Feat(aiac): Source agent roles from client roles + populate SPM/APM f…
oblinder Jul 15, 2026
0096426
Refactor(aiac): Rewrite PCE to SPM-based order-independent engine
oblinder Jul 15, 2026
abd1b91
Docs(aiac): Refresh CLAUDE.md source/image map post handoffs 01-05
oblinder Jul 15, 2026
fa1957b
Test(aiac): Fix stale store DB env var name in policy-pipeline integr…
oblinder Jul 15, 2026
dc8e677
Fix(aiac): Populate agent-role kind/actorIds + scope.serviceId at IdP…
oblinder Jul 15, 2026
545bdc3
Docs(aiac): Reconcile IdP role-sourcing specs with two-source agent r…
oblinder Jul 15, 2026
f9fb74a
fix(demo): add protocol label and direct agent port for AgentCard aut…
oblinder Jul 15, 2026
6071eb8
Fix(aiac): Deploy OPA rego-file PDP writer in Phase 1, not Keycloak mock
oblinder Jul 15, 2026
14e7761
Fix(aiac): UC-1 onboarding pipeline fixes + rung-1 integration test
oblinder Jul 15, 2026
9c5cdee
Docs(aiac): Reconcile UC-1 specs with the onboarding pipeline fixes
oblinder Jul 15, 2026
5864c2c
Docs(aiac): Reconcile PCE spec/PRD with re-raise (was fire-and-forget…
oblinder Jul 15, 2026
8701788
Docs(aiac): Add Kagenti dev-guide link to CLAUDE.md external references
oblinder Jul 15, 2026
452aba6
test(aiac): Add UC-1 onboarding rung-2 integration test + shared harness
oblinder Jul 15, 2026
45a6169
Fix(aiac): Policy Store slash-safe service_id + SPIFFE-aware slugify
oblinder Jul 15, 2026
caa2978
Chore(aiac): Remove obsolete onboarding.old and test_llm_config.py.old
oblinder Jul 15, 2026
0eabfd0
Fix(aiac): Authenticate UC-1 tool MCP discovery with tool-audienced t…
oblinder Jul 15, 2026
7be21bf
docs(aiac): Reconcile IdP/library/UC-1 specs with discovery-token fix
oblinder Jul 15, 2026
97dec16
test(aiac): Capture UC-1 rego into per-rung project subfolders
oblinder Jul 15, 2026
f721b38
test(aiac): Nest policy-pipeline rego under rego_out/policy_pipeline
oblinder Jul 15, 2026
e02d1f9
Fix(aiac): Align UC-1 integration realm with deployed stack (kagenti)
oblinder Jul 15, 2026
ba29c03
Test(aiac): Rename policy-pipeline throwaway realm to aiac-pp
oblinder Jul 15, 2026
07cd7d6
chore(aiac): Remove unused test/fixtures directory
oblinder Jul 15, 2026
0ee4dcc
docs: Correct PDP responsibility wording in architecture summary
oblinder Jul 26, 2026
dff7f34
docs(aiac): Fix OPA/token-issuance contradiction in spec docs
oblinder Jul 26, 2026
d86c9d6
docs: Align PDP Policy Writer service name and library import path
oblinder Jul 26, 2026
591251c
docs: Fix module path, naming, and link inconsistencies in AIAC specs
oblinder Jul 26, 2026
f573c9d
docs(aiac): Fix dangling link to issue 6.2 in uc1-service-onboarding …
oblinder Jul 26, 2026
1f34234
fix: Exclude Keycloak default-roles composite from GET /roles
oblinder Jul 27, 2026
1be366e
fix(pdp): Drop dead agent_scopes from outbound Rego package
oblinder Jul 27, 2026
dc290f0
fix: Source Service Policy Builder candidates from get_services()/get…
oblinder Jul 27, 2026
3476833
test: Rewrite Service Policy Builder unit tests for ownership-based c…
oblinder Jul 27, 2026
00eb321
fix: Resolve Service Policy Builder focus by internal client UUID
oblinder Jul 27, 2026
93814b8
docs: Correct service_id identity to internal client UUID
oblinder Jul 27, 2026
4b1d5e2
chore: Drop onboarding.old/policy from ruff/pytest config
oblinder Jul 27, 2026
bc164b0
feat: Add Policy Store clear-all endpoint and clear store per UC-1 run
oblinder Jul 27, 2026
11eb02c
docs: Record RC-B per-scope two-gate AND + capability-match in PCE an…
oblinder Jul 27, 2026
5535e05
feat: Capability-match UC-1 outbound as per-scope two-gate AND
oblinder Jul 27, 2026
15bc220
test: Align 5.3 pipeline agent roles to UC-1 (source_operations / iss…
oblinder Jul 27, 2026
e0781e1
feat: Add PCE decommission (service offboard) + offboard route
oblinder Jul 28, 2026
4d76052
Merge origin/main into aiac-phase1-pr
oblinder Jul 28, 2026
8bdb5b3
chore: Fix pre-commit hook findings on PR diff files
oblinder Jul 28, 2026
05abdb2
Merge remote-tracking branch 'origin/main' into aiac-phase1-pr
oblinder Jul 29, 2026
6a019bf
fix(aiac): Address CodeRabbit review findings on UC-1 Phase 1
oblinder Jul 29, 2026
a9de8f9
Fix: Address second CodeRabbit pass on UC-1 Phase 1
oblinder Jul 29, 2026
4686e75
Fix: Resolve CodeQL security findings on UC-1 Phase 1
oblinder Jul 29, 2026
58160b0
Fix: Resolve CodeQL SSRF/path-injection and chromadb dependency-revie…
oblinder Jul 29, 2026
6ec6d5b
Fix: Bump json-repair to 0.60.1 to clear dependency-review DoS finding
oblinder Jul 29, 2026
3b74337
initial support for event broker
omerboehm Jul 30, 2026
11cc048
class files
omerboehm Jul 30, 2026
dd31fa4
opa enabale and diable scripts fix
anatolykoyfman Aug 3, 2026
9041072
docs: Add Policy Guardrails Agent component to AIAC spec
oblinder Aug 3, 2026
ad90b0a
Docs: Point AIAC issue tracking at GitHub and add engineering-skills …
oblinder Aug 3, 2026
eb85ee3
Docs: Point AIAC issue tracking at GitHub and add engineering-skills …
oblinder Aug 3, 2026
371ac40
plugin modifications to allow for outbound rego rules
anatolykoyfman Aug 4, 2026
b565000
Merge branch 'aiac-phase2' of github.com:s-and-p-team/cortex into aia…
anatolykoyfman Aug 4, 2026
e4601e8
opa-kind-driver.sh
anatolykoyfman Aug 4, 2026
62dca70
opa-kind-driver.sh
anatolykoyfman Aug 4, 2026
f17aee4
opa-kind-driver.sh
anatolykoyfman Aug 4, 2026
ce4997e
opa-kind-driver.sh
anatolykoyfman Aug 4, 2026
092853d
Merge remote-tracking branch 'origin/main' into aiac-phase2
oblinder Aug 5, 2026
da7910a
Merge remote-tracking branch 'origin/main' into aiac-phase2
oblinder Aug 5, 2026
0905561
Merge remote-tracking branch 'origin/main' into aiac-policy-guardrails
oblinder Aug 5, 2026
425a8b1
policy-guardrails hygiene
anatolykoyfman Aug 5, 2026
9266f60
Docs: Rename Policy Store to Policy Model Store in specs
oblinder Aug 5, 2026
bee62e6
docs: De-hardcode aiac CLAUDE.md structure in favor of live discovery
oblinder Aug 5, 2026
20a71eb
Refactor: Rename Policy Store to Policy Model Store
oblinder Aug 5, 2026
37bd3d0
docs: Align Policy Model Store boxes and reroute PCE→PDP arrow in PRD…
oblinder Aug 5, 2026
4efbe29
refactor: Rename kagenti to rossoctl across AIAC (realm, operator con…
oblinder Aug 5, 2026
411a4bc
refactor: Rename kagenti to rossoctl across AIAC (realm, operator con…
oblinder Aug 5, 2026
9401264
Test: Normalize kagenti fixture strings to rossoctl in test_models.py
oblinder Aug 5, 2026
9c9a56e
Test: Normalize kagenti fixture strings to rossoctl in test_models.py
oblinder Aug 5, 2026
aa2411e
Merge branch 'aiac-phase2' into aiac-policy-store-rename
oblinder Aug 5, 2026
84c5d44
Merge branch 'aiac-phase2' into aiac-policy-store-rename
oblinder Aug 5, 2026
b85f514
Docs: Rename remaining Policy Store references to Policy Model Store
oblinder Aug 5, 2026
109b723
Docs: Rename remaining Policy Store references to Policy Model Store
oblinder Aug 5, 2026
f1c7366
Merge branch 'aiac-policy-store-rename' into aiac-phase2
oblinder Aug 5, 2026
96b81c9
Merge branch 'aiac-policy-store-rename' into aiac-phase2
oblinder Aug 5, 2026
58f225e
Fix: Own copied files as non-root aiac user in Dockerfiles
oblinder Aug 5, 2026
fd575b5
Fix: Own copied files as non-root aiac user in Dockerfiles
oblinder Aug 5, 2026
9d3a36e
Feat: Add /health endpoint to AIAC Agent Controller
oblinder Aug 5, 2026
0c2470f
Feat: Add /health endpoint to AIAC Agent Controller
oblinder Aug 5, 2026
1c8372e
merge adjustments
anatolykoyfman Aug 6, 2026
34c789c
merge adjustments
anatolykoyfman Aug 6, 2026
9a57e28
Fix: Fix RETURN trap leak in install.sh, avoid port 8080 in INSTALL.md
oblinder Aug 9, 2026
199da88
Fix: Fix RETURN trap leak in install.sh, avoid port 8080 in INSTALL.md
oblinder Aug 9, 2026
4820725
Merge aiac-event-broker into aiac-phase2
oblinder Aug 9, 2026
970a631
Merge branch 'aiac-phase2' into aiac-phase2-event-broker
oblinder Aug 9, 2026
507698c
Merge branch 'aiac-phase2' into aiac-phase2-event-broker
oblinder Aug 9, 2026
c92cb89
Fix: Add LLM request timeout and make timeouts retryable in PRB
oblinder Aug 9, 2026
432a884
Feat: Add Keycloak env discovery + phase targets to uc1-onboarding demo
oblinder Aug 9, 2026
877004b
Merge branch 'aiac-phase2' into aiac-phase2-event-broker
oblinder Aug 9, 2026
d95218c
feat: Harden NATS consumer connection, offload handlers, fix role wil…
oblinder Aug 10, 2026
f6e13f5
docs: Correct Event Broker DLQ description to consumer-republish
oblinder Aug 10, 2026
33e3cef
docs: Align event-broker imagePullPolicy with other AIAC manifests
oblinder Aug 10, 2026
30d784a
docs: Add Keycloak SPI Listener component PRD (issue #69)
oblinder Aug 10, 2026
087d19b
refactor: Rework OPA Rego generator and remove legacy Keycloak writer
oblinder Aug 11, 2026
8013618
feat: Make PDP OPA policy writer emit AuthorizationPolicy CRs
oblinder Aug 11, 2026
316c8f7
feat: Complete wave-3 PDP OPA policy-writer rework
oblinder Aug 11, 2026
3b05cdb
docs: Rewrite pdp-policy-writer-opa spec for OPA CR-writer
oblinder Aug 12, 2026
2639f81
test: Rebuild OPA integration tests against live AuthBridge pipeline
oblinder Aug 12, 2026
f1e6ae4
Test: Fix UC1 outbound probe to use /mcp path and Accept header
oblinder Aug 12, 2026
677d103
Fix: Enable injectTools in opa-kind-enable.sh helm upgrade
oblinder Aug 12, 2026
591b433
Fix: Add app.kubernetes.io/name label to github-tool manifests
oblinder Aug 12, 2026
091c0bf
test: Surface raw outbound (code, body) on UC1 convergence timeout
oblinder Aug 12, 2026
24e855e
Fix: Harden UC-1 integration pod resolution against rolling-restart race
oblinder Aug 12, 2026
e2d37eb
Merge remote-tracking branch 'origin/main' into aiac-phase2-opa
oblinder Aug 12, 2026
bc5fdcf
Fix: Restore RELEASE_NAMESPACE override in opa-kind-enable bundle_url
oblinder Aug 12, 2026
2d1e26f
refactor: Rework OPA Rego generator and remove legacy Keycloak writer
oblinder Aug 11, 2026
2cec2a3
feat: Make PDP OPA policy writer emit AuthorizationPolicy CRs
oblinder Aug 11, 2026
6ba50bc
feat: Complete wave-3 PDP OPA policy-writer rework
oblinder Aug 11, 2026
2e532ef
docs: Rewrite pdp-policy-writer-opa spec for OPA CR-writer
oblinder Aug 12, 2026
0adb4fc
test: Rebuild OPA integration tests against live AuthBridge pipeline
oblinder Aug 12, 2026
f0bbb3f
Test: Fix UC1 outbound probe to use /mcp path and Accept header
oblinder Aug 12, 2026
7d96fc5
Fix: Enable injectTools in opa-kind-enable.sh helm upgrade
oblinder Aug 12, 2026
548ce3b
Fix: Add app.kubernetes.io/name label to github-tool manifests
oblinder Aug 12, 2026
42d919d
test: Surface raw outbound (code, body) on UC1 convergence timeout
oblinder Aug 12, 2026
fd3f288
Fix: Harden UC-1 integration pod resolution against rolling-restart race
oblinder Aug 12, 2026
e63f9b2
feat(sparc-service): add SPARC_LOG_REQUESTS and SPARC_STRIP_TOOL_ARG_…
vz-ibm Jul 19, 2026
9c9504f
fix(sparc-service): configure root logger so application log.info() o…
vz-ibm Jul 19, 2026
d9f2d0f
fix(sparc-service): address PR #738 review findings — Settings integr…
vz-ibm Aug 9, 2026
76d4623
build(deps): Bump actions/setup-python from 6.3.0 to 7.0.0 (#732)
dependabot[bot] Aug 10, 2026
ea751b0
build(deps): Bump actions/setup-go from 6.5.0 to 7.0.0 (#688)
dependabot[bot] Aug 10, 2026
7e17039
build(deps): Bump hadolint/hadolint-action from 3.3.0 to 3.4.0 (#731)
dependabot[bot] Aug 10, 2026
2be49b2
build(deps): Bump github/codeql-action/init from 4.37.0 to 4.37.4 (#735)
dependabot[bot] Aug 10, 2026
dc67b6a
Fix broken links described in issue 679 (#742)
esnible Aug 10, 2026
c83dac1
chore(sparc-service): bump agent-lifecycle-toolkit to 0.11.0
vz-ibm Aug 11, 2026
c489538
fix: port WatsonX reasoning-model patches from kagenti-extensions fork
vz-ibm Aug 3, 2026
db22f4c
fix: port remaining sparc-service patches (Dockerfile chown, SPARC_SK…
vz-ibm Aug 3, 2026
5225fa0
fix(sparc-service): address PR #739 blocking review findings
vz-ibm Aug 10, 2026
e712817
docs(sparc-service): document SPARC_LOG_REQUESTS and SPARC_STRIP_TOOL…
vz-ibm Aug 10, 2026
22074e0
build(deps): Bump rojopolis/spellcheck-github-actions (#747)
dependabot[bot] Aug 11, 2026
540a769
build(deps): Bump docker/login-action from 4.2.0 to 4.6.0 (#743)
dependabot[bot] Aug 11, 2026
28373a3
build(deps): Bump github/codeql-action/init from 4.37.4 to 4.37.6 (#748)
dependabot[bot] Aug 11, 2026
9986286
build(deps): Bump github/codeql-action/upload-sarif (#749)
dependabot[bot] Aug 11, 2026
6380a8a
Fix: Restore RELEASE_NAMESPACE override in opa-kind-enable bundle_url
oblinder Aug 12, 2026
2233b70
Chore: Address PR review nits (dev-only guard, rego comment, pin k8s …
oblinder Aug 12, 2026
da072b6
Merge branch 'aiac-phase2-opa' into aiac-phase2-event-broker
oblinder Aug 12, 2026
a485fbb
Docs: Update dev-guide reference to Rosso Developer Guide
oblinder Aug 12, 2026
848046f
Fix: Bump github-agent aiohttp to 3.14.3 to clear GHSA-cq5v-8q36-5273
oblinder Aug 12, 2026
82c720c
Fix: Bump cryptography to 50.0.0 (github_agent) for GHSA-g6cj-pr64-35w5
oblinder Aug 12, 2026
8fa6f06
Fix: Bump keycloak-spi to Keycloak 26.6.3 for 4 GHSAs
oblinder Aug 12, 2026
3ac8445
Fix: Bump Keycloak to 26.6.4 and allow-list 3 unfixable server GHSAs
oblinder Aug 12, 2026
aaf16cd
Fix: Bump cryptography to 50.0.0 in aiac root lock (GHSA-g6cj-pr64-35w5)
oblinder Aug 12, 2026
113bcf9
Chore: Move opa-kind runbook and scripts into aiac/k8s
oblinder Aug 12, 2026
ba30155
Fix: Add DEV ONLY caveat to admin_token() in opa-kind-driver.sh
oblinder Aug 12, 2026
79acd5e
Merge branch 'aiac-phase2-opa' into aiac-phase2-event-broker
oblinder Aug 12, 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
16 changes: 15 additions & 1 deletion .github/workflows/security-scans.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,21 @@ jobs:
# version exists (affected <= 1.5.9, crewai pins chromadb < 1.2). The vulnerability
# requires running a chromadb HTTP server with trust_remote_code=true, which the
# github_agent demo does not do. See demo/agents/github_agent/pyproject.toml.
allow-ghsas: GHSA-f4j7-r4q5-qw2c
#
# keycloak-services (aiac/keycloak-spi, provided-scope): these are Keycloak *server*
# advisories, not code shipped in our provider jar (only jnats is shaded). They are
# remediated operationally by patching the Keycloak deployment; our pom + Dockerfile
# already track a patched line (26.6.4, see keycloak-spi/pom.xml). The three below have
# NO released fix (affected <= 26.6.4, patched version "None"), so they cannot be
# resolved by a version bump:
# GHSA-wcvj-vpvw-9rr5 Improper Validation of Consistency within Input
# GHSA-p3v8-fm5p-v84h Improper Verification of Cryptographic Signature
# GHSA-q6h7-xxp7-7429 Authentication Bypass by Primary Weakness
allow-ghsas: >-
GHSA-f4j7-r4q5-qw2c,
GHSA-wcvj-vpvw-9rr5,
GHSA-p3v8-fm5p-v84h,
GHSA-q6h7-xxp7-7429

shellcheck:
name: Shell Script Lint
Expand Down
90 changes: 49 additions & 41 deletions aiac/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# AIAC Codebase Guide

All paths below are relative to `kagenti-extensions/aiac/`.
All paths below are relative to `cortex/aiac/`.

## Requirements / PRD docs

Expand Down Expand Up @@ -50,23 +50,18 @@ Per-task handoff documents live under `docs/handoffs/` — one markdown file per

## Source code

`src/aiac/` — Python package root (`__init__.py` is empty).
`src/aiac/` — Python package root (`__init__.py` is empty). It is organized by
subsystem: an IdP configuration layer, a PDP policy-writer layer, the AIAC Agent
layer (built on the SPM/APM model — a Controller dispatching to use-case
sub-agents and a policy-rules builder), and a two-layer policy stack (models, a
model store, and the Policy Computation Engine).

Key stable structure:
- `idp/` — IdP configuration service and models
- `pdp/` — PDP policy writer service and library
- `agent/` — the AIAC Agent layer (rebuilt on the SPM/APM model):
- `agent/controller/` — FastAPI Controller (`routes.py` + Dockerfile); `/apply/*` routes dispatch to the UC sub-agents and make the single `compute_and_apply` (PCE) call
- `agent/uc/` — use-case sub-agents: `onboarding/` (provision + policy_builder + orchestrator), `policy_update/` (build/rebuild), `role_update/`
- `agent/policy_rules_builder/` — PRB: `build_role_rules` / `build_scope_rules` emit `list[PolicyRule]`
- `agent/shared/` — shared helpers (`roles.py`, e.g. `flatten_role`)
- `agent/onboarding.old/` — archived prior implementation (built on the superseded `ProposedDiff` model); not part of the active build
- `policy/` — the two-layer policy stack (all implemented):
- `policy/model/` — `PolicyRule`, `ServicePolicyModel` (SPM), `AgentPolicyModel` (APM), `PolicyModel`
- `policy/store/` — Policy Store service + library (SPM CRUD)
- `policy/computation/` — Policy Computation Engine (`compute_and_apply`, SPM-based)
Discover the concrete layout live rather than relying on a memorized tree:

For current file list, `ls` or `find` under `src/aiac/`.
```bash
find src/aiac -maxdepth 2 -type d # subsystems and their immediate children
ls src/aiac/<subsystem>/ # drill into any layer
```

## Tests

Expand All @@ -78,24 +73,32 @@ For current file list, `ls` or `find` under `src/aiac/`.
.venv/bin/pytest test/ -m "not integration"
```

The whole `test/` tree (including `test/policy/`) collects and runs green. The Policy
Computation Engine (`aiac.policy.computation.engine`) was migrated to the SPM store surface in
**Wave 3 / Handoff 05**, so the earlier PCE-chain collection failures (which required ignoring
`test/policy/computation`, `test/agent/controller/test_routes.py`, and
`test/integration/test_policy_pipeline.py`) are resolved — no `--ignore` flags are needed.

Use `ls test/` to discover current test directories.

**Integration tests** (`-m integration`) need live config — Keycloak + admin creds + an LLM
endpoint (`opa` on PATH for the policy-pipeline suite). Those variables live in
The whole `test/` tree collects and runs green — no `--ignore` flags are needed.
(This wasn't always true: the Policy Computation Engine was migrated to the SPM
store surface in Wave 3, which resolved the earlier PCE-chain collection
failures.)

Use `ls test/` / `find test -type d` to discover current test directories.

**Integration tests** (`-m integration`) now close the **real OPA evaluation loop** — they onboard
through the in-cluster Controller, then drive real HTTP requests **through AuthBridge** and assert the
**deployed OPA plugin's** allow/deny (no `opa eval`, no `.rego` dump, so `opa` on PATH is no longer
needed). They therefore need a live **rossoctl/Kind cluster with the AuthBridge OPA pipeline wired
into both legs** (the demo `github-agent`/`github-tool` deployed + registered), plus Keycloak admin
creds and an LLM endpoint for onboarding. Stand the pipeline up with `k8s/opa-kind-enable.sh`;
the full prerequisites, wiring, and manual probe commands are in `k8s/opa-kind-runbook.md`, and the
per-loop shape is documented in `test/integration/uc1_onboard.py`. Config lives in
`test/integration/.env` (gitignored): `LLM_BASE_URL`, `LLM_API_KEY`, `LLM_MODEL`, `KEYCLOAK_URL`,
`KEYCLOAK_ADMIN_USERNAME`, `KEYCLOAK_ADMIN_PASSWORD`. Source it before running:

```bash
k8s/opa-kind-enable.sh # one-time: wire the OPA plugin into the Kind cluster
set -a; . test/integration/.env; set +a
.venv/bin/pytest test/integration/ -m integration
```

When the cluster is not wired or the env is unset, the suite **skips cleanly** (it never false-passes).

**Smoke test** (requires live service at `AIAC_PDP_CONFIG_URL`, default `http://127.0.0.1:7071`):

```bash
Expand All @@ -106,26 +109,28 @@ Exercises all `Configuration` methods — run `ls test/idp/configuration/` to se

## Python environment

Virtual environment: `kagenti-extensions/aiac/.venv`
Virtual environment: `cortex/aiac/.venv`

Activate: `source kagenti-extensions/aiac/.venv/bin/activate`
Run directly: `kagenti-extensions/aiac/.venv/bin/python` / `kagenti-extensions/aiac/.venv/bin/pytest`
Activate: `source cortex/aiac/.venv/bin/activate`
Run directly: `cortex/aiac/.venv/bin/python` / `cortex/aiac/.venv/bin/pytest`

Always use this venv for any Python execution, test runs, or dependency checks.

## Kubernetes & builds

Config: `k8s/`, `pyproject.toml`, `pyrightconfig.json`

Docker images:
Docker images: each service ships a `Dockerfile` next to its service code (build
context is `src/`, except `rag-ingest/`, which is a separate top-level
directory). Discover the current set of images and their Dockerfiles live:

| Image | Dockerfile location |
|-------|-------------------|
| `aiac-agent` | `src/aiac/agent/controller/Dockerfile` (build context `src/`) |
| `aiac-pdp-config` | `src/aiac/idp/service/configuration/keycloak/Dockerfile` |
| `aiac-pdp-policy-opa` | `src/aiac/pdp/service/policy/opa/Dockerfile` |
| `aiac-policy-store` | `src/aiac/policy/store/service/Dockerfile` |
| `aiac-rag-ingest` | `rag-ingest/` (separate directory) |
```bash
find src -name Dockerfile # per-service Dockerfiles under src/
ls rag-ingest/ # the out-of-tree ingest image
```

Image names and build contexts are declared in the build/CI config and the
`k8s/` manifests — grep there for the authoritative name→Dockerfile mapping.

### Non-root container / volume-ownership pattern

Expand All @@ -152,9 +157,12 @@ spec:
fsGroup: 10001 # makes the mounted volume group-writable by UID 10001
```

Services requiring this today:
- **Policy store** — PVC at `/data` (SQLite backend), `policy-store-statefulset.yaml`
- **PDP policy OPA writer** — emptyDir at `/rego` (`REGO_OUTPUT_DIR`), `pdp-interface-deployment.yaml`
This applies to any service that writes to a mounted volume (a PVC or an
emptyDir). Find them live by grepping the manifests for volume mounts / claims:

```bash
grep -rlniE 'volumeMounts|volumeClaimTemplates|emptyDir|persistentVolumeClaim' k8s/
```

Services that mount no volumes still need the Dockerfile `USER` directive; the
pod-level `fsGroup`/volume-chown block above is only required for those that
Expand Down Expand Up @@ -196,7 +204,7 @@ demo workloads, which don't) and CPU/memory requests + limits.

## External references

- [Kagenti Developer Guide](https://github.com/kagenti/kagenti/blob/main/docs/dev-guide.md) — upstream Kagenti dev guide: per-persona workflows (agent, tool, extensions developers, MCP gateway operators), Git/PR process, pre-commit hooks, feature flags, local Kagenti UI v2 development (React frontend + FastAPI backend, building/deploying images to Kubernetes), and HyperShift-based testing on ephemeral OpenShift clusters (cluster lifecycle, cost management, troubleshooting).
- [Rosso Developer Guide](https://github.com/rossoctl/rossoctl/blob/main/docs/dev-guide.md) — upstream Rosso dev guide (formerly the Kagenti Developer Guide; Kagenti was renamed to Rosso): per-persona workflows (agent, tool, extensions developers, MCP gateway operators), Git/PR process, pre-commit hooks, feature flags (all new features must be gated behind a disabled-by-default `ROSSOCTL_FEATURE_FLAG_<NAME>` flag), local Rosso UI v2 development (React frontend + FastAPI backend, building/deploying images to Kubernetes), and HyperShift-based testing on ephemeral OpenShift clusters (cluster lifecycle, cost management, troubleshooting).

## Agent skills

Expand Down
7 changes: 7 additions & 0 deletions aiac/demo/agents/github_agent/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.venv

# Secrets — never bake into the image
.env

# `expect` scripts
test_startup.exp
28 changes: 28 additions & 0 deletions aiac/demo/agents/github_agent/.env.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Github Agent - configuration template
# Copy to .env and fill in your values.

# LLM configuration
TASK_MODEL_ID=ollama/ibm/granite4:latest
LLM_API_BASE=http://host.docker.internal:11434
LLM_API_KEY=my_api_key
MODEL_TEMPERATURE=0

# MCP Tool endpoint
MCP_URL=http://github-tool-mcp:9090/mcp

# Agent service
PORT=8000
LOG_LEVEL=INFO

# Optional: static GitHub PAT passed to MCP as Bearer token.
# If unset, the inbound Authorization header (AuthBridge path) is forwarded instead.
GITHUB_TOKEN=

# Optional: override the URL advertised in the agent card
AGENT_ENDPOINT=

# Optional: override the curated tool allow-list (comma-separated tool names)
ENABLED_TOOLS=

# Optional: expected issuer of inbound JWTs (informational)
ISSUER=
15 changes: 15 additions & 0 deletions aiac/demo/agents/github_agent/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim
ARG RELEASE_VERSION="main"

WORKDIR /app
COPY . .
RUN uv sync --no-cache --locked --link-mode copy

ENV PRODUCTION_MODE=True \
HOME=/app \
RELEASE_VERSION=${RELEASE_VERSION}

RUN chown -R 1001:1001 /app
USER 1001

CMD ["uv", "run", "--no-sync", "server"]
113 changes: 113 additions & 0 deletions aiac/demo/agents/github_agent/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# github-agent

An autonomous A2A agent that acts on a user's behalf against GitHub **source repositories** and an **issue/PR tracker**, using the [`github-tool-mcp`](https://github.com/kagenti/kagenti-extensions) MCP server.

This agent implements the canonical `github-agent` used by the AIAC policy-pipeline integration test — the two skills match the policy scenario's `source_operations` and `issue_operations` roles.

## Skills

| Skill id | Name | Description |
|---|---|---|
| `source_operations` | Source repository operations | Browse and search code; read, create, and modify repository file contents, branches, and commits. |
| `issue_operations` | Issue & PR tracker operations | Read, search, create, and update issues, comments, sub-issues, and pull requests. |

## Prerequisite: `github-tool-mcp` (production tool)

This agent connects to **`github-tool-mcp:9090/mcp`** — the production 44-tool MCP server — at `MCP_URL`.
Deploy it before starting the agent:

```
authbridge/demos/github-issue/k8s/github-tool-deployment.yaml
```

> **Not the same as `demo/tools/github_tool/`.**
> `demo/tools/github_tool/` is a simplified 4-tool stub (`source-read`, `source-write`, `issues-read`,
> `issues-write`) deployed as Service `github-tool` for **UC-1 onboarding discovery** only.
> The agent never connects to it — it connects to the production `github-tool-mcp` server which
> exposes the 44-tool GitHub API federation.

## Configuration

All settings are read from environment variables (or a `.env` file). Copy one of the presets:

| Preset | Description |
|---|---|
| `.env.ollama` | Default — local Ollama (ibm/granite4) |
| `.env.openai` | OpenAI gpt-4o-mini |
| `.env.claude` | Anthropic Claude Sonnet |
| `.env.template` | Documented placeholder for all vars |

### Variables

| Variable | Description | Default |
|---|---|---|
| `TASK_MODEL_ID` | litellm model id | `ollama/ibm/granite4:latest` |
| `LLM_API_BASE` | OpenAI-compatible base URL | `http://host.docker.internal:11434` |
| `LLM_API_KEY` | LLM API key | `my_api_key` |
| `MODEL_TEMPERATURE` | Sampling temperature | `0` |
| `EXTRA_HEADERS` | Extra LLM headers (JSON) | `{}` |
| `MCP_URL` | MCP tool endpoint | `http://github-tool-mcp:9090/mcp` |
| `MCP_TIMEOUT` | MCP connect timeout (s) | `600` |
| `ENABLED_TOOLS` | Override the curated tool allow-list (comma-separated) | (unset → default set) |
| `PORT` | A2A listen port | `8000` |
| `LOG_LEVEL` | Log level | `INFO` |
| `GITHUB_TOKEN` | Static Bearer to MCP (else inbound passthrough) | (unset) |
| `ISSUER` | Expected `iss` of inbound JWTs (informational) | (unset) |
| `AGENT_ENDPOINT` | Override the URL advertised in the card | (unset) |

## Running locally

```bash
cd aiac/demo/agents/github_agent
cp .env.ollama .env # or another preset
uv sync
uv run server
# In another terminal:
curl -s localhost:8000/.well-known/agent-card.json | python3 -m json.tool
```

Optionally, run `expect -f test_startup.exp` instead to check startup automatically.

## Deploying to Kagenti (Kind cluster)

Prerequisites: a running Kagenti cluster (Keycloak realm `kagenti`, namespace `team1`) with `github-tool-mcp` already deployed.

1. **Build the image:**
```bash
cd aiac/demo/agents/github_agent
podman build -t github-agent:latest .
# or: docker build -t github-agent:latest .
```

2. **Load into the Kind cluster:**
```bash
kind load docker-image github-agent:latest --name kagenti
```

3. **Apply manifests:**
```bash
kubectl apply -f k8s/configmaps.yaml
kubectl apply -f k8s/github-agent-deployment.yaml
```

4. **Confirm AuthBridge injection:**
```bash
kubectl get pod -n team1 -l app.kubernetes.io/name=github-agent -o jsonpath='{.items[0].spec.containers[*].name}'
```
You should see the `authbridge-proxy` (or `envoy-proxy`) sidecar alongside `agent`.

5. **Port-forward and send a message:**
```bash
kubectl port-forward svc/github-agent 8080:8080 -n team1 &
# Send an A2A message/send request:
curl -s http://localhost:8080/.well-known/agent-card.json | python3 -m json.tool
```

## Architecture

```
A2A client ──(JSON-RPC /)──► github-agent (:8000)
│ CrewAI: prereq extract → researcher
└──(streamable-http, MCP_URL)──► github-tool-mcp:9090/mcp ──► GitHub
(AuthBridge sidecar: inbound JWT validation; outbound RFC-8693 token exchange for MCP_URL host)
```
Loading
Loading