Skip to content

SPIKE: SPDD leg 3 entity projection (structured markdown → __Entity__)#2

Draft
jmjava wants to merge 31 commits into
ingest-to-hubfrom
cursor/spike-spdd-dice-projection-17f4
Draft

SPIKE: SPDD leg 3 entity projection (structured markdown → __Entity__)#2
jmjava wants to merge 31 commits into
ingest-to-hubfrom
cursor/spike-spdd-dice-projection-17f4

Conversation

@jmjava

@jmjava jmjava commented Jul 5, 2026

Copy link
Copy Markdown
Owner

SPIKE-001 leg 3 — paired with orchestrator cursor/spike-guide-ingest-agent-context-17f4

Status: Draft — spike only; do not merge until orchestrator T06 go/no-go.

What this adds

Structured SPDD markdown projection into Neo4j __Entity__ via NamedEntityDataRepository.
Coexists with leg 2 RAG chunk ingest (guide.directories).

Not the DICE proposition pipeline (conversation → propositions).

API / MCP

  • POST /api/v1/data/spdd-projection/load — project from orchestrator or fixture root
  • GET /api/v1/data/spdd-projection/stats — entity counts by label
  • GET /api/v1/data/spdd-projection/work/{workId} — typed-edge subgraph
  • GET /api/v1/data/spdd-projection/area?name= — cross-run lessons by area
  • MCP: spdd_workSubgraph, spdd_areaLessons, spdd_findByLabel, spdd_projectionStats

Enable

guide:
  spdd-projection:
    enabled: true
    default-root-path: /absolute/path/to/sdlc-spdd-orchestrator
    allowed-roots: []   # optional extra roots for load overrides

See docs/spdd-projection-ingest.md, docs/spdd-branch-changes.md, and
scripts/user-config/application-menke-5-spdd-projection.yml.example.

Test status (2026-07-11)

Gate Result
Guide CI Build @ 9b8fbaf ✅ success
Unit tests com.embabel.guide.spdd (32) ✅ green locally (service / controller / MCP tools)
Live projection load ✅ 9 WorkIds / 9 Canvases / 12 Areas / 21 rels
Live MCP spdd_* (14 tools total on server) ✅ JSON-RPC + Cursor client
Spring Neo4j health (scheme 'none' fix) /actuator/healthUP after 9b8fbaf
Fixture-only ingest (empty content.versioned.versions) ✅ 0/0 URLs, 1/1 retrieval-fixture dir (~21s)

Tip of branch

9b8fbaf — Fix Spring Neo4j health auth: stop AuthTokens.none() against embabel-neo4j

Related

cursor Bot pushed a commit to jmjava/sdlc-spdd-orchestrator that referenced this pull request Jul 5, 2026
Co-authored-by: John Menke <jmjava@gmail.com>
jasperblues and others added 7 commits July 6, 2026 10:40
…ons)

- SpddMarkdownProjectionService projects canvas + context-index into __Entity__
- DrivineNamedEntityDataRepository wired when guide.spdd-projection.enabled=true
- POST /api/v1/data/spdd-projection/load and GET .../stats operator API
- Coexists with leg 2 RAG directory ingest (same Neo4j, different node layer)
- Unit tests with InMemoryNamedEntityDataRepository
- Docs and menke-5-spdd-projection profile example

Pair with sdlc-spdd-orchestrator cursor/spike-guide-ingest-agent-context-17f4
…MCP tools

- Root allowlist for load overrides (guide.spdd-projection.allowed-roots);
  per-file skip isolation (skippedFiles); 400/404/409 status mapping
- New edges: WorkId -decision/pitfall/pattern-> lesson, lesson -about-> Area;
  pattern kind now projected
- Cross-run lessons query: GET /spdd-projection/area?name=… + spdd_areaLessons
- MCP spdd_* tools via @LLMTool + McpToolExport; errors as {"error": …} JSON
- listByLabel: schema-label validation + result caps
- Tests: 32 spdd (service/controller/tools); fix DataManagerControllerWebMvcTest
  missing GuideStatsService mock
- Docs: spdd-projection-ingest.md updated; spdd-branch-changes.md for guide devs

Co-authored-by: Cursor <cursoragent@cursor.com>
@jmjava jmjava force-pushed the cursor/spike-spdd-dice-projection-17f4 branch from 68f0d57 to fc75c19 Compare July 12, 2026 01:08
jmjava and others added 2 commits July 11, 2026 21:36
…d components

`allowedRoots + defaultRoot` concatenated the default root's path COMPONENTS
(home, ubuntu, …) instead of appending the Path, so every override — even one
identical to the default root — was rejected. Wrap in listOf(). Regression test
added; error message now includes the allowed roots.

Co-authored-by: Cursor <cursoragent@cursor.com>
…neo4j

Neo4jReactiveHealthIndicator was connecting without credentials (scheme
'none') because spring.neo4j.authentication was unset, leaving /actuator/health
DOWN even when Drivine/RAG worked. Wire uri/username/password from the same
NEO4J_* env vars the RAG graph already uses.

Co-authored-by: Cursor <cursoragent@cursor.com>
@jmjava

jmjava commented Jul 12, 2026

Copy link
Copy Markdown
Owner Author

Sync / test status — 2026-07-11

Branch tip 9b8fbaf is pushed and in sync with origin/cursor/spike-spdd-dice-projection-17f4.

Verified live against Neo4j + MCP

  • Projection + spdd_* tools: WorkId subgraph / stats / findByLabel / areaLessons
  • Hardening: allowed-roots, lesson edges (decision/pitfall/pattern + about), MCP {"error":…} payloads
  • Auth fix: Spring Boot Neo4jReactiveHealthIndicator was connecting with AuthTokens.none() (health DOWN). spring.neo4j.authentication now uses the same NEO4J_* vars as Drivine/RAG → health UP
  • Fixture ingest for orchestrator T05 mode (b): profile clears content.versioned.versions so FORCE_STARTUP_INGEST does not re-embed Embabel docs/Medium

CI

  • Build on this tip: success

Paired orchestrator PR: jmjava/sdlc-spdd-orchestrator#24

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.

3 participants