Closes #86. Adds: - bin/crucible_mcp_server.py (schedule, dependency, capacity proofs) - docs/crucible-first-cut.md - playbooks/verified-logic.yaml - config.yaml crucible MCP server entry
83 lines
1.7 KiB
Markdown
83 lines
1.7 KiB
Markdown
# Crucible First Cut
|
|
|
|
This is the first narrow neuro-symbolic slice for Timmy.
|
|
|
|
## Goal
|
|
|
|
Prove constraint logic instead of bluffing through it.
|
|
|
|
## Shape
|
|
|
|
The Crucible is a sidecar MCP server that lives in `timmy-config` and deploys into `~/.hermes/bin/`.
|
|
It is loaded by Hermes through native MCP discovery. No Hermes fork.
|
|
|
|
## Templates shipped in v0
|
|
|
|
### 1. schedule_tasks
|
|
Use for:
|
|
- deadline feasibility
|
|
- task ordering with dependencies
|
|
- small integer scheduling windows
|
|
|
|
Inputs:
|
|
- `tasks`: `[{name, duration}]`
|
|
- `horizon`: integer window size
|
|
- `dependencies`: `[{before, after, lag?}]`
|
|
- `max_parallel_tasks`: integer worker count
|
|
|
|
Outputs:
|
|
- `status: sat|unsat|unknown`
|
|
- witness schedule when SAT
|
|
- proof log path
|
|
|
|
### 2. order_dependencies
|
|
Use for:
|
|
- topological ordering
|
|
- cycle detection
|
|
- dependency consistency checks
|
|
|
|
Inputs:
|
|
- `entities`
|
|
- `before`
|
|
- optional `fixed_positions`
|
|
|
|
Outputs:
|
|
- valid ordering when SAT
|
|
- contradiction when UNSAT
|
|
- proof log path
|
|
|
|
### 3. capacity_fit
|
|
Use for:
|
|
- resource budgeting
|
|
- optional-vs-required work selection
|
|
- capacity feasibility
|
|
|
|
Inputs:
|
|
- `items: [{name, amount, value?, required?}]`
|
|
- `capacity`
|
|
|
|
Outputs:
|
|
- chosen feasible subset when SAT
|
|
- contradiction when required load exceeds capacity
|
|
- proof log path
|
|
|
|
## Demo
|
|
|
|
Run locally:
|
|
|
|
```bash
|
|
~/.hermes/hermes-agent/venv/bin/python ~/.hermes/bin/crucible_mcp_server.py selftest
|
|
```
|
|
|
|
This produces:
|
|
- one UNSAT schedule proof
|
|
- one SAT schedule proof
|
|
- one SAT dependency ordering proof
|
|
- one SAT capacity proof
|
|
|
|
## Scope guardrails
|
|
|
|
Do not force every answer through the Crucible.
|
|
Use it when the task is genuinely constraint-shaped.
|
|
If the problem does not fit one of the templates, say so plainly.
|