Repository navigation
New Dawn
New Dawn
The executor v2 engine becomes the product. A payload is data and the engine renders every document; the shell scripts are gone; the skills speak the v2 protocol; a payload that means nonsense is refused before it lands.
What changed
- Payloads are data. Sections carry
prose,bullets,tables(columns+rows), andcode. No string in a payload may carry markdown syntax — a pipe table, a fence, or a heading isnotMatch; a row wider than its columns isrow_width; a blank value isnonBlank; a section with no shape isempty_section;sections[].idis unique because a reviewer cites it.engine._render_docis the only writer of document markdown, so the store has exactly one renderer. - Contracts are enforced, not hoped for.
schemas.pyis a closed mini-validator with anchored patterns, back-references tying a task to its plan, numeric bounds pinned by a literal table, named object invariants, and 37 documented refusal codes thattest_docs_agreement.pykeeps in step with the code in both directions. A newreferences/rejections.mdlists every code with its field and the action that clears it. - The store has one writer. The journal is the state — hash-chained, and recomputed by
check, which refuses a store edited by hand. Views are projections. A dispatch is answered exactly once.executor decideexists sogate_decision,ruling, andresumecarryactor: human; a worker cannot approve its own work. - Autonomy is fail-closed. Every phase defaults to
deny; every ambiguity — a missing file, an unlisted phase, a typo'd mode — resolves todeny. The pick-class phases and handoff never clear automatically. An auto-cleared gate is journaled asby: "auto", visibly distinct from a humanpassed. - Plans are audited as a set between planning and execution — coverage, seam closure, ordering, constraint propagation, file ownership. Execution cannot start until every plan is clean or a human waives a finding by
ruling. - Evidence is capability-aware. The verifier records the strongest feasible evidence per criterion, or an explicit
unavailablewith a named blocker — never a claim.executor statuscounts every criterion proven / failed / unavailable / unanswered, because a criterion nobody ran is unproven however obviously it must work. - Cross-platform for real, not by assertion. CI runs the suite on Ubuntu, macOS and Windows. That matrix earned its place immediately: it found a validator that disagreed with itself about path separators, a store lock whose contended acquire held a descriptor for the OS's own retry window, and a linter whose CRLF handling changed line numbers. All three are fixed, and the tree now carries tests that pin each so they cannot return.
Measured, not claimed
| Gate | Result |
|---|---|
| Tests | 722 tests, OK |
| Branch coverage | 100.00% — 2200 statements, 926 branches, 0 missed, 0 partial |
| Mutation | schemas.py 260 mutants, 254 caught, 6 equivalent survivors allow-listed with reasons |
| OS matrix | ubuntu, macos, windows — all green |
| Validators | validate_skills.py exit 0 · lint-prompt-injection.py exit 0 |
Install
npx skills add Atri10/executor
export PYTHONPATH=<clone>/engine
python3 -m executor --version # 2.0.0The engine has no runtime dependencies beyond the standard library. The README is the single design document: the protocol, the reasoning behind each invariant, and the flows that drive it.