external-workspaces — Externí pracovní prostor se čte tak, jako tento repozitář čte cokoli jiného, a jeho obsah se nikdy nestane veřejným omylem
Workspace je deklarovaný objekt vrstvy — dodavatel, identita, co operátor povolil, který profil prohlížeče k němu dosáhne, jaké schopnosti se u něj očekávají — a jede na stávajícím kind pipeline na každý povrch bez kódu, který by ho zvlášť ošetřoval. Jeho obsah synchronizuje Node vrstva nástrojů, která už řídí systémový prohlížeč, ukládá se pod `.ai/local/workspaces/`, každý záznam nese původ a úroveň podpory a čte se zpět přes právě jednu schopnost tvarovanou jako `continuity`: poskytuje se, nikdy nepublikuje. Synchronizace je inkrementální od trvalého checkpointu, idempotentní při opakování, při porušení pozorované smlouvy selže uzavřeně a nikdy nikam nezapíše přihlašovací údaj.
AKTIVNÍ 1 of 12 issues done
- připraveno
- 2
- blokováno
- 9
- aktivní
- 0
- verify
- 0
- hotovo
- 1
- zrušeno
- 0
Problém
Operátor drží práci ve workspace hostovaných dodavatelem — nejdřív ChatGPT Project, další později — a nemá k ní strojový přístup. Cokoli se tam rozhodne, je neviditelné pro každý nástroj, který tento repozitář má: nelze to hledat, citovat, přenést do předávky ani propojit s rozhodnutím, které z toho vzešlo. Zřejmá náprava je špatná hned dvakrát. Scrapování stránky vytvoří korpus bez identity, bez provenience a bez možnosti rozlišit změnu od nového vykreslení; a vestavění korpusu do vrstvy tak, jak se staví sledovaný obsah, by na veřejném webu publikovalo tělo soukromé konverzace, kterou dodavatel drží pod ověřenou relací. ADR 0025 stanoví tvar: katalog workspace je výrok samotného repozitáře a je sledován; obsah je stavem tohoto checkoutu a sledován není.
Výsledek
Workspace je deklarovaný objekt vrstvy — dodavatel, identita, co operátor povolil, který profil prohlížeče k němu dosáhne, jaké schopnosti se u něj očekávají — a jede na stávajícím kind pipeline na každý povrch bez kódu, který by ho zvlášť ošetřoval. Jeho obsah synchronizuje Node vrstva nástrojů, která už řídí systémový prohlížeč, ukládá se pod `.ai/local/workspaces/`, každý záznam nese původ a úroveň podpory a čte se zpět přes právě jednu schopnost tvarovanou jako `continuity`: poskytuje se, nikdy nepublikuje. Synchronizace je inkrementální od trvalého checkpointu, idempotentní při opakování, při porušení pozorované smlouvy selže uzavřeně a nikdy nikam nezapíše přihlašovací údaj.
Aktuální stav
Neexistuje nic. Není žádný druh workspace, adaptér, úložiště, schopnost ani kontrola. Repozitář ovládá prohlížeč — Playwright nad systémovým Chrome, v `scripts/lib/ui-audit.mjs` a `scripts/lib/cockpit-probe.mjs`, napojený do CI a čistě přeskakující tam, kde Chrome chybí — a nemá vůbec žádnou konvenci pro držení přihlašovacích údajů, jen negativní, která shodí sestavení webu, dostane-li se do vykresleného výstupu řetězec tvaru tajemství.
Cílový stav
`majordomus workspaces` vypíše, co je deklarováno a co je synchronizováno, s věkem a úrovní podpory každého. Synchronizace je jeden příkaz ve vrstvě nástrojů, obnovitelný, omezený a prokazatelný ze sanitizovaných fixtures v CI bez doteku živého účtu. Přidání druhého dodavatele znamená napsat adaptér a deklaraci, ne upravovat každého konzumenta. Nic pod `.ai/local/workspaces/` se nedostane na web, do vygenerované dokumentace ani do žádné publikované projekce a dokazuje to kontrola, ne věta, která to slibuje.
Rozsah
- .ai/repo/adrs
- .ai/repo/project
- .ai/repo/rules/project
- .ai/repo/policy.yaml
- .ai/repo/ci/gates.yaml
- apps/majordomus-cli/src/capability/builtin
- share/kinds.yaml
- share/allow
- share/schemas
- skripty
- dokumentace
- test/cases
Mimo rozsah
- Jakýkoli zápis k vendorovi — neodešle se žádná zpráva, nenahraje žádný soubor, nepřejmenuje žádná konverzace
- Jakákoli závislost přidaná do majordomus-cli; hranice z ADR 0025 je podstatou
- Jakékoli přihlašovací údaje, cookie, token nebo autorizační hlavička uložené kdekoli ve stromu nebo ve stavovém adresáři
- Jakékoli obcházení autentizace, výzev k vícefázovému ověření, limitů četnosti nebo kontrol proti zneužití
- Publikování synchronizovaného obsahu na web nebo do jakékoli veřejné projekce
- Druhý adaptér dodavatele dřív, než je první prokázán
Kritéria přijetí
- Deklarace workspace je sledovaný objekt deklarovaného druhu, uzavřený povolovacím souborem, popsaný schématem, a dostane se na povrch objektů bez kódu, který by ho zvlášť ošetřoval
- Každý synchronizovaný záznam nese svou upstream identitu, lokální identitu nezávislou na názvu, hash obsahu, transport, který jej vytvořil, a úroveň podpory, vše jako typovaná pole, ne próza
- Úložiště pod .ai/local/workspaces/ má deklarované rozvržení, checkpoint, strop retence v politice a sekci doctor, která ho měří
- Synchronizace pokračuje od svého checkpointu, při přehrání vytvoří stejné úložiště a záznam odstraněný upstreamem označí, místo aby ho tiše smazala
- Pozorovaný kontrakt, který se poruší, selže uzavřeně a vrátí se k transportu prohlížeče; částečný parse se nikdy neperzistuje
- CI dokazuje mapovač a synchronizaci ze sanitizovaných fixtures, bez živého účtu a bez sítě
- Žádný přihlašovací údaj se nedostane do repozitáře, adresáře stavu, fixture, logu ani snapshotu a kontrola to greppuje
- Kontrola selže, jestliže majordomus-cli získá závislost, a kontrola selže, jestliže jakákoli publikovaná projekce sahá do .ai/local/workspaces/
- Subsystém je zdokumentován v docs/ a každé pravidlo, které uvádí, vynucuje kontrola, kterou CI spouští
Validace
- bash test/run.sh
- bin/majordomus doctor
- cargo test --workspace --all-features
- majordomus generate --check
Požadované důkazy
- workspace_kind_declared
- identity_and_provenance_typed
- store_bounded
- sync_idempotent
- fails_closed
- fixtures_prove_it
- credentials_isolated
- boundary_gated
- rules_enforced
Rizika
- Soukromý povrch dodavatele není kontrakt a změní se bez upozornění. Cokoli, co považuje pozorovaný tvar za kanonický, se rozbije hlasitě a hůř, i tiše. Pozorovaný tvar je detail transportu s otiskem a stavem kompatibility; kanonický model je model tohoto repozitáře.
- Synchronizovaný korpus je největší těleso textu, jaké tento repozitář kdy držel, a jediné, které nenapsal. Každý mechanismus, který prochází soubory, o něm musí být výslovně informován, protože žádný si ho sám nevšimne.
- Vzdálenost mezi čtením vlastního autorizovaného pracovního prostoru a automatizací webu dodavatele je politika, ne technikálie. Deklarace jmenuje, co bylo autorizováno; adaptér to nikdy nepřekročí.
- Vrstva nástrojů je devDependency tohoto checkoutu, ne součást vydaného nástroje. Funkce, která funguje jen tam, kde je nainstalováno node_modules, to musí říci, místo aby vypadala rozbitě.
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I1301 | HOTOVO | 0 | — | Workspace je deklarovaný objekt vrstvy; lokální je jen jeho obsah |
| I1302 | PŘIPRAVENO | 1 | I1301 | Identita, původ a úroveň podpory jsou typovaná pole, ne próza |
| I1303 | BLOKOVÁNO | 2 | I1302 | Úložiště je omezené, měřené a neviditelné pro každou publikovanou projekci |
| I1304 | BLOKOVÁNO | 2 | I1302 | Transport prohlížeče je ten, který tento repozitář už řídí |
| I1305 | BLOKOVÁNO | 3 | I1304 | Pozorovaný kontrakt má otisk, stav kompatibility a fixture |
| I1306 | BLOKOVÁNO | 4 | I1303, I1305 | Synchronizace se obnoví, bez újmy se opakuje a řekne, jak je aktuální |
| I1307 | BLOKOVÁNO | 4 | I1302, I1305 | Podoba ChatGPT se mapuje z důkazů a nikdy se nestane kanonickým modelem |
| I1308 | BLOKOVÁNO | 3 | I1303 | Podíl spustitelného souboru je jedna schopnost, utvářená jako continuity |
| I1309 | BLOKOVÁNO | 4 | I1303, I1308 | Hranice, které tento milník prosazuje, jsou kontroly, ne věty |
| I1310 | BLOKOVÁNO | 5 | I1308, I1309 | Subsystém je zdokumentován tam, kde ho člověk hledá, a plán je uzavřen vůči repozitáři |
| I3100 | PŘIPRAVENO | 0 | — | What the ChatGPT project decided is promoted into the layer, each record naming the conversation and message it came from |
| I3173 | BLOKOVÁNO | 7 | I1307, I1308, I3281, I3284 | A synced workspace conversation proposes candidate records that cite their conversation and message, and nothing becomes canonical without an act |
Graf
flowchart LR
I1301["I1301<br/>A workspace is a declared object of the layer; only its content is local"]:::done
I1302["I1302<br/>Identity, provenance and support level are typed fields, not prose"]:::ready
I1303["I1303<br/>The store is bounded, measured and invisible to every published projection"]:::blocked
I1304["I1304<br/>The browser transport is the one this repository already drives"]:::blocked
I1305["I1305<br/>An observed contract has a fingerprint, a compatibility state and a fixture"]:::blocked
I1306["I1306<br/>A sync resumes, repeats itself without harm, and says how fresh it is"]:::blocked
I1307["I1307<br/>The ChatGPT shape is mapped from evidence and never becomes the canonical model"]:::blocked
I1308["I1308<br/>The executable's share is one capability, shaped like continuity"]:::blocked
I1309["I1309<br/>The boundaries this milestone asserts are gates, not sentences"]:::blocked
I1310["I1310<br/>The subsystem is documented where a person looks, and the plan is closed against the repository"]:::blocked
I3100["I3100<br/>What the ChatGPT project decided is promoted into the layer, each record naming the conversation and message it came from"]:::ready
I3173["I3173<br/>A synced workspace conversation proposes candidate records that cite their conversation and message, and nothing becomes canonical without an act"]:::blocked
I1301 --> I1302
I1302 --> I1303
I1302 --> I1304
I1302 --> I1307
I1303 --> I1306
I1303 --> I1308
I1303 --> I1309
I1304 --> I1305
I1305 --> I1306
I1305 --> I1307
I1307 --> I3173
I1308 --> I1309
I1308 --> I1310
I1308 --> I3173
I1309 --> I1310
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (12)
- I1301 Workspace je deklarovaný objekt vrstvy; lokální je jen jeho obsah
- I1302 Identita, původ a úroveň podpory jsou typovaná pole, ne próza
- I1303 Úložiště je omezené, měřené a neviditelné pro každou publikovanou projekci
- I1304 Transport prohlížeče je ten, který tento repozitář už pohání
- I1305 Pozorovaný kontrakt má otisk, stav kompatibility a fixture
- I1306 Synchronizace se obnoví, bez újmy se opakuje a říká, jak je čerstvá
- I1307 Tvar ChatGPT se mapuje z důkazů a nikdy se nestane kanonickým modelem
- I1308 Share spustitelného souboru je jedna schopnost, tvarovaná jako continuity
- I1309 Hranice, které tento milník tvrdí, jsou kontroly, ne věty
- I1310 Subsystém je zdokumentován tam, kde se člověk dívá, a plán je uzavřen proti repozitáři
- I3100 What the ChatGPT project decided is promoted into the layer, each record naming the conversation and message it came from
- I3173 A synced workspace conversation proposes candidate records that cite their conversation and message, and nothing becomes canonical without an act
Kanonický záznam: .ai/repo/project/milestones/external-workspaces.yaml. Přečtěte ho zpět pomocí majordomus plan show external-workspaces.