fix: remove stale pod guidance references
This commit is contained in:
parent
94c7aa793a
commit
da96d06f25
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Role
|
||||
|
||||
`client` contains reusable socket-client and runtime-command mechanics for talking to Pods from CLI/TUI code.
|
||||
`client` contains reusable socket-client and runtime-command mechanics for talking to Workers from CLI/TUI code.
|
||||
|
||||
## Boundaries
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ pub struct WorkerManifestConfig {
|
|||
pub engine: EngineManifestConfig,
|
||||
#[serde(default)]
|
||||
pub scope: ScopeConfig,
|
||||
/// Scope that may be subdelegated to spawned child Pods. Defaults empty.
|
||||
/// Scope that may be subdelegated to spawned child Workers. Defaults empty.
|
||||
#[serde(default)]
|
||||
pub delegation_scope: ScopeConfig,
|
||||
#[serde(default)]
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ impl std::fmt::Display for DashboardError {
|
|||
Self::Store(e) => write!(f, "session store error: {e}"),
|
||||
Self::NoWorkers => write!(
|
||||
f,
|
||||
"no Tickets or Pods found — create a Ticket with `yoi ticket create` or restore a Worker with `yoi resume`"
|
||||
"no Tickets or Workers found — create a Ticket with `yoi ticket create` or restore a Worker with `yoi resume`"
|
||||
),
|
||||
}
|
||||
}
|
||||
|
|
@ -2936,7 +2936,7 @@ fn build_orchestrator_launch_context(
|
|||
.with_target_workspace_root(original_workspace_root.to_path_buf());
|
||||
context.worker_name = Some(worker_name.to_string());
|
||||
context.user_instruction = Some(
|
||||
"Workspace Dashboard opened for this Ticket-enabled workspace. Coordinate Ticket routing and wait for explicit follow-up before spawning role Pods."
|
||||
"Workspace Dashboard opened for this Ticket-enabled workspace. Coordinate Ticket routing and wait for explicit follow-up before spawning role Workers."
|
||||
.to_string(),
|
||||
);
|
||||
context
|
||||
|
|
@ -4948,7 +4948,7 @@ fn orchestrator_queue_notification_message(
|
|||
) -> String {
|
||||
let title = ticket.title.replace(['\r', '\n'], " ");
|
||||
format!(
|
||||
"Workspace Dashboard Queue for Ticket `{}`, title `{}`: human authorized Orchestrator routing; this is not an unattended scheduler. Read the Ticket and inspect current Orchestrator workspace state. If unblocked, record routing and transition state queued -> inprogress before any worktree/SpawnWorker implementation side effects. After inprogress acceptance, use worktree-workflow for `.worktree/<task-name>` creation with tracked `.yoi` project records visible and `.yoi/memory` plus local/runtime/log/lock/secret-like `.yoi` paths excluded, then use multi-agent-workflow to run sibling coder/reviewer Pods (coder narrow child-worktree write scope, reviewer read-only by default). After reviewer approval and blocker resolution, integrate the implementation branch into the orchestration branch automatically, validate in the Orchestrator worktree, record the outcome, and clean up only child implementation worktrees/branches. Do not read, write, validate, merge, clean up, or run git operations in the root/original workspace. If blocked, record a concise reason and leave the Ticket queued or return it to planning with the missing-information reason.",
|
||||
"Workspace Dashboard Queue for Ticket `{}`, title `{}`: human authorized Orchestrator routing; this is not an unattended scheduler. Read the Ticket and inspect current Orchestrator workspace state. If unblocked, record routing and transition state queued -> inprogress before any worktree/SpawnWorker implementation side effects. After inprogress acceptance, use worktree-workflow for `.worktree/<task-name>` creation with tracked `.yoi` project records visible and `.yoi/memory` plus local/runtime/log/lock/secret-like `.yoi` paths excluded, then use multi-agent-workflow to run sibling coder/reviewer Workers (coder narrow child-worktree write scope, reviewer read-only by default). After reviewer approval and blocker resolution, integrate the implementation branch into the orchestration branch automatically, validate in the Orchestrator worktree, record the outcome, and clean up only child implementation worktrees/branches. Do not read, write, validate, merge, clean up, or run git operations in the root/original workspace. If blocked, record a concise reason and leave the Ticket queued or return it to planning with the missing-information reason.",
|
||||
ticket.id,
|
||||
title.trim()
|
||||
)
|
||||
|
|
|
|||
|
|
@ -834,7 +834,7 @@ fn ticket_queue_notification_message_carries_routing_contract() {
|
|||
)
|
||||
);
|
||||
assert!(message.contains("multi-agent-workflow"));
|
||||
assert!(message.contains("sibling coder/reviewer Pods"));
|
||||
assert!(message.contains("sibling coder/reviewer Workers"));
|
||||
assert!(message.contains("coder narrow child-worktree write scope"));
|
||||
assert!(message.contains("reviewer read-only by default"));
|
||||
assert!(message.contains(
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ That rule shapes the crate split. The runtime can restart, attach, compact, or d
|
|||
- `llm-engine` owns model-facing turns: history append, retries, continuation, pruning/compaction mechanics, tool loops, and provider-independent callbacks.
|
||||
- `session-store` owns replayable append-only conversation/session logs.
|
||||
- `pod-store` owns current Worker metadata keyed by Worker name.
|
||||
- `protocol` defines the socket message boundary between clients and Pods.
|
||||
- `protocol` defines the socket message boundary between clients and Workers.
|
||||
- `client` contains reusable one-shot socket/runtime-command mechanics so lower crates do not depend on the product CLI.
|
||||
- `manifest` resolves Profiles, Manifests, model/provider references, scopes, prompts, and tool permission policy into a runtime contract.
|
||||
- `tools` implements built-in tools with bounded output and policy-aware execution.
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ mcp = {
|
|||
|
||||
Local stdio MCP servers are ordinary local executables running with the user's OS permissions. Yoi's feature flags, Plugin permissions, and MCP config validation are not an operating-system sandbox and cannot prevent filesystem/network/process side effects once a later lifecycle implementation chooses to spawn a configured server.
|
||||
|
||||
## Spawned Pods
|
||||
## Spawned Workers
|
||||
|
||||
`SpawnWorker.profile` is optional and resolves through defaults when omitted. The only concrete capability delegation in the tool call is `SpawnWorker.scope`, and it must be a subset of the parent's effective scope.
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ After rebuilding and restarting during dogfooding, `current_exe()` can point at
|
|||
|
||||
## Multi-Worker work
|
||||
|
||||
Use child Pods for scoped tasks and reviews, but keep orchestration decisions in visible project records. Do not merge, close, or clean up merely because a child notification arrived.
|
||||
Use child Workers for scoped tasks and reviews, but keep orchestration decisions in visible project records. Do not merge, close, or clean up merely because a child notification arrived.
|
||||
|
||||
## Secrets and logs
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ Current workflow themes include:
|
|||
|
||||
## Child Pods
|
||||
|
||||
Spawned Pods are useful for scoped implementation, review, or exploration. They are not independent project authorities.
|
||||
Spawned Workers are useful for scoped implementation, review, or exploration. They are not independent project authorities.
|
||||
|
||||
A parent/orchestrator must verify:
|
||||
|
||||
|
|
|
|||
|
|
@ -357,7 +357,7 @@ impl ExpectedPanelTicketRow {
|
|||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct ExpectedDashboardContent {
|
||||
pub tickets: Vec<ExpectedPanelTicketRow>,
|
||||
pub pod_names: Vec<String>,
|
||||
pub worker_names: Vec<String>,
|
||||
pub companion_status: String,
|
||||
pub orchestrator_status: String,
|
||||
}
|
||||
|
|
@ -366,7 +366,7 @@ impl ExpectedDashboardContent {
|
|||
pub fn snapshot(&self) -> DashboardContentSnapshot {
|
||||
DashboardContentSnapshot {
|
||||
tickets: self.tickets.clone(),
|
||||
pod_names: self.pod_names.clone(),
|
||||
worker_names: self.worker_names.clone(),
|
||||
companion_status: self.companion_status.clone(),
|
||||
orchestrator_status: self.orchestrator_status.clone(),
|
||||
}
|
||||
|
|
@ -379,9 +379,9 @@ impl ExpectedDashboardContent {
|
|||
.map(ExpectedPanelTicketRow::description)
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ");
|
||||
let pods = self.pod_names.join(", ");
|
||||
let workers = self.worker_names.join(", ");
|
||||
format!(
|
||||
"tickets=[{tickets}] pods=[{pods}] companion={} orchestrator={}",
|
||||
"tickets=[{tickets}] workers=[{workers}] companion={} orchestrator={}",
|
||||
self.companion_status, self.orchestrator_status
|
||||
)
|
||||
}
|
||||
|
|
@ -390,7 +390,7 @@ impl ExpectedDashboardContent {
|
|||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct DashboardContentSnapshot {
|
||||
pub tickets: Vec<ExpectedPanelTicketRow>,
|
||||
pub pod_names: Vec<String>,
|
||||
pub worker_names: Vec<String>,
|
||||
pub companion_status: String,
|
||||
pub orchestrator_status: String,
|
||||
}
|
||||
|
|
@ -418,13 +418,13 @@ pub struct DashboardHeader {
|
|||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct DashboardCompanionState {
|
||||
pub pod_name: String,
|
||||
pub worker_name: String,
|
||||
pub status: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct DashboardOrchestratorState {
|
||||
pub pod_name: String,
|
||||
pub worker_name: String,
|
||||
pub status: String,
|
||||
pub detail: Option<String>,
|
||||
}
|
||||
|
|
@ -434,7 +434,7 @@ pub struct DashboardContentCategories {
|
|||
pub ticket_rows: usize,
|
||||
pub ready_ticket_rows: usize,
|
||||
pub planning_ticket_rows: usize,
|
||||
pub pod_rows: usize,
|
||||
pub worker_rows: usize,
|
||||
pub actionable_rows: usize,
|
||||
}
|
||||
|
||||
|
|
@ -457,14 +457,14 @@ impl DashboardContentReady {
|
|||
.filter(|ticket| self.snapshot.rows.iter().any(|row| ticket.matches(row)))
|
||||
.cloned()
|
||||
.collect(),
|
||||
pod_names: expected
|
||||
.pod_names
|
||||
worker_names: expected
|
||||
.worker_names
|
||||
.iter()
|
||||
.filter(|pod_name| {
|
||||
.filter(|worker_name| {
|
||||
self.snapshot
|
||||
.rows
|
||||
.iter()
|
||||
.any(|row| row.key.kind == "pod" && row.key.id == pod_name.as_str())
|
||||
.any(|row| row.key.kind == "worker" && row.key.id == worker_name.as_str())
|
||||
})
|
||||
.cloned()
|
||||
.collect(),
|
||||
|
|
@ -491,7 +491,7 @@ pub struct DashboardSourceBreakdown {
|
|||
pub total_elapsed_ms: u128,
|
||||
pub sources: Vec<DashboardSourceTiming>,
|
||||
pub ticket_rows: usize,
|
||||
pub pod_rows: usize,
|
||||
pub worker_rows: usize,
|
||||
pub diagnostics: usize,
|
||||
}
|
||||
|
||||
|
|
@ -870,7 +870,7 @@ impl PanelHarness {
|
|||
|
||||
/// Waits for the dashboard-content-ready observer event. Unlike first-frame
|
||||
/// or row-count readiness, this requires representative user-visible content:
|
||||
/// ready + planning Ticket rows and a Pod row, then checks the fixture-specific
|
||||
/// ready + planning Ticket rows and a Worker row, then checks the fixture-specific
|
||||
/// rows as a small snapshot of the expected dashboard content.
|
||||
pub fn wait_for_dashboard_content_ready(
|
||||
&mut self,
|
||||
|
|
@ -1442,7 +1442,7 @@ impl FixtureWorkspace {
|
|||
self.ready_overlay_ticket_row(),
|
||||
self.planning_fixture_ticket_row(),
|
||||
],
|
||||
pod_names: vec!["workspace".to_string()],
|
||||
worker_names: vec!["workspace".to_string()],
|
||||
companion_status: "spawned".to_string(),
|
||||
orchestrator_status: "unavailable".to_string(),
|
||||
}
|
||||
|
|
@ -1538,7 +1538,7 @@ impl FixtureWorkspace {
|
|||
config.command_args = vec![
|
||||
"--workspace".to_string(),
|
||||
self.workspace.display().to_string(),
|
||||
"--pod".to_string(),
|
||||
"--worker".to_string(),
|
||||
"e2e-rewind".to_string(),
|
||||
];
|
||||
config.artifacts_dir = self.artifacts_dir.join("rewind");
|
||||
|
|
@ -1997,8 +1997,8 @@ fn copy_dir_recursive(source: &Path, destination: &Path) -> Result<()> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn write_blocking_pod_metadata(data_home: &Path, pod_name: &str) -> Result<()> {
|
||||
let dir = data_home.join("yoi").join("pods").join(pod_name);
|
||||
fn write_blocking_pod_metadata(data_home: &Path, worker_name: &str) -> Result<()> {
|
||||
let dir = data_home.join("yoi").join("pods").join(worker_name);
|
||||
fs::create_dir_all(&dir)?;
|
||||
fs::write(dir.join("metadata.json"), b"not valid metadata for e2e\n")?;
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -68,11 +68,11 @@ fn ready_snapshot(rows: Vec<RenderedPanelRow>) -> DashboardContentReady {
|
|||
header: DashboardHeader {
|
||||
ticket_configured: true,
|
||||
companion: Some(DashboardCompanionState {
|
||||
pod_name: "workspace".to_string(),
|
||||
worker_name: "workspace".to_string(),
|
||||
status: "unavailable".to_string(),
|
||||
}),
|
||||
orchestrator: Some(DashboardOrchestratorState {
|
||||
pod_name: "workspace-orchestrator".to_string(),
|
||||
worker_name: "workspace-orchestrator".to_string(),
|
||||
status: "unavailable".to_string(),
|
||||
detail: Some("fixture blocks host Pod launch".to_string()),
|
||||
}),
|
||||
|
|
@ -84,7 +84,7 @@ fn ready_snapshot(rows: Vec<RenderedPanelRow>) -> DashboardContentReady {
|
|||
ticket_rows: 2,
|
||||
ready_ticket_rows: 1,
|
||||
planning_ticket_rows: 1,
|
||||
pod_rows: 1,
|
||||
worker_rows: 1,
|
||||
actionable_rows: 2,
|
||||
},
|
||||
}
|
||||
|
|
@ -147,7 +147,7 @@ fn dashboard_snapshot_rejects_missing_row_wrong_state_missing_overlay_and_missin
|
|||
.with_local_state("planning");
|
||||
let expected = ExpectedDashboardContent {
|
||||
tickets: vec![expected_ready.clone(), expected_planning.clone()],
|
||||
pod_names: vec!["workspace".to_string()],
|
||||
worker_names: vec!["workspace".to_string()],
|
||||
companion_status: "unavailable".to_string(),
|
||||
orchestrator_status: "unavailable".to_string(),
|
||||
};
|
||||
|
|
@ -330,8 +330,8 @@ fn panel_dashboard_content_ready_has_startup_budget() -> yoi_e2e::Result<()> {
|
|||
assert!(
|
||||
content_ready.categories.ready_ticket_rows > 0
|
||||
&& content_ready.categories.planning_ticket_rows > 0
|
||||
&& content_ready.categories.pod_rows > 0,
|
||||
"dashboard content ready must include ready Ticket, planning Ticket, and Pod categories; got {:?}; artifacts at {}",
|
||||
&& content_ready.categories.worker_rows > 0,
|
||||
"dashboard content ready must include ready Ticket, planning Ticket, and Worker categories; got {:?}; artifacts at {}",
|
||||
content_ready.categories,
|
||||
panel.artifacts().dir.display()
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user