IDKMesh should become a GitHub-first coordination product for bounded human/AI software work.
A small team should be able to connect a normal GitHub repository, configure several interchangeable worker/model paths, turn backlog items into bounded WorkUnits, dispatch only when policy permits it, retain candidate/evidence provenance, verify independently, and make explicit human integration decisions.
The default product should work without requiring an always-on IDKMesh server.
IDKMesh succeeds when that lifecycle is easy to understand, safe to operate, reproducible, and reusable on a second repository without adding project-specific coordinator code.
2. What IDKMesh is not trying to become
The connector-control-plane track must not turn into:
one custom scheduler per provider;
a bot that merges its own work;
an opaque AI project-health score;
a central identity provider;
a permanent-server requirement for small teams;
a GitHub-label-only state machine with no durable run record;
a new WorkUnit/ResultManifest/VerificationResult format;
an agent benchmark disguised as a product roadmap.
Provider/model capability, execution, verification, and repository authority remain separate concepts.
3. Product success gates
Development should be organized around evidence-bearing gates rather than feature count.
G0 — Core contracts are stable enough to implement against
Done when:
canonical WorkUnit/result/verification contracts remain unchanged by connector implementation;
RoutingDecision semantics are explicit;
connector kinds and normalized error taxonomy are stable enough for provider work;
capability tier is separate from authority;
provider-specific code does not leak into coordinator semantics.
G1 — One provider-neutral connector kernel works locally
Done when:
profiles validate;
registry resolves drivers;
probes produce normalized health/capability data;
route resolution is deterministic;
secret references do not leak values;
local metadata/idempotency survives process restart;
CLI can explain why a connector is eligible or rejected.
G2 — At least two materially different worker paths produce candidates
Done when:
one remote hosted agent path works;
one local/model-driven path works;
both consume the same RoutingDecision contract;
both bind to exact source revisions;
neither receives merge authority.
G3 — GitHub can safely coordinate work without an always-on server
Done when:
explicit dispatch is idempotent;
duplicate/replayed events do not duplicate provider work;
important run state survives ephemeral Actions runners;
actor/role checks occur before secrets/dispatch;
restart recovery reconstructs run state;
GitHub remains the human-visible control plane.
G4 — Candidate evidence converges independently of provider
Done when:
remote PR and local patch/artifact candidates normalize to the same result semantics;
exact source/candidate revisions are retained;
verification is evaluator-owned;
negative/failed attempts remain visible;
human decision remains separate from verification recommendation.
G5 — A newcomer can operate the system without editing Python
Done when:
bootstrap/configuration has a no-JSON happy path;
CLI/Issue Form surfaces explain configuration and routing;
A normal development slice should be small enough that one contributor or agent can understand, implement, test, and review it without needing to redesign adjacent components.
Preferred slice properties
A slice should normally:
have one primary behavioral outcome;
change one contract or one runtime boundary, not both;
have explicit inputs/outputs;
include focused tests in the same PR;
have no unresolved external dependency;
avoid touching more than one authority boundary;
preserve backwards compatibility unless the slice explicitly versions a contract;
be independently revertible.
Practical size target
This is guidance, not a rigid line-count gate:
XS: fixture/schema/test/doc-only or one pure helper;
S: one module or one interface plus tests;
M: one external integration edge with mocks/fake server plus tests;
anything larger should usually be split.
A PR that simultaneously changes profile schema, provider HTTP, GitHub dispatch, persistence, and UI is too large.
C4-C — process limits: wall time, disk/output bounds, exit normalization.
C4-D — sandbox policy: environment allowlist, no host credentials/Docker socket, network default-off. Promoted as #804; no raw-process fallback is allowed by ADR-0017.
#652 / PR #653 — C4-B/C exact-SHA disposable workspace and bounded local process result.
These remain reviewable foundations only: no real coding agent is executed by either slice.
The orchestration/artifact layer may advance behind the sandbox interface, but
real goose/Gemini/mini-SWE-agent execution stays blocked until #804 proves a
conforming production backend.
C4 exit gate: same WorkUnit semantics as remote agent, different execution path.
C5 — GitHub issue/webhook dispatch bridge (#578)
Goal: explicit GitHub action creates exactly one admitted run.
C7-C — preview/routing CLI: work preview and route explain. route explain (#758) and the offline idkmesh work preview --issue-json (issue snapshot file + project policy; no live fetch, no HTTP) are on main; live issue fetch and the Product Spine binding remain open.
C7-D — run CLI: create/status/cancel with idempotency.
C7-E — evidence CLI: show candidate/result/verification/human state.
C8-D — workflow wrapper generation: implemented by
idkmesh/github_bootstrap_workflows.py; four thin full-SHA-pinned
preview/dispatch/verify/status wrappers rendered deterministically with
least-privilege permissions and SHA-256 content identities. Rendering only.
Runner slice (follows C8-D): implemented by
idkmesh/github_workflow_runner.py; idkmesh github-workflow is what the
wrappers call. preview (project-policy WorkUnit preview from one issue) and
status (durable-ledger projection into the job summary) are read-only;
dispatch and verify fail closed (dispatch_unavailable,
verify_unavailable) because no stateless-runner authority primitive backs
them. See GitHub Workflow Runner.
Goal: preserve run state across ephemeral Actions workers.
Slices
C9-A — ledger record schema: run/event/route/attempt/idempotency/evidence references with exact WorkUnit/source binding and no authority.
C9-B — append-only local Git fixture: implemented by idkmesh/github_ledger_serialization.py; deterministic canonical bytes/digests, semantic attempt/route checks, complete sequence/digest-chain verification, and a two-commit local Git append fixture with no remote write authority.
C9-C — optimistic append protocol: implemented by idkmesh/github_ledger_append.py; compare-and-set git update-ref on one ref per run, LedgerConflict with the actual head, bounded retry, linear never-rewritten history, proven against real Git with concurrent writers. No remote write authority.
C9-D — idempotent admission record: implemented by idkmesh/github_ledger_admission.py; one admission ref per dispatch key created by compare-and-set, so duplicate or concurrent dispatch resolves to the existing run, a conflicting replay fails closed, and a crash before the first record is recoverable. No remote write authority.
C9-E — recovery reader: implemented by idkmesh/github_ledger_recovery.py; derives a run’s current state from its records, checks the lifecycle, attempts and human decision, keeps every failure, and surfaces ambiguous provider submissions. Read-only; no authority.
C9-F — killed-workflow recovery test: implemented by idkmesh/github_ledger_recovery_plan.py and tests/test_github_ledger_killed_workflow.py; a pure safe-next-step plan (reconcile an unconfirmed provider submission, never resubmit blindly) and an exhaustive kill matrix proving a killed coordinator is recovered with exactly one provider submission. Advisory; no authority.
C9-G — GitHub storage adapter: implemented by idkmesh/github_ledger_github_store.py; one dedicated orphan idkmesh-ledger branch, hash-derived admission/run-record paths, fast-forward-only (force=false) GitHub ref updates with bounded retry, C9-D admission semantics, and C9-E recovery reads while protected application branches remain untouched.
C9-H — retention/reference policy: large artifacts transient, essential evidence durable.
C12 — GitHub governance and secret baseline (#607)
Goal: turn repository-security assumptions into checked preconditions.
Slices
C12-A — governance policy object: implemented by
idkmesh/github_governance_policy.py; deterministic required/warn/optional
guards per governed operation, with structural false ceilings for automatic
admin mutation and ruleset-as-independent-review.
C12-B — branch/ruleset fixture evaluator: implemented by
idkmesh/github_governance_preflight.py; normalized trusted observations
map canonical guards to PASS/WARN/FAIL/UNKNOWN/NOT_APPLICABLE.
C12-C — workflow-permission linter: implemented in the same preflight
module; source-only checks cover contents: read, immutable remote
references, and checkout credential persistence.
C12-D — secret-bearing job rules: implemented as canonical
environment/approval guards plus workflow environment-binding checks.
C12-E — fork/untrusted-PR secret tests: deterministic regressions reject
PR-triggered secret-bearing or privileged head execution.
C12-F — CODEOWNERS sensitive-path recommendation generator: implemented
with an explicit owner argument and no repository writes.
C12-G — optional OIDC example/preflight: implemented as a workflow-shape
check plus examples/github-governance/oidc-cloud-dispatch.yml; no cloud
authentication is attempted.
C12-H — doctor --github rendering: implemented as a read-only CLI mode
that preserves the existing connector doctor and exits non-zero for
FAIL/UNKNOWN.
C12 exit gate:require_governance() fails closed when a required GitHub
guard is missing or unobservable. The C12 implementation performs no automatic
GitHub administration and does not treat configuration metadata as proof of
independent human review.
Goal: make bounded work understandable without raw JSON.
Slices
C13-A — Issue Form field contract.
C13-B — generated Issue Form template.
C13-C — issue body -> WorkUnit preview parser. Parser (#1049) merged; policy composition in the issue preview (use_intake_form) adds the restrict-only join with GitHubIssueWorkPolicy; the offline idkmesh work preview CLI over it is C7-C.
C13-D — incomplete/malicious fallback behavior. Parser fallback and the byte-identical generic-preview fallback are covered.
C13-E — label projection from canonical work/run state.
C13-F — optional GitHub Project field mapping.
C13-G — idempotent Project sync.
C13-H — newcomer no-JSON guide/fixture.
C13 exit gate: structured planning improves usability without becoming authority.
Goal: understand runs from GitHub before requiring the full Control Tower.
Slices
C14-A — Actions step/job summary renderer. Implemented on main by
idkmesh/github_actions_summary.py; presentation only, with exact
candidate/evidence digest binding.
C14-B — one idempotent issue/PR status comment. Implemented by
idkmesh/github_status_comment.py: reserve-before-create, exact-replay
no-op, same-comment PATCH for changed canonical status, safe retry of the
same interrupted PATCH, and fail-closed reconciliation for ambiguous first
creation or an overtaking update.
C14-C — durable evidence links after runner teardown. Implemented by
idkmesh/github_evidence_link.py: canonical GitHub blob/raw evidence URLs
must bind repository + exact 40/64-hex commit + safe file path; moving
branch/tag links, Actions artifacts, and ambiguous URL forms fail closed.
Both the Actions summary and C14-B status comment use the shared validator.
C14-D — public-safe evidence projection/filter. Implemented by
idkmesh/github_public_evidence.py
(contract): strict
whitelist over digest-bound Product Spine/evidence metadata; raw
prompts/logs/provider payloads/secrets and all actuation authority stay
excluded, and the renderer rejects any mapping outside the whitelist.
C14-E — read-only GitHub Pages generator. Implemented by
idkmesh/github_pages_site.py
(contract): a pure
render_github_pages_site() file map (index with health/active
work/verification debt, per-run provenance pages, public JSON) built only
from C14-D projections; no script, no external asset, no mutation control.
idkmesh pages-site (idkmesh/github_pages_writer.py) writes that map to a
local directory all-or-nothing, refusing path traversal, symlinks, and
unrecognised non-empty directories without --force. The publishing
workflow and outage fallback remain open (C14-H).
C14-F — pilot release metadata/provenance. Metadata record implemented by
idkmesh/github_release_provenance.py
(contract) and
idkmesh release-provenance: binds a proposed tag, target commit, and
artifact digests (caller-supplied, recorded as unverified) to the C14-D
evidence a release references, with fixed all-false claims and authority and
no timestamps. It creates no tag, GitHub Release, or attestation. Still
open: the pilot release itself, which needs the second-project pilot (C11)
and a human-approved release.
C15-F — heterogeneous comparison smoke: same bounded task class can be attempted by Jules/OpenHands without duplicate automatic dispatch.
C15-G — zero-project-spend experiment: only claim $0 when the actual OpenHands runtime/model route is measured at $0.
Safety rules
agent-ready approval remains separate from worker selection;
OpenHands never counts as independent verification of its own candidate;
no autonomous merge/approval/settings authority;
no automatic fan-out to Jules and OpenHands from one issue signal;
hosted inference is not labeled free unless measured.
C15 exit gate: one low-risk issue can follow issue -> OpenHands run -> candidate PR -> normal IDKMesh CI -> human decision with exact run/source provenance and no authority widening.
UI — Human Control Tower (#572)
Goal: make system state understandable to a human without creating a second source of truth.
After C1 profile/registry/probe contracts are stable:
C2 Jules HTTP work;
C3 model-provider work;
C9 ledger schema/local mechanics;
C10 role vocabulary/policy evaluator;
C12 governance metadata evaluator;
C13 Issue Form UX;
C14 read-only summary renderer;
UI read-only renderers.
Avoid parallel edits to the same central routing/profile contract until each version is merged.
9. Immediate executable wave
The repository should now focus on a small wave rather than opening every future slice.
Wave 1 — converge the C1 implementation stack
All C1 micro-slices now have implementation candidates. Do not create more C1 feature branches until this stack is reviewed, integrated in dependency order, retargeted to current main, and the exact-head gates are green.
#611 -> PR #624 — profile loader/validator;
#613 -> PR #625 — registry/fake drivers;
#614 -> PR #626 — normalized probes;
#615 -> PR #627 — secret refs/redaction;
#616 -> PR #628 — SQLite/idempotency;
#617 -> PR #629 — validate/list CLI;
#618 -> PR #656 — probe/doctor/route-explain CLI;
#619 -> PR #657 — adversarial fixtures/tests.
The stacked review order is #624 -> #625 -> #626 -> #629 -> #656 -> #657, with #627/#628 converged from the C1-B base at the appropriate points. Queued CI is not passing evidence.
Wave 2 — can begin once C1-B/C/D contracts are merged
Use .github/ISSUE_TEMPLATE/05-development-slice.md when promoting a catalogued slice into a GitHub issue. The template mirrors the fields below so boundedness is enforced at issue creation time rather than discovered during review.
Every slice issue/PR should include:
Goal: one sentence;
Inputs: exact existing contracts/files/events it consumes;
Outputs: exact new object/API/behavior;
Non-goals: adjacent responsibilities it must not absorb;
Acceptance tests: deterministic and locally runnable when possible;
Authority statement: what the slice is explicitly not allowed to approve/merge/change;
Dependencies: only merged/frozen upstream contracts;
Evidence: test command, fixture, or retained run that proves completion;
Follow-on: the next slice unlocked by this one.
If those fields cannot be written clearly, the slice is probably still too large or too speculative.
11. Project management rule
The umbrella tracker (#570) should show only:
north-star gates G0-G7;
component status C1-C15;
current executable wave;
evidence links;
blockers.
Detailed implementation belongs in component issues and promoted micro-slice issues.
This keeps #570 readable for humans while still allowing many contributors/agents to work independently.
12. Current status at this checkpoint
As of this document:
connector-control-plane architecture/specification is on main;
model-tier dispatcher execution plan is on main;
the pure C1 routing kernel and focused tests are on main;
C1 implementation candidates exist through the adversarial exit-gate slice (#624-#629, #656, #657); integration/CI evidence remains pending;
C4-A and C4-B/C have concrete implementation PRs (#648, #653);
C15 OpenHands is now tracked explicitly by #641;
CI/Jules generation backpressure is tracked by #651 with implementation PR #655, because verification capacity must bound new agent generation;
C2-C15 remain product components until their exit gates are demonstrated;
the next C1 action is convergence/review, not additional feature slicing.