Skip to content
Merged
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
4 changes: 2 additions & 2 deletions docs/PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -478,8 +478,8 @@ Fix-/Review-/Queue-Abnahme bleibt Release-Vorgänger; KI-30 wird nicht vorzeitig
| Z4-W118B-PROFILE | [Archiv][pakete] | bestehender Root-Serverjob, Claude Sonnet; kein Doppelstart | positive PROBE von Root abgenommen | eigener Worktree | B | Erledigt #678 (merged 2026-10-08T15:58:08Z) | siehe Archiv | 67c1ca17 |
| Z4-M4B-0-AUTH | Transaktionslokale Run-/Owner-/Fence-/Rollen-/Projektautorisierung, store/development_runs.rs und ggf. development_launches.rs, 180–260 ALL | Chief weist einen Nahtowner zu | st nach #632 frei; freigegebene Sicherheitskorrektur bei deaktiviertem Continuous Mode | eigener Worktree | A | Erledigt: #1607 (merged 2026-10-16); nur die Prüffunktion, kein Schreiber angebunden; Sicherheitsbefund besteht bis Z4-M4B-4-IMPORT fort; Continuous bleibt deaktiviert und eingefroren. | dieselbe Schreibtransaktion, stale/fremd/falsche Rolle/fehlendes Ziel abweisen; keine neue Auth-Transaktion/Migration; Rot vor Fix, eigene prepush und zwei Fremdreviews | fea04970 |
| Z4-M4B-1a-PLUMB | Autorität (Run, Owner, Fence; None = Operator) bis zu den vier Schreibern durchreichen, ohne Verhaltensänderung; die hier ursprünglich vorgesehene 403/refused-Korrektur wird verbindlich in GOAL nachgeholt; api.rs, main.rs, hq_routes.rs, planning_access.rs, Tests, 120–200 ALL (Schätzung) | ein serieller st/api/mn-Owner; Chief weist zu | Z4-M4B-0-AUTH (#1607); Nähte `api.rs` und `main.rs` frei | eigener Worktree | A | Erledigt: reine Durchreichung mit #1836 gemergt (22.10.2026, 9cc16b85). | No-Test (reines Durchreichen), bestehende Suite grün; Root dokumentierte Review-/PLAN-Regelabweichungen zu #1836; 403/refused noch nicht durch PLUMB geliefert, verbindliche Nachholung mit deterministischem Test in GOAL; Gesamtbefund bis IMPORT nicht geschlossen | – |
| Z4-M4B-1-GOAL | Atomare Autorisierung und Goal/Replan, continuous.rs plus api/planning_access/Tests/main, 220–290 ALL | ein serieller st/api/mn-Owner | Z4-M4B-1a-PLUMB; freigegebene Sicherheitskorrektur ohne Continuous-Aktivierung | eigener Worktree | A | Erledigt nach Merge von #1842: atomarer GOAL-Schreiber geliefert; vor Merge bleiben Fremdreviews und Root-Abnahme ausstehend. Sicherheitsbefund bis Z4-M4B-4-IMPORT offen; Continuous bleibt eingefroren. | deterministisches kompilierendes Fence-Interleaving-Rot; stale ohne Goal/Event; PLANNING_REFUSED muss HTTP 403 und audit_planning mit refused ergeben (eigener deterministischer Rot vor Fix); Alle vier Planungs-POSTs liefern Some(Run/Owner/Fence), Operator explizit None; Scoped Goal-POST erreicht das erforderliche create_continuous_goal_with_authority mit gebundener Run-/Owner-/Fence-Autorität, Operator None; kein ignorierender Produktionsdefault für Goal, kein Goal-Legacy-Routenbypass; Import/Task/Zuweisung behalten ihre Durchreicher bis zum eigenen Paket; scoped control/queue bleiben gesperrt; gültiger Coordinator erfolgreich, autonome Root operator-only, Operator/Audit erhalten; eigene prepush, zwei zulässige Fremdreviews und GPT-Beobachter gemäß AGENTS.md | 2be81e2e |
| Z4-M4B-2-TASK | Atomare Taskanlage, gleicher begrenzter Dateisatz wie GOAL, 180–270 ALL | ein serieller st/api/mn-Owner | Z4-M4B-1-GOAL (Nahtübergabe) | eigener Worktree | A | Geplant: strikt seriell (Nutzer 16.10., K7 A; Prüfbericht 16.10.: der Befund gilt weiter); Sicherheitsbefund besteht bis Z4-M4B-4-IMPORT fort, Continuous bleibt eingefroren | Fence-Interleaving-Rot; stale ohne Task/Event; eigenes Projekt erfolgreich, fremde Goals/Dependencies abweisen, Operator erhalten; eigene prepush/zwei Fremdreviews | 8dbd5dc7 |
| Z4-M4B-1-GOAL | Atomare Autorisierung und Goal/Replan, continuous.rs plus api/planning_access/Tests/main, 220–290 ALL | ein serieller st/api/mn-Owner | Z4-M4B-1a-PLUMB; freigegebene Sicherheitskorrektur ohne Continuous-Aktivierung | eigener Worktree | A | Erledigt: #1842 (merged 2026-10-22T18:35:12Z, fa4f2d9a). Sicherheitsbefund bis Z4-M4B-4-IMPORT offen; Continuous bleibt eingefroren. | deterministisches kompilierendes Fence-Interleaving-Rot; stale ohne Goal/Event; PLANNING_REFUSED muss HTTP 403 und audit_planning mit refused ergeben (eigener deterministischer Rot vor Fix); Alle vier Planungs-POSTs liefern Some(Run/Owner/Fence), Operator explizit None; Scoped Goal-POST erreicht das erforderliche create_continuous_goal_with_authority mit gebundener Run-/Owner-/Fence-Autorität, Operator None; kein ignorierender Produktionsdefault für Goal, kein Goal-Legacy-Routenbypass; Import/Task/Zuweisung behalten ihre Durchreicher bis zum eigenen Paket; scoped control/queue bleiben gesperrt; gültiger Coordinator erfolgreich, autonome Root operator-only, Operator/Audit erhalten; eigene prepush, zwei zulässige Fremdreviews und GPT-Beobachter gemäß AGENTS.md | 2be81e2e |
| Z4-M4B-2-TASK | Atomare Taskanlage, gleicher begrenzter Dateisatz wie GOAL, 180–270 ALL | ein serieller st/api/mn-Owner | Z4-M4B-1-GOAL (Nahtübergabe) | eigener Worktree | A | Erledigt nach Merge dieses Pakets: TASK prüft Run/Owner/Fence/Rolle/Zielprojekt atomar in seiner SQLite-Schreibtransaktion; erforderliche API-Weiterleitung, Operator None erhalten. Eigene prepush ist Pflicht; vor Merge bleiben zwei qualifizierte Fremdvendor-Reviews plus GPT-Beobachter und Root-Abnahme ausstehend. ASSIGN/IMPORT und GOAL-Restbefunde (Ticket 2dbc396c-9b74-4556-9c28-d9e00f5c6310) bleiben offen; Sicherheitsbefund bis IMPORT offen, Continuous bleibt eingefroren. | Fence-Interleaving-Rot; stale ohne Task/Event; eigenes Projekt erfolgreich, fremde Goals/Dependencies abweisen, Operator erhalten; eigene prepush/zwei Fremdreviews | 8dbd5dc7 |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Bring the TASK plan status up to date

At this reviewed head, the recorded review disposition says the two vendor reviews have completed, but this row still says both vendor reviews are outstanding. Because docs/PLAN.md is the canonical dispatch state, leaving that claim here can cause the coordinator to schedule duplicate reviews and prevents the required head status from being accurate before review-ok; update the row to distinguish the completed vendor reviews from the still-pending GPT observation and Root acceptance.

AGENTS.md reference: AGENTS.md:L139-L139

Useful? React with 👍 / 👎.

| Z4-M4B-3-ASSIGN | Atomare Zuweisung, team_assignments.rs plus api/planning_access/Tests/main, 200–280 ALL | ein serieller st/api/mn-Owner | Z4-M4B-2-TASK (Nahtübergabe) | eigener Worktree | A | Geplant: strikt seriell (Nutzer 16.10., K7 A; Prüfbericht 16.10.: der Befund gilt weiter); Sicherheitsbefund besteht bis Z4-M4B-4-IMPORT fort, Continuous bleibt eingefroren | Fence-Interleaving-Rot; stale ohne Assignment/Revision/Event; Selbsteskalation abweisen, gültige Zuweisung/Operator erhalten; eigene prepush/zwei Fremdreviews | 15d92066 |
| Z4-M4B-4-IMPORT | Autorisierung nach Source-Laden im Import-Schreibvorgang, development_plan/access plus api/planning_access/Tests/main, 230–300 ALL | ein serieller st/api/mn-Owner | Z4-M4B-3-ASSIGN (Nahtübergabe) | eigener Worktree | A | Geplant: strikt seriell (Nutzer 16.10., K7 A; Prüfbericht 16.10.: der Befund gilt weiter); Sicherheitsbefund besteht bis Z4-M4B-4-IMPORT fort, Continuous bleibt eingefroren | Fence beim Source-Laden ändern; Rot vor Fix; stale ohne Projektion/Revision/Event, gültiger Import/CAS/Sourceprüfung erhalten; vier Pfade integriert prüfen, eigene prepush/zwei Fremdreviews | e7c9e018 |
| F8-UNPROVEN-CHECK | PRÜFEN (nur lesend): ob `allow_unproven_project_create` (`src-tauri/src/api.rs`, abgeleitet aus einem gesetzten `PROJECTA_APP_DATA`) die Verdict-Prüfung der Projektregistrierung außerhalb des isolierten F8-Laufs aushebeln kann; Befund aus der README-Architekturanalyse vom 16.10. | Root disponiert | – | Server | A | Geplant: nicht disponiert (16.10.), zuerst nur lesend; ein Fix nur bei Befund als eigenes Stufe-A-Paket (Nahtdateien seriell) | Bericht mit `file:line` und rotem Test oder „gilt nicht“; keine Aktivierung | – |
Expand Down
2 changes: 1 addition & 1 deletion scripts/ci/architecture-drift.allow
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.sto
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.continuous_task_assignment(task_id))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.control_continuous(project_id,action))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.create_continuous_goal_with_authority(authority,project_id,objective,acceptance_criteria,source_goal_id,admit,))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.create_continuous_task(goal_id,objective,profile_id,owned_paths,dependencies,))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.create_continuous_task_with_authority(authority,goal_id,objective,profile_id,owned_paths,dependencies,))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.create_project(name,repo_path))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.development_records_snapshot(project_id))
API_STORE_BLOCK_ON src-tauri/src/main.rs tauri::async_runtime::block_on(self.store.emergency_stop_active())
Expand Down
10 changes: 0 additions & 10 deletions src-tauri/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -545,16 +545,6 @@ pub trait ControlBackend: Send + Sync {
fn list_continuous_goals(&self, _project_id: &str) -> Result<Vec<ContinuousGoal>, String> {
Err("continuous backend unavailable".to_string())
}
fn create_continuous_task(
&self,
_goal_id: &str,
_objective: &str,
_profile_id: Option<String>,
_owned_paths: Vec<String>,
_dependencies: Vec<String>,
) -> Result<ContinuousTask, String> {
Err("continuous backend unavailable".to_string())
}
fn claim_continuous_task(
&self,
_task_id: &str,
Expand Down
8 changes: 8 additions & 0 deletions src-tauri/src/api/agent_access.rs
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,14 @@ mod tests {
serde_json::to_value(review).map_err(|error| error.to_string())
}
unavailable! {
fn create_continuous_task_with_authority(
_authority: Option<crate::api::PlanningAuthority<'_>>,
_goal_id: &str,
_objective: &str,
_profile_id: Option<String>,
_owned_paths: Vec<String>,
_dependencies: Vec<String>
) -> Result<crate::store::ContinuousTask, String>;
fn create_continuous_goal_with_authority(
_authority: Option<crate::api::PlanningAuthority<'_>>,
_project_id: &str,
Expand Down
10 changes: 4 additions & 6 deletions src-tauri/src/api/planning_access.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
//! would multiply planning authority). Every target project, goal or task is
//! confined to the coordinator run's project before routing.
//!
//! Goal/replan writers recheck authority under their SQLite writer lock.
//! Task, assignment and import writers still rely on the separate precheck;
//! Goal/replan and task writers recheck authority under their SQLite writer lock.
//! Assignment and import writers still rely on the separate precheck;
//! their remaining fence races belong to the subsequent M4B packages.
//!
//! Every refusal and every successful write appends one audit envelope
Expand Down Expand Up @@ -60,15 +60,13 @@ macro_rules! planning_writer_adapters {
) -> Result<crate::store::ContinuousGoal, String>;
fn create_continuous_task_with_authority(
&self,
_authority: Option<crate::api::PlanningAuthority<'_>>,
authority: Option<crate::api::PlanningAuthority<'_>>,
goal_id: &str,
objective: &str,
profile_id: Option<String>,
owned_paths: Vec<String>,
dependencies: Vec<String>,
) -> Result<crate::store::ContinuousTask, String> {
self.create_continuous_task(goal_id, objective, profile_id, owned_paths, dependencies)
}
) -> Result<crate::store::ContinuousTask, String>;
fn assign_continuous_task_with_authority(
&self,
_authority: Option<crate::api::PlanningAuthority<'_>>,
Expand Down
10 changes: 10 additions & 0 deletions src-tauri/src/api/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@
native_claim: Option<(String, String, i64)>,
native_store: Option<crate::store::Store>,
goal_admission: Mutex<Option<(std::sync::mpsc::Sender<()>, std::sync::mpsc::Receiver<()>)>>,
task_admission: Mutex<Option<(std::sync::mpsc::Sender<()>, std::sync::mpsc::Receiver<()>)>>,
/// M4-R19-08: `(run, result, sourceRef)` of every planning audit when
/// no `native_store` writes the real trail.
audited: Mutex<Vec<(String, String, String)>>,
Expand Down Expand Up @@ -836,6 +837,15 @@
dependencies: Vec<String>,
) -> Result<ContinuousTask, String> {
self.record_planning_authority(&format!("task:{goal_id}"), authority);
if let Some(store) = &self.native_store {
if let Some((arrived, resume)) = self.task_admission.lock().unwrap().take() {
arrived.send(()).map_err(|error| error.to_string())?;
resume.recv_timeout(Duration::from_secs(5)).map_err(|error| error.to_string())?;
}
return tauri::async_runtime::block_on(store.create_continuous_task_with_authority(
authority, goal_id, objective, profile_id, owned_paths, dependencies,
));
}
self.planned.lock().unwrap().push(format!("task:{goal_id}"));
Ok(ContinuousTask {
assignment: None,
Expand Down
Loading
Loading