Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
48e428b
manage kg specs
aredenba-rh May 20, 2026
fcdbe4d
minor edits to specs; github issues created
aredenba-rh May 20, 2026
d48c322
feat(management): add workspace mode lifecycle (#643) (#680)
aredenba-rh May 20, 2026
75d58e5
feat(management): expose knowledge graph workspace status projection …
aredenba-rh May 20, 2026
9cee053
feat(management): implement actionable bootstrap readiness validation…
aredenba-rh May 20, 2026
c305a44
feat(management): add workspace validate and transition commands (#683)
aredenba-rh May 20, 2026
584c3ef
feat(management): persist mutation log run metadata on sync runs (#684)
aredenba-rh May 20, 2026
60ce34f
feat(graph): wire mutation apply metrics into lifecycle events (#685)
aredenba-rh May 20, 2026
d50c238
test(extraction): add bounded-context architecture guardrails scaffol…
aredenba-rh May 20, 2026
9f91318
feat(extraction): add scoped agent session lifecycle service (#687)
aredenba-rh May 20, 2026
56b9ba7
feat(extraction): add skill resolution engine with KG overrides (#688)
aredenba-rh May 20, 2026
a75608d
feat(extraction): implement clear-chat reset with session archival (#…
aredenba-rh May 20, 2026
a73fa36
feat(management): add data-source commit reference projection (#690)
aredenba-rh May 20, 2026
296aff3
feat(ingestion): resolve baseline and tracked head at sync start (#691)
aredenba-rh May 26, 2026
8ebe204
feat(ingestion): short-circuit sync when no new commit exists (#692)
aredenba-rh May 20, 2026
3c71c93
feat(management): add baseline-vs-head diff summary endpoint (#693)
aredenba-rh May 20, 2026
2dc62ca
feat(dev-ui): add collapsed diff-summary panel for data sources (#694)
aredenba-rh May 20, 2026
5e7a5fd
feat(management): add commit-refresh actions for data sources (#675) …
aredenba-rh May 20, 2026
6b11bbc
chore(skills): add parallel blocker-question protocol (#696)
aredenba-rh May 20, 2026
9d1e9eb
feat(extraction): ship mode-specific prompt bundles and skill packs (…
aredenba-rh May 20, 2026
3f1da32
feat(extraction): add bootstrap capabilities intake dual-path flow (#…
aredenba-rh May 20, 2026
b11d559
feat(extraction): package workload runtime context and skills mounts …
aredenba-rh May 20, 2026
faca1c1
feat(dev-ui): enrich schema inspector with type metadata badges (#670…
aredenba-rh May 20, 2026
6b6d32e
feat(management): add extraction run-control APIs for sync lifecycle …
aredenba-rh May 20, 2026
9282149
feat(dev-ui): add extraction telemetry dashboard metrics (#672) (#702)
aredenba-rh May 20, 2026
94bac2d
feat(management): add KG maintenance scheduling and run history (#703)
aredenba-rh May 20, 2026
fc5b7a2
feat(dev-ui): add manual mutation assistant and live graph inspector …
aredenba-rh May 20, 2026
565d100
feat(dev-ui): switch KG row actions to manage/query/delete (#705)
aredenba-rh May 20, 2026
4bf50f8
feat(dev-ui): add mode-aware knowledge graph manage workspace page (#…
aredenba-rh May 20, 2026
8a258cf
feat(dev-ui): add conversation-first extraction workspace tabs (#707)
aredenba-rh May 20, 2026
4afcea0
feat(management): add KG-scoped mutation log browser data and UI (#708)
aredenba-rh May 20, 2026
c3c7dbe
feat(ui): add bootstrap progress checklist and diagnostics panel (#66…
aredenba-rh May 20, 2026
b005da7
test(ui): lock commit-hash status cues on data source cards (#664) (#…
aredenba-rh May 20, 2026
d669483
test(ui): lock maintenance readiness cues to commit-diff semantics (#…
aredenba-rh May 20, 2026
47f78e8
feat(ui): add shared conversation panel with session resume and clear…
aredenba-rh May 20, 2026
6e961de
feat(workflow): add section-wave subagent orchestration prompts (#713)
aredenba-rh May 20, 2026
1f6f8f3
feat(extraction): add sticky runtime and ephemeral worker adapters (#…
aredenba-rh May 20, 2026
581d7d1
harden ingestion credential handling and add end-to-end flow validati…
aredenba-rh May 20, 2026
cbe4485
test-integration fixes
aredenba-rh May 21, 2026
9842046
kg-manage-experience
aredenba-rh May 22, 2026
200d1b4
feat(dev-ui): add KG manage workspace overview parity (#722) (#726)
aredenba-rh May 22, 2026
b5af3b1
feat(extraction): wire runtime credential injection for extraction wo…
aredenba-rh May 22, 2026
1d9530c
feat(extraction): add session history views with run-level metrics re…
aredenba-rh May 22, 2026
cef63a1
feat(management): persist canonical schema via graph type definitions…
aredenba-rh May 22, 2026
bb655db
feat(dev-ui): KG Manage accessibility and state contracts (#725) (#729)
aredenba-rh May 22, 2026
bd226ec
feat(extraction): add docker/podman-backed workload runtime adapters …
aredenba-rh May 22, 2026
c77aa8a
feat(manage-ui): harden MutationLogs step with scoped ordering and pr…
aredenba-rh May 22, 2026
55c8e1e
feat(manage-ui): unify graph management operations in-place (#720)
aredenba-rh May 22, 2026
9f81a7c
feat(management): add per-run mutation entry previews (#721)
aredenba-rh May 22, 2026
6867e0a
feat(extraction): wire outbox workers to runtime factory adapters (#716)
aredenba-rh May 22, 2026
dcdc1a1
feat(management): enforce graph-native canonical schema source (#718)
aredenba-rh May 22, 2026
15045ec
feat(data-sources): align onboarding with k-extract add-another flow …
aredenba-rh May 22, 2026
5cae3a9
fix(data-sources): modernize KG selector styling in add-source dialog
aredenba-rh May 22, 2026
bdeabf7
feat(ui): add KG-scoped data source onboarding flow
aredenba-rh May 26, 2026
cbc709e
feat(sync): add ingest-only pipeline and ingested status for KG onboa…
aredenba-rh May 27, 2026
781fa38
fix(ingestion): unblock SyncStarted handler shadowed import crash
aredenba-rh May 28, 2026
1c21207
feat(ui): align KG data sources page with k-extract phase1 layout
aredenba-rh May 28, 2026
e0001b8
feat(data-sources): persist prepare metadata and bulk actions on KG page
aredenba-rh May 28, 2026
3012df5
feat(ui): align KG manage workspace with k-extract project hub
aredenba-rh May 29, 2026
81e0595
docs(extraction): sticky session chat specs (#738) (#743)
aredenba-rh May 29, 2026
95cb9ad
feat(extraction): add streaming chat turn service and NDJSON endpoint…
aredenba-rh May 29, 2026
8dfb95c
feat(ui): wire Graph Management Assistant to streaming chat API (#745)
aredenba-rh May 29, 2026
687004b
feat(extraction): add Claude Agent SDK sticky session runtime (#742) …
aredenba-rh May 29, 2026
e747966
feat(extraction): use Vertex AI and proactive runtime warmup
aredenba-rh May 29, 2026
7c9c767
fix(iam): pin stable Keycloak user IDs for dev alice and bob
aredenba-rh May 29, 2026
bbd91e9
fix(extraction): enable Vertex chat in sticky containers with host ADC
aredenba-rh May 29, 2026
2f0b6f5
refactor(ui): rename workspace hub Design phase to Graph Management
aredenba-rh May 29, 2026
9f7a04e
repair env/api.env
aredenba-rh May 29, 2026
e6a9305
fix(extraction): materialize JobPackages into sticky assistant workspace
aredenba-rh May 29, 2026
4dde3a7
fix(ingestion): report total branch files instead of changeset size
aredenba-rh May 31, 2026
8df2591
fix(ui): keep data sources table visible during sync polling
aredenba-rh Jun 1, 2026
85e5716
fix(ui): constrain KG manage workspace to max-w-7xl
aredenba-rh Jun 1, 2026
a5daa9c
feat(management): detect missing prepared JobPackage archives
aredenba-rh Jun 1, 2026
be91d2a
fix(extraction): reuse healthy sticky runtime and defer chat persistence
aredenba-rh Jun 1, 2026
d478495
refactor(dev-ui): align graph management artifacts panel with k-extra…
aredenba-rh Jun 1, 2026
2072434
feat(agent-runtime): stream intermediate thinking lines during SDK turns
aredenba-rh Jun 1, 2026
cfad11f
fix(extraction): materialize non-empty prepared sources for agent wor…
aredenba-rh Jun 1, 2026
444c2eb
perf(ingestion): parallelize prepare sync processing
aredenba-rh Jun 1, 2026
a34a7ea
feat(ui): add entity and relationship schema artifacts to graph manag…
aredenba-rh Jun 1, 2026
226923a
Add Refresh data bulk action to KG data-sources overview (#748)
aredenba-rh Jun 3, 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
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ certs:
.PHONY: dev
dev: certs
@echo "🧰 [Development] Starting application containers..."
docker compose -f compose.yaml -f compose.dev.yaml --profile build-only build agent-runtime
docker compose -f compose.yaml build
docker compose -f compose.yaml -f compose.dev.yaml --profile ui up -d
HOST_UID=$$(id -u) HOST_GID=$$(id -g) docker compose -f compose.yaml -f compose.dev.yaml --profile ui up -d
@echo "Done."
@echo "----------------------------"
@echo "API Root: http://localhost:8000"
Expand All @@ -35,6 +36,9 @@ dev: certs
.PHONY: down
down:
docker compose -f compose.yaml -f compose.dev.yaml down
@echo "Stopping Graph Management sticky and worker containers..."
-@docker ps -aq --filter name=kartograph-sticky- | xargs -r docker rm -f
-@docker ps -aq --filter name=kartograph-worker- | xargs -r docker rm -f


.PHONY: run
Expand Down
33 changes: 31 additions & 2 deletions compose.dev.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,43 @@
# Development overrides for compose.yaml
services:
agent-runtime:
build:
context: ./src/agent-runtime
dockerfile: Dockerfile
image: kartograph-agent-runtime:dev
profiles: ["build-only"]

api:
# Run as root in dev to handle host file permissions (any umask)
user: "${UID}:${GID}"
# Root required for Docker-out-of-Docker via mounted /var/run/docker.sock in dev
user: "0:0"
environment:
UV_CACHE_DIR: /tmp/uv-cache
HOST_UID: ${HOST_UID}
HOST_GID: ${HOST_GID}
KARTOGRAPH_EXTRACTION_RUNTIME_BACKEND: container
KARTOGRAPH_EXTRACTION_RUNTIME_CONTAINER_ENGINE: auto
KARTOGRAPH_EXTRACTION_RUNTIME_CONTAINER_NETWORK: kartograph_kartograph
KARTOGRAPH_EXTRACTION_RUNTIME_STICKY_IMAGE: kartograph-agent-runtime:dev
KARTOGRAPH_EXTRACTION_RUNTIME_API_BASE_URL: http://api:8000
KARTOGRAPH_EXTRACTION_RUNTIME_JOB_PACKAGE_WORK_DIR: /tmp/kartograph/job_packages
KARTOGRAPH_EXTRACTION_RUNTIME_SKILLS_DIR: ${PWD}/skills
KARTOGRAPH_EXTRACTION_RUNTIME_CONTAINER_RUN_UID: ${HOST_UID}
KARTOGRAPH_EXTRACTION_RUNTIME_CONTAINER_RUN_GID: ${HOST_GID}
# Vertex AI for Claude Agent SDK in sticky assistant containers
CLAUDE_CODE_USE_VERTEX: "1"
ANTHROPIC_VERTEX_PROJECT_ID: itpc-gcp-hcm-pe-eng-claude
CLOUD_ML_REGION: us-east5
KARTOGRAPH_GCLOUD_CONFIG_MOUNT: ${HOME}/.config/gcloud
volumes:
# Mount the entire app directory (minus venv) for hot-reload
- ./src/api:/app:z
- /app/.venv
# Shared with sibling sticky containers launched via the host Docker socket
- /tmp/kartograph/job_packages:/tmp/kartograph/job_packages
# Allow API process to launch sibling extraction runtime containers locally
- /var/run/docker.sock:/var/run/docker.sock
# Docker/Podman CLI from host (required for container runtime backend)
- ${DOCKER_BIN:-/usr/bin/docker}:/usr/bin/docker:ro
command:
- /bin/bash
- -c
Expand Down
2 changes: 2 additions & 0 deletions compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ services:
- kartograph
volumes:
- ./certs:/certs:ro
- ./skills:/app/skills:ro
# Mount host CA bundle (supports multiple OS types via env var)
# Default fallback order: RHEL/Fedora -> Debian/Ubuntu -> macOS
- ${HOST_CA_BUNDLE:-/etc/pki/tls/certs/ca-bundle.crt}:/etc/ssl/certs/ca-bundle.crt:ro
Expand All @@ -156,6 +157,7 @@ services:
- GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/certs/spicedb-cert.pem
# SSL cert file uses mounted path (same for all systems)
- SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt
- KARTOGRAPH_EXTRACTION_SKILLS_DIR=/app/skills
depends_on:
postgres:
condition: service_healthy
Expand Down
6 changes: 6 additions & 0 deletions deploy/apps/kartograph/base/api-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -155,11 +155,15 @@ spec:
secretKeyRef:
name: kartograph-sso-client-swagger-docs
key: client_id
- name: KARTOGRAPH_EXTRACTION_SKILLS_DIR
value: /app/skills

volumeMounts:
- name: spicedb-ca
mountPath: /etc/spicedb-ca
readOnly: true
- name: extraction-skills
mountPath: /app/skills
livenessProbe:
httpGet:
path: /health
Expand Down Expand Up @@ -190,3 +194,5 @@ spec:
items:
- key: service-ca.crt
path: service-ca.crt
- name: extraction-skills
emptyDir: {}
5 changes: 3 additions & 2 deletions env/api.env
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ SPICEDB_PRESHARED_KEY="changeme"
KARTOGRAPH_CORS_ORIGINS=["http://localhost:3000"]
KARTOGRAPH_IAM_BOOTSTRAP_ADMIN_USERNAMES='["alice"]'
KARTOGRAPH_IAM_SINGLE_TENANT_MODE=false
# Generate with uv run python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
KARTOGRAPH_MGMT_ENCRYPTION_KEY="vwN4rUcH-KL-UyJsL8hc6apftRUTovwec6L2M5uF5OE="
KARTOGRAPH_MGMT_ENCRYPTION_KEY="vwN4rUcH-KL-UyJsL8hc6apftRUTovwec6L2M5uF5OE="
KARTOGRAPH_EXTRACTION_RUNTIME_BACKEND=memory
KARTOGRAPH_EXTRACTION_RUNTIME_CONTAINER_ENGINE=auto
2 changes: 2 additions & 0 deletions keycloak/realm.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
],
"users": [
{
"id": "91bd9b81-5c1d-4307-8dcd-3b80dcc68894",
"username": "alice",
"enabled": true,
"email": "alice@example.com",
Expand All @@ -90,6 +91,7 @@
]
},
{
"id": "7ac7083e-42c8-4643-8b2f-052ffc579ea2",
"username": "bob",
"enabled": true,
"email": "bob@example.com",
Expand Down
206 changes: 206 additions & 0 deletions skills/subagent-delivery/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
---
name: subagent-delivery
description: >
Executes a GitHub issue end-to-end with consistent branch, test, PR, and merge behavior.
Use when implementing units of work with sub-agents, preparing pull requests, resolving merge
conflicts, or when the user asks to run issue-by-issue delivery into feature/manage-knowledge-graph.
Supports parallel delivery waves with explicit blocker-question escalation.
---

# Subagent Delivery Protocol

Follow this protocol for every assigned issue.

System prompt template for spawned Claude instances:

- `skills/subagent-delivery/claude-instance-system-prompt.txt`

## Parallel Execution Model

Use this model whenever multiple issues are independent:

1. One subagent per issue branch.
2. Shared target branch: `feature/manage-knowledge-graph`.
3. No shared working branch between agents.
4. Each subagent works to PR-ready state independently.
5. Merge in dependency order (foundational backend before UI polish when coupled).

If two issues touch the same files heavily, either:
- serialize those two issues, or
- split scope so each agent owns non-overlapping symbols.

## Section-Wave Execution Model (Required)

When the user asks for "whole sections at a time", execute in waves aligned to tracker sections:

1. **Section A: Core lifecycle/data**
- `#643 #644 #645 #646 #659 #660 #661 #662 #663`
2. **Section B: Extraction runtime/session**
- `#649 #650 #651 #652 #653 #654`
3. **Section C: Operations/security/integration**
- `#665 #667 #670 #671 #672 #673`

Wave rules:

1. Run independent issues in parallel with one Claude instance per issue.
2. Respect dependencies inside the section (foundation issues first).
3. Keep all PRs targeting `feature/manage-knowledge-graph`.
4. Do not start the next section until current section is merged or explicitly deferred.
5. For each section, maintain a live status board:
- `queued`, `in_progress`, `blocked`, `in_review`, `merged`

## Scope and Inputs

Before coding, gather:

1. Issue number and acceptance criteria.
2. Target branch: `feature/manage-knowledge-graph`.
3. Current repository state (`git status`, `git branch -vv`).
4. Context pack (required):
- relevant specs under `specs/`
- bounded context ownership (management/ingestion/extraction/graph/querying/ui)
- existing tests near touched code
- architectural constraints from `AGENTS.md`

If acceptance criteria are ambiguous, ask one focused question before implementation.

## Claude Instance Spawn Contract

For each issue, provide the Claude instance:

1. Issue ID + title + acceptance criteria summary.
2. Branch naming requirement:
- `feat/issue-<id>-<short-scope>` or `fix/issue-<id>-<short-scope>`
3. Required reads:
- `AGENTS.md`
- relevant `specs/*.spec.md`
- related tests in touched context
4. TDD requirement:
- tests first, then implementation, then verification
5. Output contract:
- branch
- commit(s)
- test commands and results
- PR URL
- blockers/questions

## Blocker Question Protocol (Required)

Subagents must be able to stop and ask questions immediately.

Trigger a blocker question when any of these is true:

1. More than one valid interpretation of acceptance criteria.
2. Missing security/tenancy/authorization decision.
3. Required external behavior is unspecified.
4. You would otherwise make an irreversible guess.

When blocked:

1. Stop implementation at the decision boundary.
2. Ask one concise question in the active agent chat immediately.
3. Include:
- what is ambiguous
- 2-3 concrete options
- recommended option and why
4. If working from a GitHub issue, mirror the same question as an issue comment so the orchestrator can batch unresolved questions across agents.
5. Continue only non-blocked work; do not guess on blocked decisions.

If a blocker impacts multiple active instances:

1. Pause affected issues.
2. Continue unaffected issues in parallel.
3. Post one consolidated orchestrator decision update.
4. Resume paused issues with explicit instruction delta.

## Git Workflow

1. Ensure local target branch is up to date:
- `git checkout feature/manage-knowledge-graph`
- `git pull --ff-only`
2. Create a dedicated branch per issue:
- `feat/issue-<id>-<short-scope>` for features
- `fix/issue-<id>-<short-scope>` for fixes
3. Never mix multiple issues in one branch.
4. Keep commits atomic and conventional (`feat:`, `fix:`, `refactor:`, `test:`).

## Implementation Workflow (TDD Required)

1. Read relevant spec(s) and affected bounded context code first.
2. Write/adjust tests for expected behavior before implementation.
3. Implement minimal code to satisfy tests.
4. Run focused tests first, then broader suite for touched context.
5. Run lints/type checks for changed files when applicable.
6. If behavior depends on configuration, use settings/DI instead of hardcoding.
7. If new ambiguity appears mid-implementation, invoke the Blocker Question Protocol.

## PR Workflow

1. Push branch to origin with upstream tracking.
2. Open PR against `feature/manage-knowledge-graph`.
3. Use this body structure:

```markdown
## Summary
- <what changed and why>
- <important architectural/security note>

## Testing
- [x] <unit tests run>
- [x] <integration tests run if applicable>
- [ ] <manual verification if pending>

## Risks
- <none> or <known risk + mitigation>
```

4. Link the issue in PR body using `Closes #<id>` when appropriate.
5. If any assumptions were made, include an explicit assumptions list in PR body.

## Merge and Conflict Handling

1. Before merge, ensure CI checks are green.
2. If branch is stale, rebase or merge target branch cleanly.
3. Resolve conflicts preserving:
- Spec-required behavior
- Existing user changes
- Authorization and tenancy boundaries
4. Re-run tests after conflict resolution.
5. Merge into `feature/manage-knowledge-graph` only after verification.

## Orchestrator Monitoring Loop (Required)

During active waves, run this loop continuously:

1. Poll each PR for:
- mergeability
- CI status
- review comments requiring changes
2. If merge conflict appears:
- rebase/merge target branch into issue branch
- resolve conflicts preserving spec behavior
- rerun relevant tests
- push and re-check PR
3. If CI fails:
- fix in same issue branch
- do not move issue scope
4. Update section status board and report progress to user.

## Orchestrator Handoff Contract

Each subagent must hand back:

1. Branch name and PR URL.
2. Test commands run with pass/fail status.
3. Any unresolved questions (if still blocked).
4. Any assumptions that were taken and why they are safe.

## Non-Negotiables

- Do not use destructive git commands.
- Do not skip tests.
- Do not disable hooks.
- Do not commit secrets or credentials.
- Prefer fakes over mocks in unit tests when testing domain/application behavior.
- Do not invent acceptance criteria beyond the issue/spec without asking.

Loading
Loading