Compare commits
17 Commits
e3e5b8ecc1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| cd8339ecef | |||
| f8ab58edbe | |||
| 2b5e9743fe | |||
| 753c3d4fc6 | |||
| 94e84f0db9 | |||
| a765ccda21 | |||
| 4472fa6c7f | |||
| 526fa1e3bc | |||
| 86de18c247 | |||
| ca9d0d7030 | |||
| bc527ec09a | |||
| ce984482e2 | |||
| 9266f124e6 | |||
| 8740a66611 | |||
| b7e9edbb4b | |||
| 479fa95fdf | |||
| eb9b622499 |
20
.claude/rules/agents.md
Normal file
20
.claude/rules/agents.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
## Kaizen Agents
|
||||||
|
|
||||||
|
Specialized agent personas available on demand via the state-hub MCP.
|
||||||
|
|
||||||
|
**Discover:** `list_kaizen_agents()` — returns all agents with name, description, category
|
||||||
|
**Load:** `get_kaizen_agent("tdd-workflow")` — returns full instructions; read and follow them
|
||||||
|
|
||||||
|
Common agents:
|
||||||
|
|
||||||
|
| Agent | Category | When to use |
|
||||||
|
|-------|----------|-------------|
|
||||||
|
| `tdd-workflow` | testing | Step-by-step TDD8 workflow for any feature |
|
||||||
|
| `code-refactoring` | quality | Code quality analysis and safe refactoring |
|
||||||
|
| `test-maintenance` | testing | Diagnose and fix failing tests |
|
||||||
|
| `requirements-engineering` | process | Prevent interface/mock mismatches upfront |
|
||||||
|
| `keepaTodofile` | process | Maintain TODO.md during work |
|
||||||
|
| `project-management` | process | Track status, determine next steps |
|
||||||
|
| `datamodel-optimization` | quality | Optimize dataclasses and data structures |
|
||||||
|
|
||||||
|
All 17 agents: call `list_kaizen_agents()` for the full list.
|
||||||
8
.claude/rules/architecture.md
Normal file
8
.claude/rules/architecture.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
## Architecture
|
||||||
|
|
||||||
|
<!-- TODO: Describe the key design decisions and component structure.
|
||||||
|
Key modules, data flows, external integrations, state machines, etc. -->
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
`~/state-hub/mcp_server/TOOLS.md` — MCP tool reference
|
||||||
50
.claude/rules/credential-routing.md
Normal file
50
.claude/rules/credential-routing.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Credential and access routing
|
||||||
|
|
||||||
|
**Audience:** Codex, Claude Code, Grok, and custodian agents that call **llm-connect**
|
||||||
|
for inference. Run this check **before** requesting secrets, API keys, SSH access,
|
||||||
|
login tokens, or database passwords — in any repo, not only `ops-warden`.
|
||||||
|
|
||||||
|
ops-warden **issues SSH certificates only** (`warden sign`, `cert_command`). Every
|
||||||
|
other credential need belongs to another subsystem. **Do not** message
|
||||||
|
`ops-warden` on State Hub expecting a secret value; the reply is a pointer, not a key.
|
||||||
|
|
||||||
|
### Lookup (do this first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
warden route find "<describe your need>" --json
|
||||||
|
warden route show <catalog-id> --json
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires the `warden` CLI from `~/ops-warden` (`uv tool install .` or `uv run warden`).
|
||||||
|
|
||||||
|
| Agent runtime | How to orient |
|
||||||
|
| --- | --- |
|
||||||
|
| **Codex / Grok** (shell, HTTP State Hub) | `warden route` commands above; inbox `to_agent=markitect-main` is for coordination, not secret vending |
|
||||||
|
| **Claude Code** (MCP when available) | `get_domain_summary("custodian")` for workstreams; **still** use `warden route` for credential ownership |
|
||||||
|
| **llm-connect** (inference service) | Never put secret retrieval in prompts; route custody to OpenBao/operator paths surfaced by `warden route` |
|
||||||
|
|
||||||
|
### Quick routing table
|
||||||
|
|
||||||
|
| I need… | Owner | ops-warden executes? |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| SSH cert (`adm`/`agt`/`atm`) | ops-warden | **Yes** — `warden sign` |
|
||||||
|
| API key, DB password, provider token | OpenBao (`railiance-platform`) | No — route only |
|
||||||
|
| Login / OIDC / MFA | key-cape / Keycloak | No — route only |
|
||||||
|
| Authorization decision | flex-auth | No — route only |
|
||||||
|
| activity-core → issue-core emission | activity-core + issue-core | No — `warden route show activity-core-issue-sink` |
|
||||||
|
| SSH tunnel | ops-bridge (+ `cert_command` from warden) | No — route only |
|
||||||
|
|
||||||
|
### Anti-patterns (do not do these)
|
||||||
|
|
||||||
|
- `POST /messages/` to `ops-warden` asking for `ISSUE_CORE_API_KEY`, `OPENROUTER_API_KEY`, etc.
|
||||||
|
- Inventing `warden secret`, `warden login`, `warden bao`, `warden tunnel` — they do not exist
|
||||||
|
- Pasting secrets into Git, State Hub, workplans, logs, or chat
|
||||||
|
|
||||||
|
### Other capabilities (reuse-surface)
|
||||||
|
|
||||||
|
Non-credential capabilities are usually discovered through **reuse-surface** federation
|
||||||
|
(`reuse-surface` registry / `capability.*` indexes). Credential routing is inlined in
|
||||||
|
every repo's agent instructions because it is high-frequency, high-risk, and easy to
|
||||||
|
get wrong.
|
||||||
|
|
||||||
|
**Canon:** `~/ops-warden/wiki/CredentialRouting.md` · catalog `~/ops-warden/registry/routing/catalog.yaml`
|
||||||
38
.claude/rules/first-session.md
Normal file
38
.claude/rules/first-session.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
## First Session Protocol
|
||||||
|
|
||||||
|
Triggered when `get_domain_summary("communication")` shows **no workstreams**.
|
||||||
|
The project is registered but work has not yet been structured.
|
||||||
|
|
||||||
|
**Step 1 — Read, don't write**
|
||||||
|
- `~/the-custodian/canon/projects/communication/project_charter_v0.1.md` — purpose, scope
|
||||||
|
- `~/the-custodian/canon/projects/communication/roadmap_v0.1.md` — planned phases
|
||||||
|
- Scan repo root: README, directory structure, existing code or docs
|
||||||
|
|
||||||
|
**Step 2 — Survey in-progress work**
|
||||||
|
Look for TODOs, open branches, half-finished files. Note done vs. started but incomplete.
|
||||||
|
|
||||||
|
**Step 3 — Propose workstreams to Bernd**
|
||||||
|
Propose 1–3 workstreams — each a coherent strand, weeks to months, anchored to a
|
||||||
|
roadmap phase. **Wait for approval before creating.**
|
||||||
|
|
||||||
|
**Step 4 — Create workplan file first, then DB record (ADR-001)**
|
||||||
|
```
|
||||||
|
workplans/MARKITECT-WP-NNNN-<slug>.md ← write this first
|
||||||
|
```
|
||||||
|
Then register in the hub:
|
||||||
|
```
|
||||||
|
create_workstream(topic_id="36c7421b-c537-4723-bf75-42a3ebc6a1dc", title="...", owner="...", description="...")
|
||||||
|
create_task(workstream_id="<id>", title="...", priority="high|medium|low")
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 5 — Record the setup**
|
||||||
|
```
|
||||||
|
add_progress_event(
|
||||||
|
summary="First session: structured communication into N workstreams, M tasks",
|
||||||
|
event_type="milestone",
|
||||||
|
topic_id="36c7421b-c537-4723-bf75-42a3ebc6a1dc",
|
||||||
|
detail={"workstreams": [...], "tasks_created": M}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- Delete or archive this file once past first session -->
|
||||||
8
.claude/rules/repo-boundary.md
Normal file
8
.claude/rules/repo-boundary.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
## Repo boundary
|
||||||
|
|
||||||
|
This repo owns **Markitect Main** only. It does not own:
|
||||||
|
|
||||||
|
<!-- TODO: List what belongs in adjacent repos, e.g.:
|
||||||
|
- SSH key management → railiance-infra/
|
||||||
|
- State hub code → state-hub/
|
||||||
|
-->
|
||||||
5
.claude/rules/repo-identity.md
Normal file
5
.claude/rules/repo-identity.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
**Purpose:** Markitect Main - (fill in purpose)
|
||||||
|
|
||||||
|
**Domain:** communication
|
||||||
|
**Repo slug:** markitect-main
|
||||||
|
**Topic ID:** 36c7421b-c537-4723-bf75-42a3ebc6a1dc
|
||||||
85
.claude/rules/session-protocol.md
Normal file
85
.claude/rules/session-protocol.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
## Session Protocol
|
||||||
|
|
||||||
|
Dev Hub (State Hub API): http://127.0.0.1:8000
|
||||||
|
MCP server name in `~/.claude.json`: `dev-hub`
|
||||||
|
|
||||||
|
**Step 1 — Orient**
|
||||||
|
|
||||||
|
Read the offline-safe brief first — it works without a live hub connection:
|
||||||
|
```bash
|
||||||
|
cat .custodian-brief.md
|
||||||
|
```
|
||||||
|
Then call the MCP tool for richer cross-domain context when MCP tools are exposed:
|
||||||
|
```
|
||||||
|
get_domain_summary("communication")
|
||||||
|
```
|
||||||
|
If MCP tools are unavailable in the current agent session, use the REST API:
|
||||||
|
```bash
|
||||||
|
curl -s "http://127.0.0.1:8000/state/summary" | python3 -m json.tool
|
||||||
|
```
|
||||||
|
If the hub is offline: `cd ~/state-hub && make api`
|
||||||
|
|
||||||
|
**Step 2 — Check inbox**
|
||||||
|
With MCP tools:
|
||||||
|
```
|
||||||
|
get_messages(to_agent="markitect-main", unread_only=True)
|
||||||
|
```
|
||||||
|
Mark read with `mark_message_read(message_id)`. Reply or act on coordination
|
||||||
|
requests before proceeding.
|
||||||
|
|
||||||
|
Without MCP tools:
|
||||||
|
```bash
|
||||||
|
curl -s "http://127.0.0.1:8000/messages/?to_agent=markitect-main&unread_only=true" \
|
||||||
|
| python3 -m json.tool
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/messages/<id>/read" \
|
||||||
|
-H "Content-Type: application/json" -d '{}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3 — Scan workplans**
|
||||||
|
```bash
|
||||||
|
ls workplans/
|
||||||
|
```
|
||||||
|
For each file with `status: ready`, `active`, or `blocked`, note pending
|
||||||
|
`wait`/`todo`/`progress` tasks.
|
||||||
|
|
||||||
|
**Step 4 — Present brief**
|
||||||
|
|
||||||
|
1. **Active workstreams** for `communication` — title, task counts, blocking decisions
|
||||||
|
2. **Pending tasks** from `workplans/` + any `[repo:markitect-main]` hub tasks
|
||||||
|
3. **Goal guidance** — if `goal_guidance` in summary:
|
||||||
|
- `needs_workplan`: surface as top action — *"Repo goal '{title}' has no workplan yet"*
|
||||||
|
- `alignment_warnings`: flag if active work is not aligned with current goal
|
||||||
|
4. **Suggested next action** — highest-priority open item
|
||||||
|
5. **SBOM status** — flag if `last_sbom_at` is unset for this repo
|
||||||
|
|
||||||
|
If no workstreams: follow First Session Protocol (`first-session.md`).
|
||||||
|
|
||||||
|
**During work:** `record_decision()` · `add_progress_event()` · `resolve_decision()`
|
||||||
|
|
||||||
|
> State Hub is a *read model*. Bootstrap tools (`create_workstream`, `create_task`)
|
||||||
|
> are First Session Protocol only. Work structure belongs in repo files (ADR-001).
|
||||||
|
|
||||||
|
**Session close:**
|
||||||
|
With MCP tools:
|
||||||
|
```
|
||||||
|
add_progress_event(summary="...", topic_id="36c7421b-c537-4723-bf75-42a3ebc6a1dc", workstream_id="<uuid>")
|
||||||
|
```
|
||||||
|
Without MCP tools:
|
||||||
|
```bash
|
||||||
|
curl -s -X POST http://127.0.0.1:8000/progress/ \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"topic_id":"36c7421b-c537-4723-bf75-42a3ebc6a1dc","workstream_id":"<uuid>","event_type":"note","summary":"what changed","author":"codex"}'
|
||||||
|
```
|
||||||
|
If workplan files were modified, ensure the local copy is up to date first:
|
||||||
|
```bash
|
||||||
|
git -C <repo_path> pull --ff-only
|
||||||
|
cd ~/state-hub && make fix-consistency REPO=markitect-main
|
||||||
|
```
|
||||||
|
For repos where implementation runs on a remote machine (e.g. CoulombCore),
|
||||||
|
use the combined target which pulls before fixing:
|
||||||
|
```bash
|
||||||
|
cd ~/state-hub && make fix-consistency-remote REPO=markitect-main
|
||||||
|
```
|
||||||
|
**C-15** (DB task ahead of file) is normal in multi-machine workflows — writeback
|
||||||
|
will sync the file to match DB. **C-16** (repo behind remote) blocks all writes
|
||||||
|
until you pull — intentional to prevent clobbering remote progress.
|
||||||
16
.claude/rules/stack-and-commands.md
Normal file
16
.claude/rules/stack-and-commands.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
## Stack
|
||||||
|
|
||||||
|
- **Language:** Python 3.12+ (monorepo) + JavaScript UI (testdrive-jsui)
|
||||||
|
- **Key deps:** uv/pip, pytest, npm; see `pyproject.toml`, `package.json`, `Makefile`
|
||||||
|
|
||||||
|
## Dev Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make setup
|
||||||
|
make test
|
||||||
|
make test-js
|
||||||
|
make test-all
|
||||||
|
make lint
|
||||||
|
make build
|
||||||
|
make help
|
||||||
|
```
|
||||||
40
.claude/rules/workplan-convention.md
Normal file
40
.claude/rules/workplan-convention.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
## Workplan Convention (ADR-001)
|
||||||
|
|
||||||
|
File location: `workplans/MARKITECT-WP-NNNN-<slug>.md`
|
||||||
|
ID prefix: `MARKITECT-WP-`
|
||||||
|
|
||||||
|
Work items originate as files in this repo **before** being registered in the hub.
|
||||||
|
|
||||||
|
Canonical workplan/workstream frontmatter statuses are:
|
||||||
|
`proposed`, `ready`, `active`, `blocked`, `backlog`, `finished`, `archived`.
|
||||||
|
Use `proposed` for a newly drafted plan, `ready` after review against current
|
||||||
|
repo state, and `finished` when implementation is complete. `stalled` and
|
||||||
|
`needs_review` are derived health labels, not stored statuses.
|
||||||
|
|
||||||
|
Closed workplans may be moved to `workplans/archived/` with a completion-date
|
||||||
|
prefix: `YYMMDD-MARKITECT-WP-NNNN-<slug>.md`. The frontmatter id remains
|
||||||
|
unchanged; the prefix is only for quick visual reference.
|
||||||
|
|
||||||
|
Small opportunistic tasks discovered during another session use **Ad Hoc Tasks**:
|
||||||
|
`workplans/ADHOC-YYYY-MM-DD.md`, workstream slug `adhoc-YYYY-MM-DD`, and task ids
|
||||||
|
`ADHOC-YYYY-MM-DD-T01`, `T02`, etc. Use adhocs only for low-risk work completed
|
||||||
|
directly. Promote anything requiring analysis, design, approval, dependencies, or
|
||||||
|
multiple planned phases into a normal workplan.
|
||||||
|
|
||||||
|
Ecosystem todos from other agents arrive as `[repo:markitect-main]` hub tasks —
|
||||||
|
visible at session start. Pick one up by creating the workplan file, then registering
|
||||||
|
the workstream.
|
||||||
|
|
||||||
|
Task blocks use this shape:
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: MARKITECT-WP-NNNN-T01
|
||||||
|
status: wait | todo | progress | done | cancel
|
||||||
|
priority: high | medium | low
|
||||||
|
state_hub_task_id: "<uuid>" # written by fix-consistency — do not edit
|
||||||
|
```
|
||||||
|
|
||||||
|
Status progression is `todo` → `progress` → `done`; use `wait` for waiting or
|
||||||
|
blocked work and `cancel` for stopped work.
|
||||||
|
|
||||||
|
<!-- Ralph Loop rules and HEUREKA sequence: ~/.claude/CLAUDE.md — do not duplicate here -->
|
||||||
@@ -1,42 +1,18 @@
|
|||||||
<!-- custodian-brief: generated by fix-consistency — do not edit manually -->
|
<!-- custodian-brief: generated by fix-consistency — do not edit manually -->
|
||||||
# Custodian Brief — markitect-project
|
# Custodian Brief — markitect-main
|
||||||
|
|
||||||
**Domain:** markitect
|
**Domain:** communication
|
||||||
**Last synced:** 2026-04-21 22:28 UTC
|
**Last synced:** 2026-06-22 21:32 UTC
|
||||||
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
|
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
|
||||||
|
|
||||||
## Active Workstreams
|
## Active Workstreams
|
||||||
|
|
||||||
### TestDrive-JSUI — npm Publication
|
*(none — repo may need first-session setup)*
|
||||||
Progress: 0/9 done | workstream_id: `e203d487-01f1-494a-b14d-a436241a4c01`
|
|
||||||
|
|
||||||
**Open tasks:**
|
|
||||||
- · P.1 — Decide repository structure (monorepo vs standalone) `81c03377`
|
|
||||||
- · P.2 — Verify Markitect integration still works `f518601b`
|
|
||||||
- · P.3 — Resolve STANDALONE_PLAN.md status `d700098c`
|
|
||||||
- · P.4 — Pack and dry-run publish `94dd2a30`
|
|
||||||
- · P.5 — Create v1.0.0 release tag `d7c2ce00`
|
|
||||||
- · P.6 — Publish to npm and verify CDN `8bcde75e`
|
|
||||||
- · P.7 — Fresh install test in clean environment `61d14b53`
|
|
||||||
- … and 2 more open tasks
|
|
||||||
|
|
||||||
### Infospace Tooling — Stage 3 Close-out
|
|
||||||
Progress: 0/8 done | workstream_id: `830c888e-e1d4-43e6-8093-9b61e7578257`
|
|
||||||
|
|
||||||
**Open tasks:**
|
|
||||||
- · C.1 — Evaluate the 3 missing entities `0fa8f461`
|
|
||||||
- · C.2 — Run eval-summary and verify viability (6/6 PASS) `ba7d992c`
|
|
||||||
- · C.3 — Refresh metrics report from full 988-entity set `84a59244`
|
|
||||||
- · C.4 — Document advanced usage patterns `0ef75ee5`
|
|
||||||
- · C.5 — Add composition guide referencing supply-chain-vsm `864977db`
|
|
||||||
- · C.6 — Write performance notes `414496b0`
|
|
||||||
- · C.7 — S3.2: Complete clean per-chapter git history `21c865c1`
|
|
||||||
- … and 1 more open tasks
|
|
||||||
|
|
||||||
---
|
---
|
||||||
## MCP Orientation (when available)
|
## MCP Orientation (when available)
|
||||||
|
|
||||||
If the state-hub MCP server is reachable, call:
|
If the state-hub MCP server is reachable, call:
|
||||||
`get_domain_summary("markitect")`
|
`get_domain_summary("communication")`
|
||||||
This provides richer cross-domain context.
|
This provides richer cross-domain context.
|
||||||
If the MCP call fails, use this file as your orientation source.
|
If the MCP call fails, use this file as your orientation source.
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -91,6 +91,8 @@ debug_*.py
|
|||||||
|
|
||||||
# Claude Code local settings (user-specific permissions)
|
# Claude Code local settings (user-specific permissions)
|
||||||
.claude/settings.local.json
|
.claude/settings.local.json
|
||||||
|
# Claude Code runtime session locks (per-session, not content)
|
||||||
|
.claude/*.lock
|
||||||
|
|
||||||
.aider*
|
.aider*
|
||||||
|
|
||||||
|
|||||||
25
.repo-classification.yaml
Normal file
25
.repo-classification.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
repo_classification:
|
||||||
|
standard: Repo Classification Standard
|
||||||
|
version: '1.0'
|
||||||
|
classified_at: '2026-06-22'
|
||||||
|
classified_by: human
|
||||||
|
category: product
|
||||||
|
domain: communication
|
||||||
|
secondary_domains:
|
||||||
|
- infotech
|
||||||
|
- agents
|
||||||
|
capability_tags:
|
||||||
|
- knowledge
|
||||||
|
- documentation
|
||||||
|
- product-development
|
||||||
|
- platform
|
||||||
|
business_stake:
|
||||||
|
- product
|
||||||
|
- technology
|
||||||
|
- execution
|
||||||
|
business_mechanics:
|
||||||
|
- intention
|
||||||
|
- coordination
|
||||||
|
- operation
|
||||||
|
- adaptation
|
||||||
|
notes: Markitect successor to archived markitect-project; human confirmed.
|
||||||
219
AGENTS.md
Normal file
219
AGENTS.md
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
# Markitect Main — Agent Instructions
|
||||||
|
|
||||||
|
## Repo Identity
|
||||||
|
|
||||||
|
**Purpose:** Markitect Main - (fill in purpose)
|
||||||
|
|
||||||
|
**Domain:** communication
|
||||||
|
**Repo slug:** markitect-main
|
||||||
|
**Topic ID:** `36c7421b-c537-4723-bf75-42a3ebc6a1dc`
|
||||||
|
**Workplan prefix:** `MARKITECT-WP-`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## State Hub Integration
|
||||||
|
|
||||||
|
The Custodian State Hub tracks work across all domains. Interact via HTTP REST —
|
||||||
|
there is no MCP server for Codex agents.
|
||||||
|
|
||||||
|
| Context | URL |
|
||||||
|
|---------|-----|
|
||||||
|
| Local workstation | `http://127.0.0.1:8000` |
|
||||||
|
| Remote via tunnel | `http://127.0.0.1:18000` |
|
||||||
|
|
||||||
|
### Orient at session start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Offline brief — works without hub connection
|
||||||
|
cat .custodian-brief.md
|
||||||
|
|
||||||
|
# Active workstreams for this domain
|
||||||
|
curl -s "http://127.0.0.1:8000/workstreams/?topic_id=36c7421b-c537-4723-bf75-42a3ebc6a1dc&status=active" \
|
||||||
|
| python3 -m json.tool
|
||||||
|
|
||||||
|
# Check inbox
|
||||||
|
curl -s "http://127.0.0.1:8000/messages/?to_agent=markitect-main&unread_only=true" \
|
||||||
|
| python3 -m json.tool
|
||||||
|
```
|
||||||
|
|
||||||
|
Mark a message read:
|
||||||
|
```bash
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/messages/<id>/read" \
|
||||||
|
-H "Content-Type: application/json" -d '{}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Log progress (required at session close)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X POST http://127.0.0.1:8000/progress/ \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"summary": "what was done",
|
||||||
|
"event_type": "note",
|
||||||
|
"author": "codex",
|
||||||
|
"workstream_id": "<uuid>",
|
||||||
|
"task_id": "<uuid>"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Omit `workstream_id` / `task_id` when not applicable.
|
||||||
|
|
||||||
|
### Update task status
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/tasks/<task_id>" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"status": "progress"}'
|
||||||
|
# values: wait | todo | progress | done | cancel
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flag a task for human review
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s -X PATCH "http://127.0.0.1:8000/tasks/<task_id>" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"needs_human": true, "intervention_note": "reason"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Session Protocol
|
||||||
|
|
||||||
|
**Start:**
|
||||||
|
1. `cat .custodian-brief.md` — domain goal and open workstreams (offline-safe)
|
||||||
|
2. Check inbox: `GET /messages/?to_agent=markitect-main&unread_only=true`; mark read
|
||||||
|
3. Scan workplans: `ls workplans/` — note `status: ready`, `active`, or `blocked` files and open tasks
|
||||||
|
4. Check human-needed tasks: `GET /tasks/?needs_human=true`
|
||||||
|
|
||||||
|
**During work:**
|
||||||
|
- Update task statuses in workplan files as tasks progress
|
||||||
|
- Record significant decisions via `POST /decisions/`
|
||||||
|
|
||||||
|
**Close:**
|
||||||
|
1. Update workplan file task statuses to reflect progress
|
||||||
|
2. Log: `POST /progress/` with a summary of what changed
|
||||||
|
3. Note for the custodian operator: after workplan file changes, run from
|
||||||
|
`~/state-hub`:
|
||||||
|
```bash
|
||||||
|
make fix-consistency REPO=markitect-main
|
||||||
|
```
|
||||||
|
This syncs task status from files into the hub DB.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Credential and access routing
|
||||||
|
|
||||||
|
**Audience:** Codex, Claude Code, Grok, and custodian agents that call **llm-connect**
|
||||||
|
for inference. Run this check **before** requesting secrets, API keys, SSH access,
|
||||||
|
login tokens, or database passwords — in any repo, not only `ops-warden`.
|
||||||
|
|
||||||
|
ops-warden **issues SSH certificates only** (`warden sign`, `cert_command`). Every
|
||||||
|
other credential need belongs to another subsystem. **Do not** message
|
||||||
|
`ops-warden` on State Hub expecting a secret value; the reply is a pointer, not a key.
|
||||||
|
|
||||||
|
### Lookup (do this first)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
warden route find "<describe your need>" --json
|
||||||
|
warden route show <catalog-id> --json
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires the `warden` CLI from `~/ops-warden` (`uv tool install .` or `uv run warden`).
|
||||||
|
|
||||||
|
| Agent runtime | How to orient |
|
||||||
|
| --- | --- |
|
||||||
|
| **Codex / Grok** (shell, HTTP State Hub) | `warden route` commands above; inbox `to_agent=markitect-main` is for coordination, not secret vending |
|
||||||
|
| **Claude Code** (MCP when available) | `get_domain_summary("custodian")` for workstreams; **still** use `warden route` for credential ownership |
|
||||||
|
| **llm-connect** (inference service) | Never put secret retrieval in prompts; route custody to OpenBao/operator paths surfaced by `warden route` |
|
||||||
|
|
||||||
|
### Quick routing table
|
||||||
|
|
||||||
|
| I need… | Owner | ops-warden executes? |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| SSH cert (`adm`/`agt`/`atm`) | ops-warden | **Yes** — `warden sign` |
|
||||||
|
| API key, DB password, provider token | OpenBao (`railiance-platform`) | No — route only |
|
||||||
|
| Login / OIDC / MFA | key-cape / Keycloak | No — route only |
|
||||||
|
| Authorization decision | flex-auth | No — route only |
|
||||||
|
| activity-core → issue-core emission | activity-core + issue-core | No — `warden route show activity-core-issue-sink` |
|
||||||
|
| SSH tunnel | ops-bridge (+ `cert_command` from warden) | No — route only |
|
||||||
|
|
||||||
|
### Anti-patterns (do not do these)
|
||||||
|
|
||||||
|
- `POST /messages/` to `ops-warden` asking for `ISSUE_CORE_API_KEY`, `OPENROUTER_API_KEY`, etc.
|
||||||
|
- Inventing `warden secret`, `warden login`, `warden bao`, `warden tunnel` — they do not exist
|
||||||
|
- Pasting secrets into Git, State Hub, workplans, logs, or chat
|
||||||
|
|
||||||
|
### Other capabilities (reuse-surface)
|
||||||
|
|
||||||
|
Non-credential capabilities are usually discovered through **reuse-surface** federation
|
||||||
|
(`reuse-surface` registry / `capability.*` indexes). Credential routing is inlined in
|
||||||
|
every repo's agent instructions because it is high-frequency, high-risk, and easy to
|
||||||
|
get wrong.
|
||||||
|
|
||||||
|
**Canon:** `~/ops-warden/wiki/CredentialRouting.md` · catalog `~/ops-warden/registry/routing/catalog.yaml`
|
||||||
|
|
||||||
|
<!-- REPO-AGENTS-EXTENSIONS -->
|
||||||
|
<!-- Append repo-specific agent instructions below this marker.
|
||||||
|
The state-hub template sync preserves content after this line. -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workplan Convention (ADR-001)
|
||||||
|
|
||||||
|
Work items originate as files in this repo — not in the hub. The hub is a
|
||||||
|
read/cache/index layer that rebuilds from files.
|
||||||
|
|
||||||
|
**File location:** `workplans/MARKITECT-WP-NNNN-<slug>.md`
|
||||||
|
|
||||||
|
**Archived location:** finished workplans may move to
|
||||||
|
`workplans/archived/YYMMDD-MARKITECT-WP-NNNN-<slug>.md`. The `YYMMDD` prefix is
|
||||||
|
the completion/archive date; the frontmatter `id` does not change.
|
||||||
|
|
||||||
|
**Ad Hoc Tasks:** small opportunistic fixes discovered during a session use
|
||||||
|
`workplans/ADHOC-YYYY-MM-DD.md` with task ids `ADHOC-YYYY-MM-DD-T01`, etc. Use
|
||||||
|
this only for low-risk work completed directly; create a normal workplan for
|
||||||
|
anything needing analysis, design, approval, dependencies, or multiple phases.
|
||||||
|
|
||||||
|
**Frontmatter:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
id: MARKITECT-WP-NNNN
|
||||||
|
type: workplan
|
||||||
|
title: "..."
|
||||||
|
domain: communication
|
||||||
|
repo: markitect-main
|
||||||
|
status: proposed | ready | active | blocked | backlog | finished | archived
|
||||||
|
owner: codex
|
||||||
|
topic_slug: ...
|
||||||
|
created: "YYYY-MM-DD"
|
||||||
|
updated: "YYYY-MM-DD"
|
||||||
|
state_hub_workstream_id: "<uuid>" # written by fix-consistency — do not edit
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `proposed` for a new draft, `ready` after review against current repo
|
||||||
|
state, and `finished` after implementation. `stalled` and `needs_review` are
|
||||||
|
derived health labels, not frontmatter statuses.
|
||||||
|
|
||||||
|
**Task block format** (one per `##` section):
|
||||||
|
|
||||||
|
```
|
||||||
|
## Task Title
|
||||||
|
|
||||||
|
` ` `task
|
||||||
|
id: MARKITECT-WP-NNNN-T01
|
||||||
|
status: wait | todo | progress | done | cancel
|
||||||
|
priority: high | medium | low
|
||||||
|
state_hub_task_id: "<uuid>" # written by fix-consistency — do not edit
|
||||||
|
` ` `
|
||||||
|
|
||||||
|
Task description text.
|
||||||
|
```
|
||||||
|
|
||||||
|
Status progression: `todo` → `progress` → `done`; use `wait` for waiting/blocked work and `cancel` for stopped work.
|
||||||
|
|
||||||
|
To create a new workplan:
|
||||||
|
1. Write the file following the format above
|
||||||
|
2. Notify the custodian operator to run `make fix-consistency REPO=markitect-main`
|
||||||
|
(or send a message to the hub agent via `POST /messages/`)
|
||||||
130
CLAUDE.md
130
CLAUDE.md
@@ -1,120 +1,12 @@
|
|||||||
# CLAUDE.md
|
# Markitect Main — Claude Code Instructions
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
@SCOPE.md
|
||||||
|
@.claude/rules/repo-identity.md
|
||||||
## Custodian State Hub Integration
|
@.claude/rules/session-protocol.md
|
||||||
|
@.claude/rules/first-session.md
|
||||||
This project is tracked as the **markitect** domain in the Custodian State Hub.
|
@.claude/rules/workplan-convention.md
|
||||||
Hub topic ID: `5571d954-0d30-4950-980d-7bcaaad8e3e2`
|
@.claude/rules/stack-and-commands.md
|
||||||
|
@.claude/rules/architecture.md
|
||||||
**Session start:** Call `get_domain_summary("markitect")` via the `state-hub` MCP tool.
|
@.claude/rules/repo-boundary.md
|
||||||
If the hub is not reachable: `cd ~/the-custodian/state-hub && make api`
|
@.claude/rules/credential-routing.md
|
||||||
|
@.claude/rules/agents.md
|
||||||
**Session end:** Call `add_progress_event()` with `topic_id` above, a `summary`, and `event_type` (`note` / `milestone` / `blocker`).
|
|
||||||
|
|
||||||
**Available state-hub MCP tools:** `get_state_summary`, `get_domain_summary`, `add_progress_event`, `create_workstream`, `create_task`, `update_task_status`, `record_decision`, `resolve_decision`.
|
|
||||||
|
|
||||||
If the hub API is unavailable, use `curl` against `http://127.0.0.1:8000/docs`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Development Commands
|
|
||||||
|
|
||||||
All commands assume the `markitect-venv` virtual environment is active (`source ~/.venvs/markitect-venv/bin/activate` or equivalent). The package is installed in editable mode.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run the core test suite
|
|
||||||
pytest
|
|
||||||
|
|
||||||
# Run a single test file
|
|
||||||
pytest tests/test_issue_17_batch_processing.py
|
|
||||||
|
|
||||||
# Run tests by marker
|
|
||||||
pytest -m unit
|
|
||||||
pytest -m "not slow"
|
|
||||||
|
|
||||||
# Run with coverage
|
|
||||||
pytest --cov=markitect
|
|
||||||
|
|
||||||
# Run only fast unit tests (TDD inner loop)
|
|
||||||
pytest tests/unit/
|
|
||||||
|
|
||||||
# CLI entry point
|
|
||||||
markitect --help
|
|
||||||
|
|
||||||
# Infospace subcommands (primary active development area)
|
|
||||||
markitect infospace --help
|
|
||||||
markitect infospace eval-summary --update-metrics
|
|
||||||
|
|
||||||
# LLM helper commands
|
|
||||||
markitect llm-helper "<question>"
|
|
||||||
markitect llm-catalog
|
|
||||||
markitect llm-check
|
|
||||||
markitect llm-default
|
|
||||||
markitect llm-preference
|
|
||||||
|
|
||||||
# Install / reinstall in dev mode
|
|
||||||
pip install -e ".[analysis]"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
MarkiTect is a CLI-driven markdown engine that treats documents as structured, queryable information spaces. Entry point: `markitect/cli.py` → `main()` (Click group). All subcommand groups are registered at the bottom of `cli.py`.
|
|
||||||
|
|
||||||
### Core Modules (`markitect/`)
|
|
||||||
|
|
||||||
| Module | Purpose |
|
|
||||||
|--------|---------|
|
|
||||||
| `spaces/` | InformationSpace model — composability, events, history, transclusion, rendering, sync |
|
|
||||||
| `prompts/` | Prompt resolver, compiler, execution engine, quality gates, dependency graph, traceability |
|
|
||||||
| `llm/` | LLM adapter layer — 4 text providers + embedding adapter; 7-layer config resolution |
|
|
||||||
| `infospace/` | Infospace lifecycle — init, entity parsing, evaluation, composition, graph export |
|
|
||||||
| `analysis/` | Graph analysis (networkx) and FCA (Formal Concept Analysis, pure Python) |
|
|
||||||
| `schema*/` | Schema generation, validation, naming, refinement, metaschema |
|
|
||||||
| `core/` | Foundational parser, AST, serializer, workspace |
|
|
||||||
|
|
||||||
### LLM Configuration (`markitect/llm/`)
|
|
||||||
|
|
||||||
Resolution order (highest → lowest priority):
|
|
||||||
1. CLI flags (`--provider`, `--model`)
|
|
||||||
2. `MARKITECT_HELPER_MODEL` env var (model only)
|
|
||||||
3. User preference (`[llm.preference]` in `~/.config/markitect/config.toml`)
|
|
||||||
4. Directory preference (`[llm.preference]` in `.markitect.toml`)
|
|
||||||
5. Directory default (`[llm.default]` in `.markitect.toml`)
|
|
||||||
6. User default (`[llm.default]` in `~/.config/markitect/config.toml`)
|
|
||||||
7. Hardcoded fallback: `gemini/gemini-2.5-flash`
|
|
||||||
|
|
||||||
Canonical models: `markitect/llm/models.py` (`RunConfig`, `LLMResponse`) and `markitect/llm/adapter.py` (`LLMAdapter`). These are mirrored in the standalone `/home/worsch/llm-connect/` package (`llm_connect`), which is installed as a local path dependency. `markitect/prompts/execution/{models,llm_adapter}.py` are re-export shims for backward compatibility.
|
|
||||||
|
|
||||||
**Gotcha:** The `OPENROUTER_API_KEY` env var may hold a stale key — `unset OPENROUTER_API_KEY` before running LLM commands if you get auth errors. `claude-code` provider fails inside Claude Code sessions (nested session restriction).
|
|
||||||
|
|
||||||
### Infospace (`markitect/infospace/`)
|
|
||||||
|
|
||||||
An infospace is a directory-based collection of typed entities governed by an `infospace.yaml` config. Key files:
|
|
||||||
- `config.py` — config loading, `find_infospace_config()`, `DisciplineBinding`
|
|
||||||
- `entity_parser.py` — parse entity markdown files from `output/entities/<slug>.md`
|
|
||||||
- `evaluation.py` / `evaluation_io.py` — per-entity LLM evaluation (5 dimensions)
|
|
||||||
- `state.py` — `build_state()` aggregates entity + evaluation state
|
|
||||||
- `history.py` / `checks/` — viability tracking and collection-level checks
|
|
||||||
|
|
||||||
Slugs use **underscores** (e.g., `accumulation_of_stock`). Active example: `examples/infospace-with-history/` (988 entities).
|
|
||||||
|
|
||||||
### Layered Architecture
|
|
||||||
|
|
||||||
The project has a partially-implemented layered architecture separate from `markitect/`:
|
|
||||||
- `domain/` — domain models (issues, projects)
|
|
||||||
- `infrastructure/` — config, repositories, logging, connection management
|
|
||||||
- `application/` — application layer (mostly empty)
|
|
||||||
- `capabilities/` — pluggable capability packages (`issue-facade`, `release-management`, `testdrive-jsui`, `markitect-utils`, `markitect-content`, `kaizen-agentic`)
|
|
||||||
|
|
||||||
### Tests
|
|
||||||
|
|
||||||
Tests live in `tests/`. Many test files are named `test_issue_NNN_*.py` (TDD by issue). Layered tests follow `test_l{N}_*.py` naming. The `tests/unit/` subtree has the cleanest structure and covers `prompts/`, `spaces/`, `llm/`, `infospace/`, `analysis/`.
|
|
||||||
|
|
||||||
Pytest config is in `pytest.ini`. Relevant markers: `unit`, `integration`, `e2e`, `slow`, `performance`.
|
|
||||||
|
|
||||||
### Active Roadmap Files
|
|
||||||
|
|
||||||
- `roadmap/infospace-tooling/PLAN.md` — main infospace roadmap (S1 ✅ S2 ✅ S3 nearly done)
|
|
||||||
- `roadmap/infospace-s3-closeout/PLAN.md` — S3 close-out tasks (C.1–C.8)
|
|
||||||
- `roadmap/llm-shared-library/PLAN.md` — llm-connect extraction (S1+S2 done, S3 pending)
|
|
||||||
|
|||||||
2
SCOPE.md
2
SCOPE.md
@@ -89,7 +89,7 @@ MarkiTect turns fragmented knowledge (scattered docs, chats, notes) into structu
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Related / Overlapping Repositories
|
## Related / Overlapping
|
||||||
|
|
||||||
- `llm-connect` — standalone LLM adapter extracted from MarkiTect (dependency)
|
- `llm-connect` — standalone LLM adapter extracted from MarkiTect (dependency)
|
||||||
- `the-custodian` — tracks markitect workstreams; custodian canon includes a markitect domain charter
|
- `the-custodian` — tracks markitect workstreams; custodian canon includes a markitect domain charter
|
||||||
|
|||||||
141
docs/successor-gap-assessment.md
Normal file
141
docs/successor-gap-assessment.md
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
# markitect-main → Successor Repos: Gap Assessment
|
||||||
|
|
||||||
|
**Date:** 2026-05-23
|
||||||
|
**Author:** Claude (custodian session)
|
||||||
|
**Status:** Draft — awaiting Bernd's decisions on items A/B/C below
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
Bernd is retiring `markitect-main` and has transferred most functionality to
|
||||||
|
sibling repos. This document identifies what was provided by `markitect-main`
|
||||||
|
that is **not addressed** in those successors, and flags candidates that may
|
||||||
|
not fit any successor's intent.
|
||||||
|
|
||||||
|
## Successor Ecosystem (5 repos, not 3)
|
||||||
|
|
||||||
|
| Repo | Role |
|
||||||
|
|---|---|
|
||||||
|
| `markitect-tool` | Markdown syntax layer + structured-document primitives; defines source-adapter and render-adapter contracts. CLI: `mkt`. |
|
||||||
|
| `kontextual-engine` | Headless knowledge operations engine: artifacts, collections, persistence, relationships, workflow runs/manifests, query, quality/assessment, API. |
|
||||||
|
| `infospace-bench` | Application layer — concrete infospaces, evaluation methodology, reference pilots. |
|
||||||
|
| `markitect-filter` | Source-format ingestion adapters (`source.epub3`, `source.pdf`) implementing the markitect-tool source-adapter contract. |
|
||||||
|
| `markitect-quarkdown` | Render/export adapter — implements the markitect-tool render-adapter contract via Quarkdown. |
|
||||||
|
|
||||||
|
## Method
|
||||||
|
|
||||||
|
Analysis is grounded in each successor's own assessment docs (recent, May 2026):
|
||||||
|
|
||||||
|
- `markitect-tool/docs/markitect-main-scope-assessment.md`
|
||||||
|
- `kontextual-engine/docs/markitect-main-scope-assessment.md`
|
||||||
|
- `kontextual-engine/docs/system-layer-extraction-inventory.md`
|
||||||
|
- `kontextual-engine/docs/system-layer-migration-backlog.md`
|
||||||
|
- `infospace-bench/docs/markitect-main-scope-assessment.md`
|
||||||
|
- `infospace-bench/docs/legacy-infospace-feature-inventory.md`
|
||||||
|
- `infospace-bench/docs/replacement-acceptance-matrix.md`
|
||||||
|
|
||||||
|
Cross-checked against actual `markitect-main` module sizing (Python LOC) and
|
||||||
|
`__init__.py` docstrings.
|
||||||
|
|
||||||
|
**Confidence:** These successor docs are authoritative on *intent*. They have
|
||||||
|
**not** been line-verified to confirm every "reimplement"-classified item
|
||||||
|
actually landed in the successor. Where verification matters, it's flagged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## A. Doesn't fit any successor's intent — needs a new home or explicit retirement
|
||||||
|
|
||||||
|
These are explicitly pushed away by tool/engine/bench and are unrelated to
|
||||||
|
filter/quarkdown.
|
||||||
|
|
||||||
|
| markitect-main area | LOC | What it is | Status |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `markitect/finance/` | ~8,100 | Cost-tracking system: cost items, period allocation to issues, financial reports, audit trails | **Orphan.** markitect-main's own SCOPE.md lists "financial transactions" as out-of-scope. Belongs with issue/project-ops, not knowledge tooling. |
|
||||||
|
| `issue_tracker/` + `_issue-tracking/` + `.issues/` | ~1,200 | Issue tracking (finance allocates costs to these issues) | **Orphan to the five** — but likely already superseded by the `issue-facade` capability / `use-issues` skill. **Verify before retiring.** |
|
||||||
|
| `markitect/profile/` | ~1,600 | User-profile CRUD, multi-profile, DB-backed | **Orphan.** Unrelated to all five. (Distinct from quarkdown's *render* "profile".) |
|
||||||
|
| `markitect/production/` | ~3,800 | Deployment-readiness validation, cross-platform checks, perf benchmarking | Engine keeps only "structured error/audit *ideas*". Deployment-validation bulk is orphan. |
|
||||||
|
| `tools/`, `services/`, gitea/tddai glue | ~5,500 | Project-ops tooling | Out-of-scope everywhere. |
|
||||||
|
| `markitect/legacy/` + `legacy_compat.py` | ~2,700 | Backward-compat shims | Retire by definition. |
|
||||||
|
|
||||||
|
## B. Rendering / asset / plugin layer — only *partially* covered, real residual gap
|
||||||
|
|
||||||
|
**This is the most consequential gap.** `SCOPE.md` lists "Rendering: markdown
|
||||||
|
→ interactive HTML via plugin system (testdrive-jsui)" as an in-scope
|
||||||
|
capability of markitect-main.
|
||||||
|
|
||||||
|
| Area | LOC | Covered? |
|
||||||
|
|---|---|---|
|
||||||
|
| `markitect/plugins/` (generic processor/formatter/validator/exporter plugin system) | ~8,000 | **No.** tool defines a render-adapter *contract* and an *extension* point, but the general plugin runtime isn't carried. |
|
||||||
|
| `markitect/assets/` (content-addressable asset store, dedup, `.mdpkg` ZIP packaging, symlink handling) + `asset_registry.json` (277 KB) | ~6,000 | **No.** Bench says "leave behind unless a concrete export needs assets." |
|
||||||
|
| Interactive-HTML / testdrive-jsui rendering, `static/`, `themes/`, `templates/document.html`, JS UI | — | **Partial only.** quarkdown covers a *Quarkdown* export path; the interactive-HTML / JS-UI path has no home. |
|
||||||
|
|
||||||
|
**Decision needed:** spin these into a dedicated render/asset repo (sibling to
|
||||||
|
quarkdown), fold the asset store into one of the existing repos, or retire the
|
||||||
|
interactive-HTML path.
|
||||||
|
|
||||||
|
## C. The other "Information Space" lineage — `markitect/spaces/` (~11,000 LOC)
|
||||||
|
|
||||||
|
**Distinct from `markitect/infospace/`** (which infospace-bench inherited).
|
||||||
|
`spaces/` is an older/parallel abstraction with features bench did *not* take:
|
||||||
|
|
||||||
|
- event-driven change tracking & notifications
|
||||||
|
- persistent transclusion context with cross-space references
|
||||||
|
- bidirectional directory synchronization
|
||||||
|
- HTML rendering of spaces with caching/themes
|
||||||
|
|
||||||
|
Engine takes generic persistence concepts and bench takes infospace semantics,
|
||||||
|
but **these specific `spaces/` behaviors (bidirectional sync, event
|
||||||
|
notifications, cross-space transclusion context) aren't mapped anywhere.**
|
||||||
|
|
||||||
|
Likely intended as dead/superseded — but 11k LOC warrants an explicit "retire
|
||||||
|
vs salvage" call.
|
||||||
|
|
||||||
|
## D. Declined-by-design (confirm retirement, don't re-extract)
|
||||||
|
|
||||||
|
| Area | LOC | Disposition |
|
||||||
|
|---|---|---|
|
||||||
|
| `markitect/graphql/` | ~4,000 | All three explicitly declined GraphQL ("evidence of API need, not a commitment"). |
|
||||||
|
| `markitect/query_paradigms/` | ~3,500 | Engine/tool keep the *QueryResult envelope* concept but say "do not port the registry wholesale." |
|
||||||
|
| `markitect/proxy/` | ~870 | Non-markdown→md proxy with checksum/freshness tracking. **Overlaps markitect-filter.** Freshness/staleness-tracking mechanism may be worth checking against bench's deferred "stale-mappings." |
|
||||||
|
| `capabilities/` (top-level) | ~8,300 | Capability-packaging architecture; partially maps to tool (schema generation) but the packaging approach itself isn't carried. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What this means
|
||||||
|
|
||||||
|
The successors are, by their own assessments, **near complete for the
|
||||||
|
in-scope core** (parsing/schema → tool; persistence/workflow → engine;
|
||||||
|
infospace lifecycle → bench; ingestion → filter; one render path →
|
||||||
|
quarkdown). The truly unaddressed functionality is almost entirely the stuff
|
||||||
|
markitect-main accreted **beyond** its stated scope: finance, issue tracking,
|
||||||
|
user profiles, production/deployment validation, the asset/plugin/interactive-HTML
|
||||||
|
rendering stack, and the older `spaces/` abstraction.
|
||||||
|
|
||||||
|
## Decisions for Bernd
|
||||||
|
|
||||||
|
Three live decisions, not a long extraction backlog:
|
||||||
|
|
||||||
|
### Decision 1 — Render/asset stack (Section B)
|
||||||
|
The one with genuine product value left.
|
||||||
|
- **Option 1a:** new repo (sibling to quarkdown) for plugin runtime + asset store + interactive-HTML
|
||||||
|
- **Option 1b:** fold the asset store into an existing repo (most likely markitect-tool, behind a flag); retire interactive-HTML
|
||||||
|
- **Option 1c:** retire the interactive-HTML path entirely; trust quarkdown export as the single render story
|
||||||
|
|
||||||
|
### Decision 2 — `markitect/spaces/` (Section C)
|
||||||
|
- **Option 2a:** salvage bidirectional-sync / event-tracking / cross-space transclusion into engine (engine has the persistence story to support it)
|
||||||
|
- **Option 2b:** retire wholesale as superseded by infospace
|
||||||
|
|
||||||
|
### Decision 3 — Project-ops cluster (Section A: finance + issues + profile)
|
||||||
|
- **Option 3a:** confirm `issue-facade` already replaces `issue_tracker/` + `finance/`; retire both
|
||||||
|
- **Option 3b:** identify a home for any pieces worth keeping
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Suggested verification before deciding
|
||||||
|
|
||||||
|
If verification matters before committing:
|
||||||
|
|
||||||
|
- **For Decision 1:** grep the five repos for any render/asset adapter that already covers the HTML path beyond Quarkdown.
|
||||||
|
- **For Decision 2:** check whether engine's `OperationRun` + collection model can express bidirectional-sync semantics, or whether new primitives would be needed.
|
||||||
|
- **For Decision 3:** confirm whether `issue-facade` truly replaces `issue_tracker/` + `finance/` end-to-end.
|
||||||
|
|
||||||
|
Happy to do any of these focused passes when you're ready to decide.
|
||||||
12
registry/README.md
Normal file
12
registry/README.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Capability Registry
|
||||||
|
|
||||||
|
Markdown-first capability index for federation and reuse planning.
|
||||||
|
|
||||||
|
## Authoring
|
||||||
|
|
||||||
|
1. Copy a capability entry template (see reuse-surface `templates/capability-entry.template.md`).
|
||||||
|
2. Add the row to `indexes/capabilities.yaml`.
|
||||||
|
3. Run `reuse-surface validate` from a checkout with the CLI installed.
|
||||||
|
4. Merge to `main` and verify publish with `reuse-surface establish --publish-check`.
|
||||||
|
|
||||||
|
Federation contract: reuse-surface `docs/RegistryFederation.md`.
|
||||||
0
registry/capabilities/.gitkeep
Normal file
0
registry/capabilities/.gitkeep
Normal file
4
registry/indexes/capabilities.yaml
Normal file
4
registry/indexes/capabilities.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
version: 1
|
||||||
|
updated: '2026-06-16'
|
||||||
|
domain: helix_forge
|
||||||
|
capabilities: []
|
||||||
67
workplans/MARKITECT-WP-0001-statehub-bootstrap.md
Normal file
67
workplans/MARKITECT-WP-0001-statehub-bootstrap.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
id: MARKITECT-WP-0001
|
||||||
|
type: workplan
|
||||||
|
title: "Bootstrap State Hub integration"
|
||||||
|
domain: communication
|
||||||
|
repo: markitect-main
|
||||||
|
status: finished
|
||||||
|
owner: codex
|
||||||
|
topic_slug: communication
|
||||||
|
created: "2026-06-22"
|
||||||
|
updated: "2026-06-22"
|
||||||
|
state_hub_workstream_id: "dfc40b03-fe8e-49fe-b8d4-86eb1fe26b4a"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Bootstrap State Hub integration
|
||||||
|
|
||||||
|
Knowledge artifact management and markdown engine platform.
|
||||||
|
|
||||||
|
## Review Generated Integration Files
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: MARKITECT-WP-0001-T01
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "7455a381-a93d-4220-8f80-3b6ccf953cff"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-22: SCOPE.md and INTRODUCTION.md reviewed; AGENTS.md confirmed.
|
||||||
|
|
||||||
|
Review `INTENT.md`, `SCOPE.md`, `AGENTS.md`, and `.custodian-brief.md`.
|
||||||
|
Replace generated placeholders with repo-specific facts where needed.
|
||||||
|
|
||||||
|
## Verify Local Developer Workflow
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: MARKITECT-WP-0001-T02
|
||||||
|
status: done
|
||||||
|
priority: high
|
||||||
|
state_hub_task_id: "7e34bdab-aa49-49ca-b28a-b254725dd8db"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-22: Documented make-based Python/JS workflow.
|
||||||
|
|
||||||
|
Identify the repo's install, test, lint, build, and run commands. Add or refine
|
||||||
|
those commands in the agent instructions so future coding sessions can verify
|
||||||
|
changes confidently.
|
||||||
|
|
||||||
|
## Seed First Real Workplan
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: MARKITECT-WP-0001-T03
|
||||||
|
status: done
|
||||||
|
priority: medium
|
||||||
|
state_hub_task_id: "35a64da7-dda9-4315-901d-88c6827432d9"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Result 2026-06-22: MARKITECT-WP-0002 already exists (TestDrive npm publication).
|
||||||
|
|
||||||
|
Create the first implementation workplan for the repository's most important
|
||||||
|
next change. After workplan file updates, run from `~/state-hub`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make fix-consistency REPO=markitect-main
|
||||||
|
```
|
||||||
28
workplans/MARKITECT-WP-0002-testdrive-jsui-publication.md
Normal file
28
workplans/MARKITECT-WP-0002-testdrive-jsui-publication.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
id: MARKITECT-WP-0002
|
||||||
|
type: workplan
|
||||||
|
title: "TestDrive-JSUI — npm Publication"
|
||||||
|
domain: communication
|
||||||
|
repo: markitect-main
|
||||||
|
status: backlog
|
||||||
|
owner: codex
|
||||||
|
topic_slug: communication
|
||||||
|
created: "2026-06-22"
|
||||||
|
updated: "2026-06-22"
|
||||||
|
state_hub_workstream_id: "e203d487-01f1-494a-b14d-a436241a4c01"
|
||||||
|
---
|
||||||
|
|
||||||
|
# TestDrive-JSUI — npm Publication
|
||||||
|
|
||||||
|
Backlog workstream for publishing the TestDrive JSUI package to npm.
|
||||||
|
|
||||||
|
## Publication Readiness
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: MARKITECT-WP-0002-T01
|
||||||
|
status: todo
|
||||||
|
priority: medium
|
||||||
|
state_hub_task_id: "88b3c206-4d45-4bb3-bbb3-47443cdf2123"
|
||||||
|
```
|
||||||
|
|
||||||
|
Define package scope, versioning, and publication checklist for TestDrive-JSUI.
|
||||||
Reference in New Issue
Block a user