Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devague/current_plan
Original file line number Diff line number Diff line change
@@ -1 +1 @@
devague-ships-a-sharper-end-to-end-method-a-guided
devague-multi-repo-efforts
268 changes: 268 additions & 0 deletions .devague/frames/devague-multi-repo-efforts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
{
"slug": "devague-multi-repo-efforts",
"title": "devague multi-repo efforts",
"schema_version": 1,
"status": "exported",
"created": "2026-07-06T21:47:44Z",
"updated": "2026-07-06T21:49:32Z",
"claims": [
{
"id": "c1",
"kind": "announcement",
"text": "devague supports multi-repo efforts: one effort \u2014 frame, plan, and workforce fan-out \u2014 can span multiple repositories instead of stopping at the edge of a single repo",
"origin": "user",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h1",
"text": "honest only if a plan whose tasks target >=2 repos converges and exports without hand-editing state JSON",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c2",
"kind": "audience",
"text": "the operator agent + user running efforts that span AgentCulture sibling repos (e.g. devague + guildmaster + eidetic-cli), and the workforce subagents briefed per task",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h7",
"text": "the multi-repo surface is exercised entirely through the existing operator skills (scope/think/spec-to-plan/assign-to-workforce) \u2014 no new privileged tooling beyond what the audience already runs",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c3",
"kind": "before_state",
"text": "an effort lives in one cwd-relative .devague/ per repo (store.py:1-3 'the frames live in the repo being specced'; plan_store.py:18) \u2014 a cross-repo effort must be hand-split into disconnected per-repo frames with no shared convergence gate",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h8",
"text": "verified against the shipped code at 0.15.0: store.py:15-18 and plan_store.py:18-19 are cwd-relative and no repo field exists in frame.py or plan.py",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c4",
"kind": "why_it_matters",
"text": "the last Colleague-assisted effort showed real efforts scale past one repo; devague's honesty gates should cover the whole effort, not stop at the repo edge",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h9",
"text": "the four pain points are the user's own report (2026-07-07): no shared convergence, task-to-repo mapping, fan-out mechanics, review across repos \u2014 not inferred",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c5",
"kind": "after_state",
"text": "one effort spans repos end-to-end: tasks name their target repo, the waves payload briefs the workforce per repo, and the human gates stay explicit across all touched repos",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h10",
"text": "honest only if every element is deliverable by the decided shape: hub-repo state (q2), repo-tagged tasks in one plan (q3), per-repo PRs with worktree-merge dependency ordering (q4)",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c6",
"kind": "requirement",
"text": "a plan task can name the repo it targets \u2014 devague/plan.py Task carries summary/acceptance/deps/covers today, no repo dimension; the workforce brief needs one",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h2",
"text": "existing single-repo frames/plans load unchanged: repo-less tasks stay valid (fail-closed schema bump, default = the effort's home repo)",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c7",
"kind": "requirement",
"text": "the waves payload carries each task's repo target so the operator creates the worktree in the right repo \u2014 cli/_commands/plan.py:326 emits bare task ids today; natural carrier is the #53 t9 enriched payload",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h3",
"text": "the repo field in `waves --json` is descriptive text the operator resolves \u2014 devague never validates it against the filesystem",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c8",
"kind": "requirement",
"text": "assign-to-workforce covers the multi-repo fan-out: per-repo worktrees, per-repo TDD gates, and the final-PR gate across every touched repo \u2014 SKILL.md today hard-assumes one repo (one `../worktrees` root, one main branch, one final PR)",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h4",
"text": "the TDD gate runs per repo: a task's tests pass before and after the merge in that task's repo; a green suite in one repo never vouches for another",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c9",
"kind": "boundary",
"text": "the CLI stays deterministic and non-orchestrating (issue 20): multi-repo lands as descriptive metadata only \u2014 the CLI never clones a repo, never reads or writes another repo's files, never manages worktrees or backends",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h5",
"text": "a boundary audit (grep/bandit, as in #53 t14) shows this effort added no git plumbing, repo I/O, or subprocess orchestration to the devague package",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c10",
"kind": "non_goal",
"text": "no change to dependency-wave computation \u2014 plan.py:172 dependency_waves layers tasks purely by deps and is already repo-agnostic",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c11",
"kind": "non_goal",
"text": "devague is not becoming a workspace manager or monorepo tool: no repo discovery, no checkout management, no cross-repo git plumbing in the CLI",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c12",
"kind": "assumption",
"text": "multi-repo lands on top of the committed #53 sharper-method plan (t1-t14, unimplemented) without forking it \u2014 per-item instructions (t2/t5) and the enriched waves payload (t9) are carriers for repo targets, not competitors",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c13",
"kind": "assumption",
"text": "the motivating Colleague effort is the eidetic 3-layer memory plan spanning eidetic-cli, devague skills, and culture agents (eidetic recall, record of 2026-06-20) \u2014 to be confirmed by the user",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c14",
"kind": "success_signal",
"text": "one real effort touching >=2 repos runs scope -> frame -> plan -> fan-out end-to-end on the shipped surface, with each task built in its target repo and every touched repo getting its reviewed PR",
"origin": "llm",
"status": "confirmed",
"honesty_conditions": [
{
"id": "h6",
"text": "the end-to-end run is real (>=2 actual repos, committed as a worked example or e2e evidence), not a single-repo run relabeled",
"status": "confirmed"
}
],
"hard_questions": [],
"links": []
},
{
"id": "c15",
"kind": "decision",
"text": "pain points (user, 2026-07-07, q1): the Colleague effort lacked shared convergence, task-to-repo mapping, fan-out mechanics, and cross-repo review \u2014 all four are the problem to solve",
"origin": "user",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c16",
"kind": "decision",
"text": "state home (q2): the effort's hub repo holds the single .devague/ frame+plan; sibling repos are referenced by name in tasks \u2014 the cwd-relative store is unchanged",
"origin": "user",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c17",
"kind": "decision",
"text": "granularity (q3): one frame + one plan per effort with repo-tagged tasks; one convergence gate and one dependency graph across repos \u2014 no meta-frame layer",
"origin": "user",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c18",
"kind": "decision",
"text": "human gate 3 (q4): one final PR per touched repo, reviewed together as one effort; a cross-repo dependent task starts when its dependency's worktree merge (main-agent TDD gate) lands, not its PR merge",
"origin": "user",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
},
{
"id": "c19",
"kind": "decision",
"text": "sequencing (q5): this effort exports its own spec+plan building on the #53 carriers (per-item instructions t2/t5, enriched waves t9), implemented after t1-t14 \u2014 the committed #53 plan is not reopened",
"origin": "user",
"status": "confirmed",
"honesty_conditions": [],
"hard_questions": [],
"links": []
}
],
"open_vagueness": [
{
"id": "v1",
"text": "exact schema shape and naming of the repo target (task-level field vs plan-level repo list vs instruction-carried) \u2014 a build-plan detail deferred to the /spec-to-plan leg",
"kind": "unknown_nonblocking",
"claim_id": null
}
]
}
Loading