diff --git a/BOOTSTRAP.md b/BOOTSTRAP.md index ec969a9..c4f9775 100644 --- a/BOOTSTRAP.md +++ b/BOOTSTRAP.md @@ -1,5 +1,19 @@ # Forge bootstrap +## Temporary dual-lane development before Forge cutover + +For the owner's two concurrent Codex architect sessions, read +[the dual-lane plan](docs/roadmap/DUAL_LANE_DEVELOPMENT_V1.md), +[LANE_1](docs/roadmap/lanes/LANE_1.md) or +[LANE_2](docs/roadmap/lanes/LANE_2.md), and both linked live coordination issues. +The [allocation index](docs/roadmap/dual-lane-development-v1.json) covers the +existing 34 families without changing their owning dependency graphs or the +historical count. Select independent ready subsets; do not issue a duplicate +prompt or mutate another lane's repository/runtime. The next suitable scope +moves to a qualified Forge Mission route as soon as it can, not after the full +portfolio. This is operator planning/navigation, not a new runtime scheduler, +authorization, maintenance operation or change to Mission-3 acceptance. + ## Roadmap overview and autonomy-first focus Read the [roadmap overview and autonomy-first focus](docs/roadmap/ROADMAP_OVERVIEW_AND_AUTONOMY_FOCUS.md) diff --git a/docs/roadmap/DUAL_LANE_DEVELOPMENT_V1.md b/docs/roadmap/DUAL_LANE_DEVELOPMENT_V1.md new file mode 100644 index 0000000..d9dea0e --- /dev/null +++ b/docs/roadmap/DUAL_LANE_DEVELOPMENT_V1.md @@ -0,0 +1,119 @@ +# Twee ontwikkelsporen tot Forge het werk overneemt + +**Vastgelegd:** 18 september 2026. **Status:** owner-requested tijdelijke werkindeling; geen nieuwe productruntime, Missionlijst of uitvoeringsautorisatie. **NO_BUMP.** + +Doel: maximaal twee onafhankelijke Codex-uitvoeringsopdrachten tegelijk, vanuit twee blijvende architectsessies. `ARCHITECT_1` bedient `LANE_1`; `ARCHITECT_2` bedient `LANE_2`. Na eenmalige initialisatie volstaan **“geef volgende prompt (1)”** en **“geef volgende prompt (2)”**. Het aantal aftrappen is geen succesmaat: het doel blijft zo vroeg mogelijk geschikte werkpakketten door Forge laten afleiden en via EP uitvoeren. + +Deze indeling is nieuw, op verzoek van de eigenaar. Zij ordent de bestaande [inventaris en focus](ROADMAP_OVERVIEW_AND_AUTONOMY_FOCUS.md), maar verandert geen harde afhankelijkheden, peer-eigenaarschap, geparkeerde besluiten of Mission-3-criteria. De [machineleesbare indeling](dual-lane-development-v1.json) verwijst naar alle 165 analytische tel-eenheden uit de 34 families, met de zeven gezamenlijke nodes eenmaal. De oorspronkelijke snapshot van 17 september blijft ongewijzigd en is geen audit van wat vandaag nog ongebouwd is. + +## 1. Twee rollende rijen, geen verplichte gezamenlijke rondes + +| Sessierouter | Primair werk | Onafhankelijke terugval | Gedeelde registratie | +| --- | --- | --- | --- | +| [LANE_1](lanes/LANE_1.md) | Forge: autonomie, zelfstandige services, planning en projectloop | Forge Platform: nuttige, reeds geautoriseerde contract-/read-only-/compositionslice | [Forge #141](https://github.com/pcvantol/forge/issues/141) | +| [LANE_2](lanes/LANE_2.md) | EP: correcte/efficiënte uitvoering en parallelle Actions | Workspace: eigen Server/API/contract-/fixturewerk, daarna gekwalificeerde consumers | [Forge #142](https://github.com/pcvantol/forge/issues/142) | + +Dit zijn standaard repositoryhouders, geen permanente productteams. De twee pools overlappen niet, zodat gelijktijdige NEXT-aanvragen niet dezelfde repository kunnen claimen. Zonder expliciete overdracht schrijft lane 1 niet in EP/Workspace en lane 2 niet in Forge/Forge Platform. Een sessie mag vrij tussen haar eigen vrije repositories kiezen. Een andere verdeling, bijvoorbeeld Workspace in lane 1 en EP in lane 2, kan via de korte overdrachtsprocedure hieronder; geen nieuwe architectuurwijziging nodig. + +Een lane die klaar is, hoeft niet op de andere te wachten. Zij kiest de hoogst geprioriteerde **werkelijk uitvoerbare** subset. Een geblokkeerde dependency wordt niet omzeild; de vrije lane pakt ander zinvol werk. Wanneer geen veilige, geautoriseerde combinatie beschikbaar is, is `WAIT` correct. “Altijd twee” is een benuttingsdoel, geen reden om werk te verzinnen, scopes te vergroten of kritieke gedeelde resources te overbelasten. Er zijn geen doorlooptijdschattingen die een mathematisch optimale verdeling bewijzen. + +## 2. Eerste werkvolgorde en concrete combinaties + +Dit is een rollende voorkeursvolgorde, geen nieuw execution-DAG of vast aantal prompts. Actuele producer-evidence gaat vóór de voorbeeldrij; contract-first implementatie kan eerder dan finale integratie worden geleverd als de owning roadmap dat toestaat. + +| Moment / prioriteit | LANE_1 | LANE_2 | Voorwaarde / reden dat dit kan overlappen | +| --- | --- | --- | --- | +| Huidige voorbereiding | Bestaande reset-`prepare → revalidate`-correctie adopteren/afronden als zij nog niet geleverd is; niet opnieuw starten | Eerst een kleine Workspace `WH-CONTRACT`-slice wanneer EP nog door die correctie nodig kan zijn; anders ontbrekende EP `SA-CTX`/`SA-ISO`-slice | Geen gedeelde bronwriter. Onderhoud/EP-scope eerst vaststellen; lege PR-lijst bewijst geen vrije lokale sessie. | +| Echte clean-preflight en Mission 3 | Alleen het bestaande expliciet geautoriseerde testcontract; target-main, beide runtimeversies en echte datasetresources reserveren | Workspace eigen contract-/servicewerk op geïsoleerde fixtures; geen EP-/Forge-installatie of testtargetmutatie | Runtime- en baselinefreeze geldt over beide lanes. Geen nieuwe testcriteria; geen resetautorisatie door deze tabel. | +| Na beoordeling van de live proef | Server-only `FSH-SERVICES` met benodigde `FH-*`-delen; ontbrekende `FCI-*`-regressiedekking als begrensde sublevering | Resterende echte EP context-/invocation-isolatie en observatiebewijs; daarna toepasselijke deterministische controls | Gescheiden repositories en fixtures; finale activatie in afgesproken kort onderhoudsvenster. Niet eerst de hele Console of SA-familie eisen. | +| Paralleliteit voorbereiden | `PA-F0`, daarna `PA-F1/PA-F2` | Na beschikbaar Forge `PA-F0`: `PA-E0 → PA-E1 → PA-E2/PA-E3`; `PA-E4` volgens eigen DAG | EP wacht op het contract, niet op complete Forge-paralleliteit. Forge state/planning kan naast EP-uitvoering groeien. | +| Paralleliteit aansluiten | `PA-F3` zodra vereiste EP-subsets bewezen zijn; daarna `PA-F4/PA-F5` | EP negatieve cases/readback en `PA-EQ` | Geen Forge-consumer-PASS uit mocks alleen; gekoppelde kwalificatie gebruikt exact de juiste artifacts. | +| Werkvoorraad zonder eigenaar-als-berichtenbus | Kleinste `PRM-F-*` manual/approved-worklist-slice en passende `FCO-*` | Relevante EP policy/progression/receipt-subsets; anders Workspace read-only project-/beslisprojectie | Projectloop hoeft niet op complete Actionparalleliteit of volledige delegatie te wachten; oorspronkelijke PRM/FCI/FCO-edges blijven gelden. | +| Overdrachtsmoment | Volgende ondersteunde scope als **Forge-Missionaftrap** in plaats van directe implementatieprompt | Zelfde keuze per scope; directe Codex alleen voor aantoonbaar nog niet door Forge gedragen werk | Niet wachten op alle 34 families. Twee Codex-lanes geven geen bevoegdheid om twee product-Missions parallel te starten wanneer de runtime dat nog niet ondersteunt. | + +De canonieke bronnen voor deze slices zijn [runtime-evolutie](../architecture/runtime-evolution-roadmap.md), [inner-loop CI](FORGE_INNER_LOOP_CI_V1.md), [Forge-paralleliteit](PARALLEL_ACTION_RUNTIME_V1.md), [EP-paralleliteit](https://github.com/pcvantol/engineering-platform/blob/main/docs/development/PARALLEL_ACTION_EXECUTION_V1_DAG.json), [projectloop](LIVE_PROJECT_ROADMAP_MANAGEMENT_V1.md), [EP-efficiëntie](https://github.com/pcvantol/engineering-platform/blob/main/docs/development/SUBAGENT_ORCHESTRATION_V1_ROADMAP.md) en [Workspace-HTTP](https://github.com/pcvantol/workspace/blob/main/docs/WORKSPACE_HTTP_API_V1_DAG.json). Raadpleeg vóór selectie de actuele, exact gepinde ownerbron; deze links zijn navigatie, geen automatisch bewijs van implementatie. + +**Bestaand werk adopteren:** de completion record van Forge #140 beschrijft een vóór reset-apply afgebroken voorbereiding, geen gestarte Mission. Er is daarna al een herstelprompt uitgegeven. De eerste lane-initialisatie moet vaststellen of die nu loopt of al klaar is. Alleen de afgesproken ontbrekende slice telt als nieuw werk; de release/installatie van 2.7.22 en EP #271/#272 worden niet opnieuw geopend vanwege een oude inventarisstatus. Het oudere resetverslag is geen huidige installatiestatus. + +## 3. Alle families hebben een plek, maar niet alles moet vóór cutoff + +De JSON wijst alle twaalf Forge-families en vier Forge Platform-families standaard aan lane 1 toe (82 eigen rollup-eenheden). Alle negen EP-families en negen Workspace-families gaan naar lane 2 (76 eigen eenheden). De zeven gezamenlijke nodes blijven gezamenlijke bewijsjoins, met lane 1 als communicatiecoördinator; hun productcode wordt door de respectieve repositoryhouder geleverd. 82/76 is geen uren- of tokenverdeling. + +Binnen elk product staat autonomie-ondersteunend werk vooraan. De grote resterende families — volledige Console, geavanceerd modelbeleid, rijke gesprekken, universele installer en nieuwe-projectbootstrap — zijn een **reservehorizon / toekomstige Forge-werklijst**, geen verplicht direct-Codexprogramma. Selecteer ze alleen als zij aantoonbaar de overdracht versnellen of een vrije lane onafhankelijk nuttig houden zonder de primaire lijn te vertragen. Geen oppervlakkig documentatiewerk maken uitsluitend om twee groene lanevakjes te tonen. + +De JSON-rang is prioriteit, niet een dependency-edge. Eén familie kan meerdere samenhangende aftrappen nodig hebben. De 29 in het oude telmodel samengevoegde records blijven in de snapshot beschikbaar; vooral `FSH-SERVICES` kan als echte praktische sublevering worden gekozen zonder de rest van `FOC-*` af te maken. De onderhoudscorrectie en Mission-3-proef zijn carry-overwerk, geen stil toegevoegde 166e/167e roadmapnode. + +## 4. Wat “geef volgende prompt (1/2)” precies doet + +Elke aanvraag leest eerst de actuele `main`-versie van dit document, de JSON, beide lane-issues, relevante PRs/branches en de bestaande eigen opdracht. Chatgeheugen of alleen de laatste regel van het andere issue is niet voldoende bij een conflict. Gebruik lokale readback uitsluitend wanneer die werkelijk toegankelijk is; onbekende lokale activiteit is geen bewijs van leegte. + +1. **Reconcileer eigen vorige aftrap.** `ISSUED` of `RUNNING` betekent geen tweede opdracht. Een herhaalde vraag retourneert dezelfde assignment of haar status. `BLOCKED`/onzekere uitkomst houdt relevante reserveringen vast totdat de owning werkboom/processen veilig zijn gepauzeerd en dat is vastgelegd. Een PR-merge alleen sluit een gevraagde release/installatie/kwalificatie niet. +2. **Toets cutoff per scope.** Kan de geïnstalleerde en gekwalificeerde Forge-route dit geautoriseerde doel inmiddels dragen? Geef dan een Missionaftrap zonder voorgeschreven Actionlijst. Leg bij een directe Codex-opdracht precies vast welk nog ontbrekend productvermogen de uitzondering rechtvaardigt. +3. **Selecteer een ready subset.** Eerst concrete autonomieblokkade, dan producerwerk dat de andere lane ontsluit, dan hoogst relevante ready subset in de primaire repo, daarna veilige fallback. Raadpleeg alle echte owning predecessors, huidige grants/parkeringen en exacte bron-/artifact-/installed-evidence. Een sample fixture kan ontwikkeling toelaten, niet een ontbrekende live contractgate aftekenen. +4. **Controleer repo en resources.** Eigen pool of bevestigde tijdelijke overdracht; geen andere actieve mutator, conflicterende branch, gedeelde testdatabase, poort, signingrunner, releaseversie of runtime-update. Reserveer vóór uitgifte, niet pas bij het maken van een PR. +5. **Schrijf en lees de eigen registratie terug.** Verhoog de issue-revision en bewaar de vorige opdracht in de historie. Neem assignment-ID, node/subset, exacte scope, bronpins, acceptatie, bevoegdheidsgrens, resource-reserveringen en resultaatlocatie op. Geef de prompt pas terug nadat die eigen registratie klopt en de peerregistratie niet conflicteert. +6. **Geef precies één volledige uitvoeringsprompt.** “Geef prompt” selecteert en reserveert; het start zelf geen provider, Mission, reset of release. De gebruiker geeft de gegenereerde scope aan de uitvoerende sessie vrij volgens de bestaande regels. Voeg geen stille automatische keten van volgende prompts toe. + +Ontbreekt actuele lees-/schrijftoegang tot de gedeelde registratie, claim geen succesvolle reservering. Geef een concrete blokkade, geen plausibel verzonnen volgende opdracht. Een kapotte tijdelijke registratieroute rechtvaardigt geen omzeiling van productgovernance. + +## 5. Gedeelde registratie zonder een derde scheduler te bouwen + +De twee GitHub-issues zijn lichte aftrap-/handoffregistraties, **geen atomische database, distributed lock of vervanging van EP-leases**. Veiligheid rust op twee expliciete werkafspraken plus echte product-/repositorylocks: precies één architectschrijver per lane, en disjuncte repositoryhouders. Geen gelijktijdige tweede `ARCHITECT_1` of `ARCHITECT_2`. Bij overdracht van een sessie moet de oude aantoonbaar stoppen; stilte/een timestamp maakt geen resource vrij. + +De architect is de enige schrijver van de assignmentregistratie. Een executor schrijft zijn geschoonde resultaat naar de gekoppelde PR of afgesproken handoff; hij geeft zichzelf geen volgende aftrap. De architect verwerkt dat resultaat bij de volgende aanvraag. Indien resultaat alleen in een privaat lokaal receipt staat, blijft de publieke registratie een veilige referentie/attestatie en geen onafhankelijk herhaalbare live-audit. + +Minimum per assignment: + +```text +lane / registration_revision / assignment_id / plan_revision +state: ISSUED | RUNNING | REVIEW | WAITING_DEPENDENCY | BLOCKED | + PAUSED_SAFE | COMPLETED | CANCELLED_SAFE | TRANSFERRED_TO_FORGE +objective / exact_node_subset / source_pins / unchanged_acceptance +repository_scope / source_write_reservations / runtime_resource_reservations +execution_mode: DIRECT_CODEX | FORGE_MISSION_KICKOFF +dependency_evidence / actual_authority / expected_delivery_evidence +owning_PRs / candidate_SHA / merge_SHA / public_artifact_evidence +remaining_effects_or_locks / sanitized_result_reference +``` + +De initiële issues staan bewust `UNASSIGNED_NEEDS_RECONCILIATION`; dat is geen claim dat er geen lokaal werk loopt. Een issue-revision is een werkafspraak, geen CAS-garantie van GitHub. Oude evidence en uitgiftes mogen niet worden weggepoetst. Een gesloten issue of groene checkbox is geen productacceptatie. Beide lanes kunnen hun eigen issue actualiseren zonder een PR in Forge's drukke bronwerkboom; zij wijzigen niet elkaars register of de globale planningsbestanden. + +### Repository tijdelijk overdragen + +Binnen de vastgelegde scope mag repositoryverdeling wijzigen zonder de gebruiker als berichtenbus te gebruiken. De requester meldt in zijn eigen issue een transfer-ID, nieuwe epoch, repo en begrensde scope. De huidige houder toont in zijn eigen register `PAUSED_FOR_TRANSFER`, verifieert dat geen actieve/issued executor, auto-merge of runtime-effect die repo nog kan muteren, en geeft exact die overdracht vrij. De ontvanger leest die vrijgave terug en bevestigt dezelfde transfer/epoch vóór uitgifte. De oude houder mag vanaf vrijgave geen eigen opdracht op die repo starten, ook niet als ontvangst nog onzeker is. Bij onduidelijkheid blijft de repo gereserveerd, niet van twee lanes tegelijk. + +Teruggave gebeurt omgekeerd: ontvanger verifieert quiescence en schrijft RELEASE; oorspronkelijke houder bevestigt terugname. Geen timeout, “ik zie geen PR” of lege lane betekent automatische terugname. Conflicterende epochs of twee gelijktijdige overdrachten stoppen beide betrokken selecties. Bij selectie van een gevoelig nieuw effect of scopeuitbreiding blijft echte ownerapproval nodig. Deze afspraak is handmatige/agent-gevolgde coördinatie, geen geleverd automatisch lockprotocol. + +Een cross-product implementatieprompt die beide pools nodig heeft, wordt bij voorkeur opgesplitst in twee owning prompts met één gedeeld contract. Wanneer de bestaande herstelopdracht al beide nodig heeft, adopteer haar en reserveer die repos; de andere lane kiest Workspace/Forge Platform of wacht. Maak niet alsnog een derde implementatiespoor in een al gereserveerde repo. + +## 6. Bronparalleliteit is niet installatieparalleliteit + +Verschillende worktrees bewijzen niet dat twee writers in dezelfde repository veilig zijn. Houd vóór de gekwalificeerde parallel-capability één muterende aftrap per canonieke repository; de lanes mogen elkaars featurebranch, main, stash of cleanup niet gebruiken. Vertrouw niet op dezelfde dagelijkse checkout als beide sessions' startdirectory. + +Scheid fixtures, testdatabases, poorten en scratch. Een gedeelde runner, packageaccountlimiet, signingcontext of schaarse lokale resource kan tijdelijk serialisatie vereisen. Reserveer releaseversies en productpublicatie bij één eigenaar. Geen brede test-/installatieopdracht uit een fallbacklane die ongemerkt Forge/EP-releases of credentials bijwerkt. + +**Live reset/E2E-venster:** beide lanes leggen vooraf hetzelfde expliciete venster vast in hun issues. De uitvoerende lane reserveert de testtarget-main, geselecteerde installaties en werkelijke gedeelde resources; de peer bevestigt dat conflicterende effecten ontbreken. De tweede lane kan doorgaan met expliciet onafhankelijke Workspace-/Platformbron op fixtures. Geen merge in de canarytarget, artifactactivatie, serviceherstart, reset, peerconfiguratiewijziging of gedeelde datasetmutatie tijdens T0..terminal-reconciliatie. EP-bronontwikkeling tijdens de proef kan alleen wanneer vooraf expliciet bewezen buiten alle proefbaselines/resources en zonder activatie; geen automatische aanname. Na een gemeten failure blijft dezelfde proef zichtbaar mislukt; een tweede lane mag haar niet wegpoetsen. + +Voor korte release-/installatiewindows is dezelfde tweezijdige afspraak nodig als de andere lane dezelfde runtime gebruikt. Installatie mag wachten terwijl onafhankelijke bronontwikkeling doorgaat; geblokkeerde activatie verandert een goede merge niet in mislukt bronwerk. Tegelijk blijft een volledig gevraagde installed oplevering onvoltooid tot echte readback. + +## 7. Outputcontract van iedere gegenereerde prompt + +Bovenaan: lane, assignment-ID, registry-issue, planrevisie, productrepo, concrete doel-/nodesubset en bronpin. Daarna één samenhangende scope met nog ontbrekende implementatie, verplichte tests/reviews, daadwerkelijke deliverygrens (bron, artifact, installed of live), gedeelde gereserveerde resources en stopgrenzen. Geen nieuwe architectuurcampagne wanneer de vraag een bestaande begrensde fix betreft. + +Verplicht: lees eigen projectregels; bewaar ander werk; geen peer-SQL/CLI als producttransport; geen onbevoegde runtimeactivatie; sluit bestaande finding IDs met bewijs; markeer delivered versus available-to-consumer apart; maak de gevraagde geschoonde handoff/PR vindbaar voor beide architectsessies. Het rapport vermeldt wat nog niet uitgevoerd is. Een defect buiten de scope wordt een voorstel, geen automatisch voorranghebbende nieuwe opdracht. + +Publieke issues/commits/PRs bevatten alleen geschikte publieke bron-/artifactreferenties en consistente aliases. Geen werkelijke lokale paden, host-/runtime-/consumeridentiteiten, Keychainrefs, lokale backup-/plan-/databasedigests of secrets. Volledig operationeel bewijs blijft beveiligd lokaal. Scan vóór de eerste push, niet pas vóór PR-aanmaak. De eerder blootgestelde branch is geen onderwerp van dit plan; geen history rewrite of cleanupopdracht. + +## 8. Cutoff: stop direct-Codexwerk zodra Forge die scope kan dragen + +De eerste relevante live-proef bewijst alleen haar eigen scope. Gebruik vervolgens het volgende geschikte, geautoriseerde werkpakket als Forge-Mission zodra de noodzakelijke installed capabilities en acceptatie daarvoor bestaan. Wacht niet op volledige Server/Console/Workspace/installer/paralleliteit wanneer de ondersteunde productroute de specifieke scope al kan uitvoeren. Omgekeerd mag één geslaagde seriële Mission niet als bewijs van parallelle of cross-repositorycapaciteit worden gebruikt. + +Markeer overgedragen opdrachten als `TRANSFERRED_TO_FORGE` met hun echte Mission-/Actionreferenties; geef geen concurrerende directe prompt uit voor dezelfde scope. Andere nog niet ondersteunde capability-uitbreidingen kunnen tijdelijk in de vrije Codex-lane blijven, met exacte uitzondering. Bij voldoende cutover zijn beide architectsessies Missionselectie-/reviewingangen, geen alternatieve implementatie-orchestrators. Bestaande Business/Architecturegoedkeuring, werklijstbegrenzing en EP-admission blijven gelden; dit plan activeert geen volledige autonome development mode. + +## 9. Onderhoud en bewijsgrens + +De eigenaar heeft deze tweesporenindeling gevraagd, niet uitvoering van alle reservefamilies. Actualiseer bij iedere NEXT alleen de betrokken node-/bron-/resultaatgegevens, niet de hele inventaris. Globale lane-/scopewijzigingen worden als kleine reviewed planningswijziging bewaard; statusovergangen blijven in de eigen issues en owning bewijsadministratie. Issues en de JSON vormen geen nieuwe runtimebron voor Forge. + +Bronreadback voor deze notitie: Forge `0da4ffae94f1834b957a04ea31d7ff2010fd072a`, EP `aa73aa46322230aaf8afce4223fd497879d800d6`, Workspace `5ecd418bc9cdc983791bf35c07457ffdb2ad1166`, Forge Platform `88b256b274fb20487b7c0cce05ccd5a58a4516f1`. De remote Forge/Workspace PR-lijsten waren leeg; EP #175 was nog draft/geparkeerd. Lokale uitvoering en geïnstalleerde onderhoudsfix zijn hier niet opnieuw geaudit. Oudere resetverslagen bewijzen geen huidige installatiestatus. Een geparkeerde PR is geen vrijbrief tot hervatting. + +Deze levering voegt documentatie, een lane-toewijzingsindex, twee sessierouters en twee lege coördinatieregistraties toe. Geen runtimecode, schema, workflow, release, credential, operationele database, reset of Mission gestart. De structuurtest bewijst dekking van de inventaris en consistente standaardhouders, niet dat twee echte Codex-sessies al gelijktijdig hebben uitgevoerd. diff --git a/docs/roadmap/ROADMAP_OVERVIEW_AND_AUTONOMY_FOCUS.md b/docs/roadmap/ROADMAP_OVERVIEW_AND_AUTONOMY_FOCUS.md index 768b469..2dea476 100644 --- a/docs/roadmap/ROADMAP_OVERVIEW_AND_AUTONOMY_FOCUS.md +++ b/docs/roadmap/ROADMAP_OVERVIEW_AND_AUTONOMY_FOCUS.md @@ -2,6 +2,19 @@ **Vastgelegd:** 17 september 2026. **Classificatie:** brongebonden analyse en focusnotitie, geen uitvoerbare backlog. **NO_BUMP.** +## Tijdelijke uitvoering met twee architectsessies — 18 september 2026 + +De eigenaar kiest vóór Forge-cutover voor twee onafhankelijke Codex-sporen. +De [tweesporenplanning](DUAL_LANE_DEVELOPMENT_V1.md) en +[machineleesbare lane-indeling](dual-lane-development-v1.json) rangschikken +alle onderstaande families zonder deze historische telling te wijzigen. +Initialiseer [LANE_1](lanes/LANE_1.md) en [LANE_2](lanes/LANE_2.md); daarna +selecteert “geef volgende prompt (1/2)” één ready subset na actuele controle +van beide gedeelde registraties. Geen vaste rondebarrière, dubbele repositorywriter +of automatische Mission-/resetstart. Zodra Forge een geschikte geautoriseerde +scope gekwalificeerd kan dragen, wordt de volgende aftrap een Forge-Mission. +Dit is een tijdelijke operatorwerkindeling, geen nieuwe product-DAG of scheduler. + Doel van de eigenaar: het hoogoverbeeld terug kunnen vinden en focus houden op zo snel mogelijk werkpakketten door Forge zelf laten plannen, via EP uitvoeren en opvolgen. Niet eerst het hele platform met de hand afbouwen voordat het eigen werk kan overnemen. Deze pagina bewaart de eerdere roadmapanalyse in een repository-first vorm. De [gedateerde volledige ID-inventaris](inventory/2026-09-17.json) bevat alle 194 records, bronrevisies, statussen, telregels en samenvoegingen; de [formaat- en leesinstructie](inventory/README.md) verklaart de compacte representatie. De inhoudelijke productroadmaps en hun eigenaren blijven leidend. Dit document is geen nieuwe Mission, toestemming, releaseplan, scheduler of peer-statusautoriteit. diff --git a/docs/roadmap/dual-lane-development-v1.json b/docs/roadmap/dual-lane-development-v1.json new file mode 100644 index 0000000..4d176a4 --- /dev/null +++ b/docs/roadmap/dual-lane-development-v1.json @@ -0,0 +1,166 @@ +{ + "schema_version": "dual-lane-planning/v1", + "document_kind": "TEMPORARY_PLANNING_OVERLAY", + "date": "2026-09-18", + "executable": false, + "execution_authority": false, + "automatic_dispatch": false, + "version_decision": "NO_BUMP", + "protocol": "docs/roadmap/DUAL_LANE_DEVELOPMENT_V1.md", + "inventory": "docs/roadmap/inventory/2026-09-17.json", + "counts": { + "inventory_records": 194, + "rollup_units": 165, + "families": 34, + "joint_nodes": 7, + "lane_1_exclusive_units": 82, + "lane_2_exclusive_units": 76, + "lane_1_families": 16, + "lane_2_families": 18 + }, + "source_readback_pins": { + "forge": "0da4ffae94f1834b957a04ea31d7ff2010fd072a", + "engineering-platform": "aa73aa46322230aaf8afce4223fd497879d800d6", + "workspace": "5ecd418bc9cdc983791bf35c07457ffdb2ad1166", + "forge-platform": "88b256b274fb20487b7c0cce05ccd5a58a4516f1" + }, + "max_concurrent_prompts": 2, + "max_open_prompt_per_lane": 1, + "initial_epoch": 1, + "default_repository_holders": { + "forge": "LANE_1", + "forge-platform": "LANE_1", + "engineering-platform": "LANE_2", + "workspace": "LANE_2" + }, + "lane_registers": { + "LANE_1": "https://github.com/pcvantol/forge/issues/141", + "LANE_2": "https://github.com/pcvantol/forge/issues/142" + }, + "selection_policy": "ROLLING_READY_FRONTIER_NO_WAVE_BARRIER", + "rank_scope": "WITHIN_REPOSITORY_FALLBACK_HORIZON_NOT_FULL_FAMILY_COMPLETION_ORDER", + "early_subset_rule": "Take Server-only FSH/FH, missing CI and ready parallel/project-loop subsets first; unfinished Console, SA or installer umbrella never blocks the next eligible critical subset.", + "dependency_rule": "Ranks are preferences, not edges. Resolve each node in the dated inventory, then refresh its owning dependency graph and exact required evidence before prompt issuance.", + "initial_state": "UNASSIGNED_NEEDS_RECONCILIATION", + "initial_lane_1": "Adopt existing reset-revalidation assignment; no duplicate or automatic reset/Mission.", + "initial_lane_2": "Workspace contract/fixture subset when EP scope is reserved or unclear; otherwise ready missing EP context/isolation subset.", + "cutover_rule": "Next suitable authorized scope uses qualified installed Forge Mission route; no wait for complete portfolio; unsupported scopes remain explicit direct-Codex exceptions.", + "families": [ + {"repository":"forge","lane":"LANE_1","rank":10,"family":"HTTP/API en CLI","nodes":["FH-CONTRACT","FH-SERVICES","FH-HTTP","FH-CLI","FH-Q"]}, + {"repository":"forge","lane":"LANE_1","rank":11,"family":"Console, hosting en data-administratie","nodes":["FOC-0","FOC-1","FOC-2","FOC-3","FOC-4","FOC-5","FOC-6","FOC-Q"]}, + {"repository":"forge","lane":"LANE_1","rank":12,"family":"Inner-loop CI","nodes":["FCI-CONTRACT","FCI-HARNESS","FCI-EP","FCI-FLOW","FCI-RESTART","FCI-NEGATIVE","FCI-CI"]}, + {"repository":"forge","lane":"LANE_1","rank":20,"family":"Parallelle Actions","nodes":["PA-F0","PA-F1","PA-F2","PA-F3","PA-F4","PA-F5","PA-FQ"]}, + {"repository":"forge","lane":"LANE_1","rank":21,"family":"Projectloop en roadmapbeheer","nodes":["PRM-F-CONTRACT","PRM-F-PROJECTION","PRM-F-ELIGIBILITY","PRM-F-ACTIVATION","PRM-F-CHANGES","PRM-F-PRIORITY","PRM-F-REPOSITORY","PRM-F-DELEGATION","PRM-F-Q"]}, + {"repository":"forge","lane":"LANE_1","rank":22,"family":"Outer-loop CI","nodes":["FCO-CONTRACT","FCO-FLOW","FCO-RESTART","FCO-NEGATIVE","FCO-CI"]}, + {"repository":"forge","lane":"LANE_1","rank":23,"family":"Governed progression","nodes":["GP-F"]}, + {"repository":"forge","lane":"LANE_1","rank":24,"family":"Policy en releasebeheer","nodes":["POL-F","VR-F"]}, + {"repository":"forge","lane":"LANE_1","rank":30,"family":"Adaptive Action Sizing","nodes":["AS-F-CONTRACT","AS-F-POLICY","AS-F-PLAN","AS-F-BIND","AS-F-FEEDBACK","AS-F-Q"]}, + {"repository":"forge","lane":"LANE_1","rank":40,"family":"Projecthygiëne","nodes":["HY-F","HY-S"]}, + {"repository":"forge","lane":"LANE_1","rank":50,"family":"Genesis/Managed-projectbootstrap","nodes":["PB-F0","PB-F1","PB-F2","PB-F3","PB-F4","PB-F5","PB-F6","PB-F7","PB-FQ"]}, + {"repository":"forge","lane":"LANE_1","rank":60,"family":"Business/Architect/UX-conversaties","nodes":["RC-FC","RC-FS","RC-FA","RC-FP","RC-FQ"]}, + {"repository":"forge-platform","lane":"LANE_1","rank":10,"family":"Installer: clean-install plus UX/release","nodes":["FP-EP-CI-1","FP-EP-CI-2","FP-EP-CI-3","FP-EP-CI-4","FP-EP-CI-5","IUR-CONTRACT","IUR-WIZARD","IUR-READONLY","IUR-UX-Q","IUR-COVERAGE","IUR-RUNNER","IUR-RELEASE","IUR-INSTALL-Q"]}, + {"repository":"forge-platform","lane":"LANE_1","rank":20,"family":"Policy en releasebeheer","nodes":["POL-P"]}, + {"repository":"forge-platform","lane":"LANE_1","rank":21,"family":"Governed progression","nodes":["GP-P"]}, + {"repository":"forge-platform","lane":"LANE_1","rank":30,"family":"Projecthygiëne","nodes":["HY-P"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":10,"family":"Subagent-efficiëntie en assurance","nodes":["SA-CTX","SA-ISO","SA-OBS","SA-VAL","SA-PUB","SA-SEL","SA-LOOP","SA-PAR","SA-Q"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":11,"family":"Parallelle Actions","nodes":["PA-E0","PA-E1","PA-E2","PA-E3","PA-E4","PA-EQ"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":12,"family":"HTTP/ingressconformiteit","nodes":["EH-CONTRACT","EH-CONFORMANCE","EH-Q"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":20,"family":"Governed progression","nodes":["GP-E"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":21,"family":"Policy en releasebeheer","nodes":["POL-E","VR-X"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":30,"family":"Adaptive execution envelope","nodes":["AS-E-OFFER","AS-E-FIT","AS-E-Q"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":31,"family":"Taak-/rol-/modelbeleid","nodes":["RMP-CONTRACT","RMP-CATALOG","RMP-RESOLVE","RMP-DISPATCH","RMP-EVIDENCE","RMP-CONSOLE","RMP-Q"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":40,"family":"Projecthygiëne","nodes":["HY-E","HY-C"]}, + {"repository":"engineering-platform","lane":"LANE_2","rank":50,"family":"Genesis/Managed-projectbootstrap","nodes":["PB-E0","PB-E1","PB-E2","PB-E3","PB-E4","PB-E5","PB-EQ"]}, + {"repository":"workspace","lane":"LANE_2","rank":10,"family":"HTTP/API en CLI","nodes":["WH-CONTRACT","WH-SERVICES","WH-HTTP","WH-CLI","WH-PEERS","WH-Q"]}, + {"repository":"workspace","lane":"LANE_2","rank":11,"family":"PyPI/distributie","nodes":["WPK-IDENTITY","WPK-PACKAGE","WPK-PUBLISH","WPK-READBACK","WPK-CONSUMER"]}, + {"repository":"workspace","lane":"LANE_2","rank":20,"family":"Projectloop en roadmapbeheer","nodes":["PRM-W-CONTRACT","PRM-W-VIEW","PRM-W-MANAGE","PRM-W-DECISIONS","PRM-W-SYNC","PRM-W-Q"]}, + {"repository":"workspace","lane":"LANE_2","rank":21,"family":"Governed progression","nodes":["GP-WC","GP-W"]}, + {"repository":"workspace","lane":"LANE_2","rank":22,"family":"Policy en releasebeheer","nodes":["POL-WC","POL-W"]}, + {"repository":"workspace","lane":"LANE_2","rank":30,"family":"Projecthygiëne","nodes":["HY-WC","HY-WO","HY-WM"]}, + {"repository":"workspace","lane":"LANE_2","rank":31,"family":"Adaptive Action Sizing","nodes":["AS-W-POLICY","AS-W-Q"]}, + {"repository":"workspace","lane":"LANE_2","rank":40,"family":"Business/Architect/UX-conversaties","nodes":["RC-WC","RC-WS","RC-WP","RC-WQ"]}, + {"repository":"workspace","lane":"LANE_2","rank":50,"family":"Genesis/Managed-projectbootstrap","nodes":["PB-W0","PB-W1","PB-W2","PB-W3","PB-W4","PB-WQ"]} + ], + "shared_nodes": [ + { + "id": "GP-DC", + "owners": [ + "forge", + "engineering-platform", + "forge-platform" + ], + "coordination_lane": "LANE_1" + }, + { + "id": "GP-Q", + "owners": [ + "forge", + "engineering-platform" + ], + "coordination_lane": "LANE_1" + }, + { + "id": "GP-X", + "owners": [ + "forge", + "engineering-platform" + ], + "coordination_lane": "LANE_1" + }, + { + "id": "POL-B", + "owners": [ + "forge", + "engineering-platform" + ], + "coordination_lane": "LANE_1" + }, + { + "id": "POL-Q", + "owners": [ + "forge", + "engineering-platform" + ], + "coordination_lane": "LANE_1" + }, + { + "id": "VR-Q", + "owners": [ + "forge", + "engineering-platform" + ], + "coordination_lane": "LANE_1" + }, + { + "id": "HY-Q", + "owners": [ + "forge", + "engineering-platform" + ], + "coordination_lane": "LANE_1" + } + ], + "invariants": { + "one_repository_mutator": true, + "separate_worktree_is_sufficient": false, + "issues_are_atomic_leases": false, + "one_architect_writer_per_lane": true, + "repository_transfer_needs_quiescence_and_two_sided_epoch": true, + "idle_or_timeout_releases_reservation": false, + "reserve_before_prompt_return": true, + "production_update_reset_e2e_needs_joint_window": true, + "live_canary_target_main_and_runtime_are_frozen": true, + "fallback_can_ignore_dependency": false, + "read_or_next_starts_execution": false, + "new_findings_change_approved_scope": false, + "roadmap_inventory_counts_changed": false, + "runtime_qualifications_claimed": false + }, + "scope_notes": [ + "All global product-DAG and role/authority boundaries preserved.", + "Old reset/release observations remain historical; no independent current installation audit.", + "EP #175 parked unless separately authorized.", + "Private local evidence stays outside public Git/issue records.", + "No requirement to fill both lanes if no safe authorized ready work exists." + ] +} diff --git a/docs/roadmap/lanes/LANE_1.md b/docs/roadmap/lanes/LANE_1.md new file mode 100644 index 0000000..7797364 --- /dev/null +++ b/docs/roadmap/lanes/LANE_1.md @@ -0,0 +1,25 @@ +# LANE_1 — sessierouter voor ARCHITECT_1 + +Je bent **ARCHITECT_1**, de enige architectschrijver voor **LANE_1**. Werk vanuit actuele repository-evidence, niet alleen chatgeheugen. Dit is een tijdelijke operatorwerkafspraak, geen nieuwe Forge-runtimefunctie. + +Lees bij initialisatie en vóór iedere volgende aftrap: + +- [Twee ontwikkelsporen](../DUAL_LANE_DEVELOPMENT_V1.md) en [de indeling](../dual-lane-development-v1.json). +- [Eigen registratie #141](https://github.com/pcvantol/forge/issues/141) en [peerregistratie #142](https://github.com/pcvantol/forge/issues/142). +- De actuele owning roadmap/DAG, projectregels, relevante PRs/branches en noodzakelijke echte lokale resource-readback voor de gekozen subset. + +Standaardpool: **Forge / Forge Platform**. De andere pool is niet vrij omdat zijn lane stil of tijdelijk bezig is. Gebruik de gedocumenteerde tweezijdige overdracht voor afwijkende combinaties. Eén open uitvoeringsprompt per lane; geen derde writer via subagents in andermans repository. + +## Bedieningszin + +**“Geef volgende prompt (1)”** betekent: reconcileer de vorige opdracht, lees de andere lane, toets Forge-cutover, selecteer één onafhankelijke ready subset, registreer haar vóór uitgifte en geef één complete uitvoeringsprompt terug. Een nummer dat niet bij deze lane hoort wordt niet stilzwijgend als opdracht voor de peer verwerkt. + +Bij een ISSUED/RUNNING of onzekere vorige opdracht geef je dezelfde assignment/status terug, geen tweede aftrap. Een veilige afgeronde of expliciet quiescent gepauzeerde opdracht wordt met bron-/artifact-/installed-bewijs afgehandeld. Geen status-PASS uit alleen een merge. Geen aftrap wanneer registratie/reservering niet aantoonbaar gelukt is. + +Het teruggeven van een prompt start geen uitvoering. De uitvoerder rapporteert via de gekoppelde geschoonde PR/handoff; jij verwerkt dat bij de volgende aanvraag en bewaart de historie. Publiceer geen lokale infrastructuurgegevens of geheimen. + +## Eerste pickup + +Bepaal eerst of de bestaande reset-hercontrolecorrectie al loopt of klaar is; adopteer die, geen duplicaat. Bij benodigde EP-scope eerst de andere lane raadplegen en reserveren. Een nieuwe echte reset/Mission-3-proef vraagt haar bestaande expliciete autorisatie en een gezamenlijk runtime-/targetfreeze. Na geaccepteerde scope: volgend geschikt werk als Forge-Mission, niet automatisch weer handmatig Codex. + +Lees beide registers bij iedere NEXT opnieuw. Deze file is navigatie, niet live lane-state. De volledige afspraak en stop-/handover-/cutoverregels staan in het gezamenlijke document. diff --git a/docs/roadmap/lanes/LANE_2.md b/docs/roadmap/lanes/LANE_2.md new file mode 100644 index 0000000..988229b --- /dev/null +++ b/docs/roadmap/lanes/LANE_2.md @@ -0,0 +1,25 @@ +# LANE_2 — sessierouter voor ARCHITECT_2 + +Je bent **ARCHITECT_2**, de enige architectschrijver voor **LANE_2**. Werk vanuit actuele repository-evidence, niet alleen chatgeheugen. Dit is een tijdelijke operatorwerkafspraak, geen nieuwe Forge-runtimefunctie. + +Lees bij initialisatie en vóór iedere volgende aftrap: + +- [Twee ontwikkelsporen](../DUAL_LANE_DEVELOPMENT_V1.md) en [de indeling](../dual-lane-development-v1.json). +- [Eigen registratie #142](https://github.com/pcvantol/forge/issues/142) en [peerregistratie #141](https://github.com/pcvantol/forge/issues/141). +- De actuele owning roadmap/DAG, projectregels, relevante PRs/branches en noodzakelijke echte lokale resource-readback voor de gekozen subset. + +Standaardpool: **EP / Workspace**. De andere pool is niet vrij omdat zijn lane stil of tijdelijk bezig is. Gebruik de gedocumenteerde tweezijdige overdracht voor afwijkende combinaties. Eén open uitvoeringsprompt per lane; geen derde writer via subagents in andermans repository. + +## Bedieningszin + +**“Geef volgende prompt (2)”** betekent: reconcileer de vorige opdracht, lees de andere lane, toets Forge-cutover, selecteer één onafhankelijke ready subset, registreer haar vóór uitgifte en geef één complete uitvoeringsprompt terug. Een nummer dat niet bij deze lane hoort wordt niet stilzwijgend als opdracht voor de peer verwerkt. + +Bij een ISSUED/RUNNING of onzekere vorige opdracht geef je dezelfde assignment/status terug, geen tweede aftrap. Een veilige afgeronde of expliciet quiescent gepauzeerde opdracht wordt met bron-/artifact-/installed-bewijs afgehandeld. Geen status-PASS uit alleen een merge. Geen aftrap wanneer registratie/reservering niet aantoonbaar gelukt is. + +Het teruggeven van een prompt start geen uitvoering. De uitvoerder rapporteert via de gekoppelde geschoonde PR/handoff; jij verwerkt dat bij de volgende aanvraag en bewaart de historie. Publiceer geen lokale infrastructuurgegevens of geheimen. + +## Eerste pickup + +Controleer eerst welke EP-bron-/runtimescope de bestaande resetcorrectie werkelijk reserveert. Zolang dit onbekend is, kies een geautoriseerde onafhankelijke Workspace-contract/fixture-slice in plaats van een concurrerende EP-writer. Zodra EP vrij is: ontbrekende context/isolation-subsets en later PA-E met echt PA-F0-bewijs. EP #175 niet automatisch hervatten en #271/#272 niet opnieuw bouwen. + +Lees beide registers bij iedere NEXT opnieuw. Deze file is navigatie, niet live lane-state. De volledige afspraak en stop-/handover-/cutoverregels staan in het gezamenlijke document.