Skip to content

Anthropic built Scion for itself. Carbon Forge is yours →

Carbon Forge
Menu

Guida

Regole di landing: i code owner tenuti nel registro, con un workflow AEGIS come gate

Un file CODEOWNERS nomina i revisori, ma l'approvazione vive in una forge ed è legata a una modifica che nel frattempo può essersi spostata. Carbon Forge tiene la regola e le approvazioni nel registro, legate alla modifica esatta, e lascia che un workflow sia uno degli approvatori.

Anche in: English, Español, Português, 日本語, Deutsch, Français, 한국어, 简体中文, हिन्दी · Tutte le guide in italiano

Trasparenza: Carbon Forge, e AEGIS accanto a esso, sono sviluppati da 100monkeys.ai, quindi leggete questa guida come il resoconto di chi li costruisce. L'ha scritta in bozza uno dei nostri agenti di IA a partire dalla documentazione pubblica, soprattutto il passo 8 di Working in lanes, Source control settings, MCP tools catalog: Lanes, continued e Source control: how it is built and why, e l'azienda l'ha rivista; questa edizione italiana è una traduzione della guida originale in inglese. La tabella, le chiamate e il rifiuto sono quelli della documentazione stessa, e le citazioni restano in inglese con la traduzione accanto. Dove la documentazione lascia una domanda aperta, l'ultima sezione lo dice.

Perché tenere la regola nel registro

La documentazione dà il motivo in due frasi: "Landing rules are the code-owners rule kept in the record. The approvers a path needs are named on a page of the workspace, and each approval binds to the lane's composition hash, so review is the record's and not a forge's." (Le regole di landing sono la regola dei code owner tenuta nel registro. Gli approvatori di cui un percorso ha bisogno sono nominati su una pagina del workspace, e ogni approvazione si lega all'hash di composizione della lane, così la revisione appartiene al registro e non a una forge.) Senza questo, "a landing can carry code no approver saw." (un landing può portare codice che nessun approvatore ha visto). Un limite da sapere subito: "Carbon runs no review itself." (Carbon non esegue alcuna revisione da sé.) Registra chi ha approvato cosa; la revisione la fanno le persone e i workflow che nominate.

Passo 1. Proteggete il trunk

Le regole vengono lette solo su un trunk protetto. Un amministratore del workspace spunta Protect the trunk in Settings, Workspace, Source control, e se vuole Protect pages and atoms too. Un agente controlla l'impostazione con:

workspaces.get_settings {}
→ { "workspaceId": "…", "trunkProtected": true, "trunkProtectedEntities": false }

Da quel momento "the trunk moves only by a lane's landing" (il trunk si muove solo con il landing di una lane), e una scrittura diretta viene rifiutata con workspace <slug> protects its trunk: the trunk lands by lanes.land only; write on a lane.

Passo 2. Scrivete la pagina .landing-rules

Create una pagina al percorso riservato .landing-rules la cui prima tabella Markdown abbia l'intestazione glob | approvers | gate. L'esempio della documentazione:

| glob | approvers | gate |
| --- | --- | --- |
| app/src/billing/** | <user id>, <user id> | |
| docs/** | <user id> | docs-review |

Solo un amministratore del workspace scrive questa pagina, sul trunk o su una lane; chiunque altro riceve il rifiuto The landing rules page .landing-rules is reserved: only a workspace admin writes it.

Passo 3. Verificate che il server la legga come valida

La sezione Landing rules della finestra delle impostazioni riporta <n> rules, valid., oppure nomina una riga malformata con Every landing is refused until it is fixed. Una riga che nomina un non membro, o che non nomina né un approvatore né un gate, è malformata. Una pagina rotta ferma ogni landing, quindi controllate prima di farci affidamento.

Passo 4. Fate il lavoro su una lane

Aprite una lane e scriveteci come mostra Working in lanes. Al landing, ogni percorso che la lane tocca viene confrontato con ogni riga: una pagina per il suo percorso, una pagina spostata per entrambi i percorsi, un file di albero come <tree path>/<entry path>.

Passo 5. Leggete cosa serve ancora alla lane

lanes.create { "label": "agent/7/fix-login" }
lanes.get { "label": "agent/7/fix-login" }
lanes.export { "lane": "agent/7/fix-login" }   // header line: # composition: <hash>
lanes.approve { "lane": "agent/7/fix-login" }

lanes.get elenca chi ha approvato, chi manca e se ogni gate è pending o satisfied. Nell'app, la Overview di una lane mostra lo stesso: le regole che corrispondono, approvate n di m, e un'approvazione da gate segnata "via gate <workflow>".

Passo 6. Approvate la modifica esatta

Un revisore legge lanes.export, un unico diff unificato con in testa # composition: <hash>, e poi chiama lanes.approve. L'approvazione si lega a quell'hash, quindi "a reviewer who reads the export and approves at its # composition: value has approved exactly that change." (un revisore che legge l'export e approva al suo valore # composition: ha approvato esattamente quella modifica). Qualsiasi patch, risoluzione o spostamento del trunk successivo che cambi ciò che verrebbe integrato cambia l'hash, e le approvazioni precedenti smettono di contare. Approvate dopo l'ultima modifica, non prima.

Passo 7. Lasciate che il workflow AEGIS approvi come gate

Un gate è soddisfatto solo dal workflow stesso. Il token dell'esecuzione viene emesso con tokens.mint_execution e l'argomento facoltativo workflow con il nome del gate, da 1 a 128 caratteri; l'esecuzione chiama poi lanes.approve con quel token. La corrispondenza è esatta, "case included" (maiuscole e minuscole comprese). "A person's approval, and one given through a token minted without workflow, satisfies no gate." (L'approvazione di una persona, e una data con un token emesso senza workflow, non soddisfano alcun gate.) Il token di esecuzione è figlio del token del chiamante, limitato a un workspace, un percorso di albero, una lane, un elenco di strumenti e al massimo un giorno. Con AEGIS by 100monkeys.ai, in beta, il gate è un vostro workflow: la riga lo nomina, e Carbon Forge controlla solo che una sua esecuzione abbia approvato.

Passo 8. Integrate

lanes.land { "label": "agent/7/fix-login", "intent": "fix: accept magic links", "dry_run": true }
lanes.land { "label": "agent/7/fix-login", "intent": "fix: accept magic links" }

Un landing a cui mancano approvazioni viene rifiutato per intero, indicando cosa manca:

Lane <label> touches <path> under landing rule <glob> (line <n>), which needs approval from <user ids> and gate <name> at the lane's current composition. Approve with lanes.approve; nothing was written.

Quando il landing avviene, le approvazioni che ha consumato, compresa quella del gate, "follow its intent as Approved-by: lines" (seguono la sua intenzione come righe Approved-by:), e il changeset viene sigillato come qualsiasi altro. Attenzione: un landing con dry_run non controlla le regole; per quello, leggete lanes.get.

Cosa la documentazione lascia senza risposta

Guide correlate

Tenete la revisione nel registro.