Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Produkt

funkce produktu jako objekty vrstvy: co smí obsahovat soubor funkce, co z něj odvozuje každý povrch, hranice veřejné projekce a její seznam povolených položek, co vykreslují domovská stránka a stránky `/features/` a co se odmítá

Vykresleno z docs/PRODUCT.md — stejný Markdown, který ukazuje GitHub.

Veřejná tvář produktu — domovská stránka, stránky /features/, matice schopností — říká, co Majordomus dělá. Každý fakt na ní je odvozen z repozitáře, který popisuje: jaké schopnosti existují, která rozhraní je vystavují, kolik objektů každého druhu vrstva drží, na které provozní okamžiky funkce odpovídá, co je zaručeno a co je jen doporučeno. Člověk píše, které části produktu tvoří jednu kapitolu a v jakém pořadí. Chování tak, jak je implementováno a testováno; kde se tento dokument a spustitelný soubor rozcházejí, dokument je špatně a mění se ve stejném commitu. Rozhodnutí je ADR 23; pravidlo je project.product-surface-derived; vlastní kontrakt adresáře je .ai/repo/features/README.md.

Druh

.ai/repo/features/<id>.md    one product feature    schema: feature/v1

Název souboru je id je slug je trasa: features/worktrees.md je majordomus product show worktrees, majordomus://feature/worktrees, GET /api/v1/product/feature?id=worktrees a /features/worktrees/. Funkci nic neregistruje. Zdrojová třída feature v .ai/repo/knowledge/sources.yaml objevuje každý soubor pod tímto adresářem přes index správy verzí, druh feature v share/kinds.yaml říká, jak se čte, a share/schemas/majordomus/feature/feature.v1.schema.json rozhoduje, zda je platný.

Co je napsáno a co odvozeno

Soubor funkce drží odkazy a redakční rozhodnutí a nic jiného. Schéma nastavuje additionalProperties: false, takže odvozený klíč jako surfaces:, route: nebo počet je odmítnut při validaci, místo aby mu bylo tiše věřeno.

V souboruZ toho odvozeno
modules — moduly schopností spustitelného souboruschopnosti, nástroje MCP, routy HTTP a cesty příkazové řádky za funkcí
commands — veřejné příkazy shell nástrojepovrch příkazové řádky a fáze a příznak jen pro čtení u každého příkazu
kinds — druhy objektů vrstvykolik objektů každého druhu tento repozitář drží
rules, claimstřída každého pravidla, zda ho nástroj vynucuje, stav každého tvrzení
docs, adrs, use_casesnázvy, stavy a trasy, které jim web dává
cockpit, weboblasti Cockpitu a přípojné body webové topologie
areas, audiences — vlastní taxonomie katalogu whyprovozní okamžiky, které jmenují kterýkoli z mechanismů funkce
headline, summary, short_title, status, weight, featured, tags, relatednic: to jsou redakční rozhodnutí

Rozhraní, přes která je funkce vystavena, se odvozují a nikdy nedeklarují: cli, když modul, který jmenuje, má cestu v příkazové řádce nebo jmenuje shellový příkaz, api, když modul má HTTP routu, mcp, když modul má nástroj nebo zdroj nebo funkce jmenuje druh, cockpit, když jmenuje oblast nebo modul s jednou, docs, když jmenuje dokument. Funkce proto nemůže tvrdit povrch, který registr nemá.

Jeden model, každé rozhraní

apps/majordomus-cli/src/product.rs řeší každý odkaz proti indexu, registru schopností, registru příkazů, katalogu why a topologii webu a je jediným místem, kde se cokoli z toho rozhoduje. apps/majordomus-cli/src/capability/builtin/product.rs nad ním deklaruje šest schopností s capability!, takže příkazová řádka, trasy HTTP, operace OpenAPI, nástroje a zdroje MCP a generovaná reference jsou projekce jedné deklarace (ADR 2, docs/CAPABILITIES.md).

OdpověďPříkazová řádkaHTTPMCP
každá funkcemajordomus product listGET /api/v1/product/featuresmajordomus_features, majordomus://product
jedna funkcemajordomus product show <id>GET /api/v1/product/featuremajordomus_feature, majordomus://feature/<id>
doménymajordomus product domainsGET /api/v1/product/domainsmajordomus_product_domains, majordomus://product/domains
maticemajordomus product matrixGET /api/v1/product/matrixmajordomus_product_matrix
poskytovatelémajordomus product providersGET /api/v1/product/providersmajordomus_providers
odmítnutímajordomus product validateGET /api/v1/product/validatemajordomus_product_validate

Domény: tvar produktu nad funkcí

Doména je jedna z mála věcí, které produkt ovládá — kontext, koordinace, governance, důkazy, dokončení a povrchy, jak je tento repozitář deklaruje — uvedená jednou v .ai/repo/features/domains/<id>.md (druh domain, schéma domain/v1) s názvem, jednovětým headline, jednovětým problem a weight, které řadí každý výpis domén (ADR 104).

Funkce pojmenovává přesně jednu doménu ve vlastním poli domain a doména nic nevypisuje: její členové jsou stabilní funkce, které ji pojmenovávají, a jejich sjednocení povrchů, odlišná tvrzení, případy užití, pravidla a schopnosti za nimi a okamžiky, na které odpovídají, se odvozují, nikdy nepíší. product validate odmítne doménu, která neexistuje (s nejbližším kandidátem), stabilní funkci, která žádnou nepojmenovává, zatímco nějaká je deklarována, a stabilní funkci pod doménou, která není stabilní; doména, kterou nepojmenovává žádná stabilní funkce, je varování a nikde se neukazuje.

Oblasti katalogu why nejsou domény a nejsou jimi nahrazeny. Oblast je tam, kde provoz bolí, funkce může sloužit několika a momenty, diagnóza a postranní panel Cockpitu se řadí podle oblasti. Doména je tam, kde produkt odpovídá, a funkce má právě jednu.

Hranice veřejné projekce

majordomus generate site zapisuje site/data/registry/product.json a product-graph.json. Datová sada není serializovaný model: PUBLIC_FEATURE_FIELDS a PUBLIC_DOMAIN_FIELDS v apps/majordomus-cli/src/site.rs jsou seznamy povolených a každé pole se kopíruje podle jména. Pole přidané do modelu se na publikovanou stránku nedostane, dokud ho někdo nepřidá do toho seznamu, což je smysl — náhodné vyloučení není hranice a pole, které nikdo nepovolil, se nepublikuje.

Co to drží venku, se tvrdí, ne předpokládá: Markdown tělo funkce, absolutní cesty, cokoli mimo repozitář. Test je apps/majordomus-cli/tests/product.rs, který sestaví dataset nad fixture a odmítne klíč, který nikdo nezapsal do allow-listu, tělo, kořenovou cestu fixture a dočasný adresář; scripts/generate-site-data artefakt odmítne ještě jednou, než z něj cokoli vykreslí.

Co s tím web dělá

scripts/generate-site-data validuje dataset — schéma je majordomus-site-product/v1, publikované jako share/schemas/generated/site-product.schema.json — a zapisuje jednu stránku pro každou funkci, která není koncept, pod site/content/features/, s vlastním Markdownem funkce jako tělem. Šablony čtou dataset a nic nejmenují:

CestaŠablonaCo vykresluje
/site/templates/index.htmlkapitoly (funkce, které se deklarují jako zvýrazněné, v pořadí podle váhy), rozhraní, matice, graf, poskytovatelé, druhy a doktrína
/features/features-section.htmlkaždá funkce, která není koncept, jako karta, seskupená podle domény, kterou uvádí, v pořadí vah domén, přičemž funkce, kterou nedrží žádná zobrazená doména, je uvedena zvlášť; rozhraní, graf, poskytovatelé
/features/<id>/feature.htmldrobečková navigace jeho doménou, jeho slibem, jeho vlastní prózou, pak vše odvozené z jeho referencí: proč existuje, jak funguje, kde sedí, jeho rozhraní, jeho důkazy, jak ho používat, odkud stránka pochází a související funkce
/features/matrix/features-matrix.htmlfunkce vůči rozhraním a moduly, příkazy a druhy vůči funkcím, které je jmenují, a kolik z každé funkce je prokázáno

Funkce v seznamu se kreslí jedním partialem, site/templates/partials/feature-card.html: její název odkazující na její stránku, její stav, její jednovětý nadpis, rozhraní, kterých dosahuje, kolik tvrzení jmenuje a kolik z nich jmenuje test, který je rozhoduje, a kolik případů užití ji ukazuje v použití. Bere funkci z datové sady i člena domény stejně; počet, který data nenesou, se vynechá, a nula, kterou nesou, se řekne slovy. Související funkce na stránce funkce pocházejí ze vztahů, které datová sada drží — funkce, které jmenuje a které jmenují ji, ostatní členové její domény a funkce, které s ní sdílejí případ užití nebo tvrzení — každá karta říká které. scripts/site-check (kontrola features) drží index a stránky k datové sadě: každá veřejná funkce je jednou kartou na /features/, ve skupině své domény; každá karta na webu jmenuje veřejnou funkci a odkazuje na její stránku; funkce s doménou ji nese ve své drobečkové navigaci; a šablony, které funkce kreslí, žádnou nevybírají ručně a netisknou žádné vlastní číslo. test/cases/810_a_feature_is_explored_under_its_domain.sh přidá jeden soubor funkce do kopie tohoto repozitáře, sestaví web tak, jak to dělá build, najde kartu funkce pod její doménou a její stránku pod stopou domény, pak soubor odstraní a nenajde nic zbylého.

site/data/marketing.toml je jediný ručně psaný soubor: pozicovací věty a popisky tlačítek, držený v řádkovém rozpočtu, nenese žádné číslo ani tvrzení o schopnostech. Trasy, které se přesunuly, jsou deklarovány jednou v site/data/nav.toml pod [[redirects]] a stávají se aliasy Zola na stránce, na kterou ukazují.

Terminál na domovské stránce

Stránka ukazuje nástroj za běhu a každý přepis na ní je běh, který se stal.

scripts/generate-site-data zapisuje site/data/generated/terminal.json spojením dvou datových sad, které už zapsal: lifecycle.json, uspořádaný životní cyklus, který nástroj deklaruje, a catalogue.json, jejichž use_cases[].evidence.steps[] nesou příkazový řádek, exit stav a stdout každého scénáře případu užití, který stejný běh provedl. Výstup byl při zachycení redigován — lib/usecase.sh nahrazuje cestu repozitáře, hodiny, identifikátory a verze nástrojů zástupnými značkami — takže přepis nejmenuje žádný stroj a na jiném se reprodukuje bajt po bajtu.

Nic v datové sadě, generátoru ani šabloně nejmenuje příkaz:

PoleJak se rozhoduje
pořadí záložekvlastní pořadí životního cyklu
který běh ilustruje krokmezi úspěšnými kroky scénářů toho příkazu: ten, který uspěl před odmítnutým, pak nejdelší tělo, pak případ užití a id kroku
který panel se otevře prvníten s nejvíce výstupu
co je v odmítnutíchkaždý zaznamenaný krok příkazu životního cyklu, který skončil nenulově, deduplikovaný podle příkazu, stavu a těla, seřazený podle životního cyklu
věta vedle odmítnutíprvní řádek FAIL, který běh vypsal, jinak jeho poslední řádek, až po příkaz pro reprodukci

Do generování jsou zabudována dvě odmítnutí. Krok životního cyklu, který nespustil žádný scénář, ho nechá selhat, protože stránka, která tiše vynechá fázi, tvrdí životní cyklus, kterým nikdo nechodí; a korpus bez jediného zaznamenaného odmítnutí ho nechá selhat, protože sekce, která říká, že nástroj odmítá, nesmí být prázdná. Kontrola terminal v scripts/site-check pak čte sestavené HTML oběma směry: každý panel, který dataset drží, je na stránce, každý panel na stránce je běh, každý spárovaný podle příkazového řádku, exit stavu a řádku verdiktu, a každý panel odkazuje na scénář, ve kterém byl zaznamenán.

Důsledek, který stojí za vyslovení: domovská stránka nemůže ukazovat nástroj, jak dělá něco, co nedělá, a nemůže dál ukazovat něco, co přestalo nastávat. Příkaz, který přestane odmítat, zmizí ze stránky při příštím generování, a ručně upravený přepis selže v kontrole, ne u čtenáře.

Příběh domovské stránky a co se ukazuje vyhledávačům

Domovská stránka je argument s pořadím a pořadí jsou data: site/data/homepage.toml vypisuje id sekcí, které stránka vykresluje — hero, recognise, map, how, refuses, surfaces, proof, install. Vypráví se nejdřív přehled: co to je, co se bez toho pokazí, co to řídí, jak jím prochází jedna úloha, důkaz, že „hotovo“ lze odmítnout, jak jedna deklarace dosáhne každého rozhraní, důkazy a jak začít. Referenční materiál — přepisy životního cyklu, úplný katalog způsobů selhání, každé zaznamenané odmítnutí, schopnost na všech jejích površích — zůstává na stránce za rozbalením, ne v jejím prvním čtení. O pořadí se v site/templates/index.html nerozhoduje nic.

SekceCo ukazujeOdkud pochází
heropozicování, jeden instalační příkaz a produkt: výzva, která otevře první rozhraní, jež člověk otevře, vedle jeho pohledu čteného z vlastního plánu tohoto projektumarketing.toml, distribution.json, web.json, build.json snapshots, plan.json, roadmap.json
recognisetři selhání, každé problem domény; vybrané okamžiky za rozbalenímhomepage.toml problems, domény product.json, katalog Why
mapdomény produktu jako rozbalovací celky: selhání, na které každá odpovídá, její funkce, její počtyproduct.json domén (ADR 0104), přes partials/domain-map.html
howživotní cyklus úlohy v jeho pořadí; zaznamenaný běh každého kroku za rozbalovacím blokemterminal.json
refusesvýzva projitá krok za krokem, její první verdikt řádek po řádku a každé další zaznamenané odmítnutí za rozbalovacím prvkemchallenge.json, terminal.json
surfacesdeklarace po rozhraní, velikost modelu, poskytovatelé, jedna schopnost na každém povrchuproduct.json, registry.json
proofkaždé tvrzení počítané podle deklarovaného stavu, co podporuje zaznamenaný běh, odkud stránka pochází, co není sestavenodocs/CLAIMS.yaml, product.json evidence, manifesto.toml
installpříkazy instalace, dalšího kroku a ověřenídistribution.json

Hero produkt otevírá, místo aby jej popisoval. Který produkt, v šabloně napsáno není: je to první z rozhraní, která člověk otevírá — stabilní funkce, které webová topologie dává povrchu interface, v jejich vlastním pořadí — a výzva vede na jeho publikovanou kopii přesně tehdy, když ji publikace drží (pravidlo, kterým se už řídí seznam surfaces), jinak na stránku, která říká, jak ji otevřít. Pohled vedle výzvy počítá úkoly tohoto projektu podle stavů plánu a kreslí milníky, které probíhají; do 2026-10-13 na tomto místě byl přepis terminálu, který je nyní vyprávěn v refuses, kde o něm stránka argumentuje.

Dlouhý výklad, který domovská stránka dříve nesla sekci po sekci, je /method/argument/, přesunut doslova, takže žádná věta z manifesto.toml se nepřestala vykreslovat.

Web je indexován jednou deklarovanou politikou. [indexing] unlisted v site/data/nav.toml pojmenovává sekce, jejichž stránky detailu jsou doklady — úkoly a milníky plánu, schopnosti a moduly registru, uzavřené relace. Tyto stránky zůstávají publikované a odkazované; nesou robots noindex (templates/base.html) a jsou vynechány z sitemap.xml (templates/sitemap.xml), zatímco indexová stránka každé sekce zůstává indexována.

scripts/ci/homepage-check to všechno drží, v obou směrech, pod blokujícím pravidlem project.homepage-tells-a-declared-story a scripts/site-check hlásí své nálezy, takže domovská stránka nebo sitemap, které se rozejdou se svou deklarací, se odmítnou dřív, než je build Pages publikuje. test/cases/333_homepage_narrative.sh dokazuje každou kontrolu tím, že ji rozbije.

Váha domovské stránky je deklarována ve stejném souboru jako [budget]: skripty a stylesheety, které načítá z webu, a data grafu, která nese inline. Domovská stránka nenačítá žádný runtime grafu: její mapa jsou domény jako nativní rozbalovací bloky a složený graf produktu je na /features/, publikovaný na /graphs/product.json a stahovaný, až se kresba poprvé dostane do zorného pole; žádná stránka nenačítá runtime Mermaid, pokud nenese diagram. Stejná kontrola hlásí aktuální váhu při každém buildu, takže zvýšení rozpočtu je revidovaná změna homepage.toml, nikdy tichá. Držena jsou i slova: homepage.toml [promises] deklaruje slova schopností, která smějí ručně psané marketing.toml a manifesto.toml používat jen s tvrzením (bezobslužně, autonomně, automatický merge či release a podobně), každé s id tvrzení, které ho povoluje, a kontrola selže u slova, jehož tvrzení chybí, není zaručeno nebo není podpořeno zaznamenaným během, a u jména funkce, kterou model produktu nenazývá stabilní.

Přidání sekce domovské stránky: napište ji do index.html s id, vložte toto id tam, kam patří, do homepage.toml v order, a dejte jí odkaz nebo odvozený údaj. Vyřazení detailních stránek sekce ze seznamu: přidejte její název do [indexing] unlisted.

Co je odmítnuto

  • Odkaz, který se na nic nerozřeší. Zpráva pojmenovává soubor, klíč a nejbližšího kandidáta, což z ní dělá opravu, ne vyšetřování.
  • Odvozený klíč v souboru funkce — surfaces, route, počet, seznam okamžiků.
  • Funkce featured, která není stable; funkce stable, která nejmenuje žádný mechanismus ani dokument nebo jejíž tělo postrádá ## What it does a ## What it does not do.
  • Zastaralý dataset: majordomus generate --check selže na stromě, jehož product.json neodpovídá repozitáři, takže úvodní stránka nemůže popisovat spustitelný soubor, který tento repozitář nemá.
  • Šablona, generátor nebo navigační soubor, který ručně jmenuje funkci, modul, příkaz, providera nebo počet. Rozhoduje o tom scripts/site-check.

Modul schopností, veřejný příkaz nebo druh objektu, který žádná stabilní funkce nejmenuje, není odmítnut. majordomus product validate to hlásí jako mezeru a zobrazuje se v Sloupec povrchu říká, kde je funkce dosažitelná. Neříká, co z ní platí, a tabulka shody, která odpovídá jen na první otázku, svádí čtenáře předpokládat druhou. Proto každý řádek nese také proven z claims: kolik z tvrzení, která funkce jmenuje, je zaručeno a jmenuje případ, který je rozhoduje, z kolika jich jmenuje vůbec. Obě čísla jsou odvozená — tvrzení ze souboru funkce, případ z test: každého tvrzení v docs/CLAIMS.yaml — a tvrzení, jehož test je -, tedy plánovaný nebo zamítnutý, nenese žádné, místo pomlčky, kterou by čtenář mohl zaměnit za důkaz. Stejné pole dosáhne každé stránky funkce vedle tvrzení, které rozhoduje, takže důkaz je na jedno přečtení, ne na tři.

matice, protože věc, kterou produkt dělá a stránka produktu ji nezmiňuje, je přesně to, co tento model existuje, aby zviditelnil. Uzavření je jeden odkaz v jednom souboru.

Přidání funkce

cp .ai/repo/features/worktrees.md .ai/repo/features/<id>.md
$EDITOR .ai/repo/features/<id>.md       # id, headline, summary, the references, the body
git add .ai/repo/features/<id>.md       # discovery reads the version-control index
majordomus product validate             # schema, references, floors
just derive                             # the dataset, the pages and the generated docs follow

test/cases/97_product_features.sh dělá přesně to a vrací to zpět, čímž dokazuje, že na funkci odpovídá příkazová řádka, HTTP, MCP, dataset webu a graf, dokud existuje, a žádné z nich, jakmile zmizí.

Tvrzení, která tento dokument definuje

Každý odkazuje na vlastní stránku s implementací, testem a místy použití.

Prohledává názvy a popisy všech stránek, které tento web publikuje.