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.

Podmiňte CI samotným nástrojem, s návratovým kódem, který je smlouvou

Spouštějte kontroly, které spouští CI, čtěte každý nález s příkazem, který ho reprodukuje, a spoléhejte na návratové kódy, z nichž každý znamená jedinou věc: žádný kód neznamená varovat a pokračovat.

zaručeno Politika a vynucovánízákladnímaintainerreviewerjen pro čtení

Situace

Kontrola kvality, která vypisuje varování a končí nulou, je dekorace. Kontrola, jejíž nálezy nelze lokálně reprodukovat, je rozhovor s logem CI. A kontrola, která sama není ověřená, nemusí kontrolovat nic: hook existuje, ale volá nástroj?

Co spouštíte

  • doctor: zdraví samotného nástroje a každé vynucování sladěné s tím, co skutečně běží
  • watch: co se od poslední aktualizace odchýlilo
  • doctrine list a doctrine show <id>: co se vynucuje, čím a zda je to zapojeno
  • check: tatáž smlouva uvnitř úlohy

Scénář

setup: installed-wired
given:
  - 'installed, and the two enforcements the policy declares are actually in place as hooks'
steps:
  - id: doctor
    run: ['doctor']
    note: 'every doctrine the registry declares is reached by the command that claims to run it; every finding carries a reproduce command'
    expect:
      exit: 0
      stdout_contains: ['^OK   wiring      doctor-on-commit', '^OK   command     surface', '^OK   command     coverage', 'doctor: 0 failure']
  - id: watch
    run: ['watch']
    note: 'drift since the last update: policy, projections, state, retention'
    expect:
      exit: 0
      stdout_contains: ['0 drift finding']
  - id: registry
    run: ['doctrine', 'list']
    note: 'which rules are enforced, by what, of which class, and whether each is wired'
    expect:
      exit: 0
      stdout_contains: ['^majordomus.enforcement-wiring +blocking', 'doctor']
  - id: one-rule
    run: ['doctrine', 'show', 'majordomus.enforcement-wiring']
    note: 'one rule: its class decides whether a violation stops the command'
    expect:
      exit: 0
      stdout_contains: ['^id +majordomus.enforcement-wiring', '^class +blocking']
then:
  - 'exit 0 is clean, 10 is a failing finding, 12 is a missing precondition; nothing exits 0 with a FAIL line'
  - 'every FAIL and WARN names the command that reproduces it'
  - 'nothing here reached the network or evaluated generated text'

Výsledek

CI spouští tytéž příkazy jako člověk, dostává tytéž návratové kódy a každý nález je jeden příkaz od reprodukce u stolu. Nástroj dokáže vlastní zapojení dřív, než cokoli jiného posoudí.

Scénář

Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí installed-wired, při každém generování tohoto webu. To, co následuje, není popis toho, co by se mělo stát; je to to, co se stalo.

dáno

  • nainstalováno a obě vynucení, která politika deklaruje, jsou skutečně na místě jako hooky

kdy

  1. 1majordomus doctor
  2. 2majordomus watch
  3. 3majordomus doctrine list
  4. 4majordomus doctrine show majordomus.enforcement-wiring

pak

  • exit 0 je čistý, 10 je selhávající nález, 12 je chybějící předpoklad; nic nekončí s 0 a řádkem FAIL
  • každé FAIL a WARN jmenuje příkaz, který ho reprodukuje
  • nic z toho nedosáhlo sítě ani nevyhodnotilo vygenerovaný text

Co nástroj udělal

Důkazy o běhu, ze kterého byla tato stránka vygenerována: pass, kroků: 4. Výstup je normalizovaný: cesta k repozitáři, časová razítka, identifikátory a doby trvání jsou zástupné hodnoty, nic dalšího se neupravuje.

Testováno v test/cases/94_use_cases.sh, který spouští každý scénář a odmítne krok, jehož zaznamenaný výstup není tím, co vyprodukoval.

  1. každá doktrína, kterou registr deklaruje, je dosažitelná příkazem, který tvrdí, že ji spouští; každý nález nese příkaz k reprodukci

    OK   knowledge   graph — buildable here: 98 node(s), 58 edge(s), compiled into a temporary file and removed; no stored index to go stale
    OK   knowledge   records — 0 record(s) valid against knowledge/v1; every reference resolves  [reproduce: majordomus knowledge check]
    OK   knowledge   candidates — 0 await review, cap 40
    OK   layout      .ai/manifest.yaml — schema ai-repository/v1
    OK   layout      .ai/repo/scope.yaml — version 1; 14 in pathspec(s); every key is one the schema declares
    OK   layout      .ai/local/ — ignored, and nothing under it is tracked
    OK   layout      .ai/ — every section the manifest names exists; the layer is readable without the tool
    OK   layout      .ai/repo/prompts — present
    OK   layout      .ai/local/state/handovers — present, 0 record(s)
    OK   layout      .ai/local/state/checkpoints — present, 0 record(s)
    OK   records     ledger.jsonl — every line is a well-formed event
    OK   policy      39 key(s) — every policy value the code reads is declared, with no reader-side default
    OK   bootstrap   3 projection(s) — each points at .ai/README.md, carries no rule of its own and names only rules in force
    OK   catalogue   0 use case(s), 0 application(s) — every command, doctrine, claim, responsibility, category, setup and cross-reference resolves, both directions
    OK   context     .ai/ — 19 context document(s) carry the contract; ids unique, references resolve, no final document superseded, no cycle  [reproduce: majordomus context validate]
    OK   policy      .ai/repo/policy.yaml — parsed, version 1
    OK   profiles    4 files — parsed; default 'implementation' exists
    INFO adr         .ai/repo/adrs/ — no decisions; nothing to validate
    OK   records     decisions.md — every entry is attributable
    INFO project     .ai/repo/project — no canonical project model here; nothing to validate
    OK   command     surface — 30 public command(s), reconciled against the dispatch table  [reproduce: majordomus doctor]
    OK   doctrine    50 of 61 rule(s) carry a validator — validator, dispatch, propagation, test and CI resolve for every one of the 50; the remaining 11 declare no validator and this check does not examine them
    OK   wiring      doctor-on-commit — wired via .githooks/pre-commit
    OK   wiring      finish-on-push — wired via .githooks/pre-push
    OK   command     coverage — every public command is exercised and refuted  [reproduce: bash test/run.sh 31_command_coverage]
    OK   resolver    handovers — no record for this worktree and branch (absence, not a stale match)  [reproduce: majordomus handover --resolve]
    OK   lifecycle   activity — 0 episode(s) opened here; too few to judge whether the writers stopped
    OK   knowledge   wiring — the close path and the compaction adapter call the deriver
    OK   knowledge   deriver — no episode has closed here; nothing to judge
    INFO project     .ai/repo/project — no canonical project model here; nothing to validate
    OK   projection  AGENTS.md — content matches its stamp
    OK   projection  CLAUDE.md — content matches its stamp
    OK   projection  GEMINI.md — content matches its stamp
    OK   budget      AGENTS.md — 42 lines, budget 150
    OK   links       AGENTS.md — all references resolve
    OK   counts      AGENTS.md — no hardcoded counts
    OK   context     builder — 21 lines, budget 300  [reproduce: majordomus context]
    OK   capture     share/schemas/majordomus/capture/capture.v1 — 2 file(s) describe majordomus.capture/v1 at the path the identifier derives: the record as JSON Schema, the document as protobuf
    OK   capture     .ai/local/prompts — ignored and untracked
    OK   capture     .ai/local/prompts — no records yet; the archive is empty
    OK   capture     .ai/local/prompts — every prompt is present as all three: the record, the Markdown and the YAML
    OK   prompts     .ai/local/prompts — the archive and every record in it are readable by their owner only
    OK   prompts     .ai/local/prompts — no records yet; the archive is empty
    OK   prompt      4 asset(s) — front matter valid, every token known
    OK   records     open-questions.md — every entry parses
    OK   retention   ledger — 1 lines, cap 5000
    OK   retention   handovers — 0 files, cap 200
    OK   retention   checkpoints — 0 files, cap 500
    OK   retention   sessions — 0 records, cap 500
    INFO project     .ai/repo/project — no canonical project model here; nothing to validate
    OK   rules       .ai/repo/rules/vendor/majordomus — every file matches the manifest (1 (1.0.0-alpha.4))
    OK   rules       61 rule(s) — resolve in one deterministic order; vendored baseline plus project rules, no override — 51 carry a validator, 10 are normative text this tool does not check
    OK   rules       blocking — all 44 blocking rule(s) carry a validator
    OK   schema      rules — 61 rule(s) resolve in one order: the vendored baseline in manifest order, then the project's, as a dependency graph
    OK   schema      share/kinds.yaml — 36 kind(s); every one that carries metadata declares a schema
    OK   schema      share/schemas — 53 schema(s), each valid JSON and each applied — by a kind, through an allow-list the tool reads, by a validator that names it, or as a generated document's contract (15)
    OK   records     0 record(s) — every changed_files names work, not generated or local state
    OK   session     .ai/local/session-contexts — ignored and untracked
    OK   session     .ai/local/session-contexts — no working contexts yet; the store is empty
    INFO skill       .ai/repo/skills/ — no skills; nothing to validate
    INFO use-case    30 advisory gap(s) — not covered by an active use case, and the policy does not require it: command:init command:update command:doctor command:watch command:start command:context command:checkpoint command:handover command:check command:finish command:history command:decision command:question command:prompt command:evidence command:skills command:capture command:search command:doctrine command:plan command:version command:session command:knowledge command:adr command:usecase command:rules command:migrate command:recover command:bench command:archive  [reproduce: majordomus usecase coverage]
    OK   use-case    0 of 30 target(s) covered — every public command the policy requires is named and run by an active use case (policy use_cases.coverage)
    INFO env         - — bash <version>, git <version>, jq <version>, shellcheck present
    WARN clone       unpushed — commits on no remote: main(2) — work on one disk is invisible to every other session and cannot be integrated  [reproduce: git push -u origin <branch>]
    OK   clone       uncommitted — no linked worktree, so no uncommitted work can sit in one
    INFO clone       trunk — no remote-tracking branch, so this checkout's distance from the remote trunk cannot be measured
    ·    reasoning   <decided by the advisors and the executable of the recording machine>
    ·    budget      doctor — <timed against the policy budget>
    doctor: 0 failure(s)
    • exit 0
    • stdout_contains /^OK wiring doctor-on-commit/
    • stdout_contains /^OK command surface/
    • stdout_contains /^OK command coverage/
    • stdout_contains /doctor: 0 failure/
  2. drift od poslední aktualizace: politika, projekce, stav, retence

    OK   knowledge   graph — buildable here: 98 node(s), 58 edge(s), compiled into a temporary file and removed; no stored index to go stale
    OK   layout      .ai/manifest.yaml — schema ai-repository/v1
    OK   layout      .ai/repo/scope.yaml — version 1; 14 in pathspec(s); every key is one the schema declares
    OK   layout      .ai/local/ — ignored, and nothing under it is tracked
    OK   layout      .ai/ — every section the manifest names exists; the layer is readable without the tool
    INFO checkpoint  - — no active task
    OK   records     ledger.jsonl — every line is a well-formed event
    OK   policy      39 key(s) — every policy value the code reads is declared, with no reader-side default
    OK   bootstrap   3 projection(s) — each points at .ai/README.md, carries no rule of its own and names only rules in force
    OK   catalogue   0 use case(s), 0 application(s) — every command, doctrine, claim, responsibility, category, setup and cross-reference resolves, both directions
    OK   context     .ai/ — 19 context document(s) carry the contract; ids unique, references resolve, no final document superseded, no cycle  [reproduce: majordomus context validate]
    OK   policy      policy+profiles — match the last update (<hash12>)
    INFO adr         .ai/repo/adrs/ — no decisions; nothing to validate
    OK   records     decisions.md — every entry is attributable
    INFO project     .ai/repo/project — no canonical project model here; nothing to validate
    OK   command     surface — 30 public command(s), reconciled against the dispatch table  [reproduce: majordomus doctor]
    OK   command     coverage — every public command is exercised and refuted  [reproduce: bash test/run.sh 31_command_coverage]
    OK   resolver    handovers — no record for this worktree and branch (absence, not a stale match)  [reproduce: majordomus handover --resolve]
    OK   lifecycle   activity — 0 episode(s) opened here; too few to judge whether the writers stopped
    OK   knowledge   wiring — the close path and the compaction adapter call the deriver
    OK   knowledge   deriver — no episode has closed here; nothing to judge
    INFO project     .ai/repo/project — no canonical project model here; nothing to validate
    OK   projection  AGENTS.md — content matches its stamp
    OK   projection  CLAUDE.md — content matches its stamp
    OK   projection  GEMINI.md — content matches its stamp
    OK   context     builder — 21 lines, budget 300  [reproduce: majordomus context]
    OK   capture     share/schemas/majordomus/capture/capture.v1 — 2 file(s) describe majordomus.capture/v1 at the path the identifier derives: the record as JSON Schema, the document as protobuf
    OK   capture     .ai/local/prompts — ignored and untracked
    OK   capture     .ai/local/prompts — no records yet; the archive is empty
    OK   capture     .ai/local/prompts — every prompt is present as all three: the record, the Markdown and the YAML
    OK   prompts     .ai/local/prompts — the archive and every record in it are readable by their owner only
    OK   prompts     .ai/local/prompts — no records yet; the archive is empty
    OK   prompt      4 asset(s) — front matter valid, every token known
    OK   records     open-questions.md — every entry parses
    OK   retention   ledger — 1 lines, cap 5000
    OK   retention   handovers — 0 files, cap 200
    OK   retention   checkpoints — 0 files, cap 500
    OK   retention   sessions — 0 records, cap 500
    INFO project     .ai/repo/project — no canonical project model here; nothing to validate
    OK   rules       .ai/repo/rules/vendor/majordomus — every file matches the manifest (1 (1.0.0-alpha.4))
    OK   rules       61 rule(s) — resolve in one deterministic order; vendored baseline plus project rules, no override — 51 carry a validator, 10 are normative text this tool does not check
    OK   rules       blocking — all 44 blocking rule(s) carry a validator
    OK   schema      rules — 61 rule(s) resolve in one order: the vendored baseline in manifest order, then the project's, as a dependency graph
    OK   schema      share/kinds.yaml — 36 kind(s); every one that carries metadata declares a schema
    OK   schema      share/schemas — 53 schema(s), each valid JSON and each applied — by a kind, through an allow-list the tool reads, by a validator that names it, or as a generated document's contract (15)
    INFO scope       - — no active task
    OK   session     .ai/local/session-contexts — ignored and untracked
    OK   session     .ai/local/session-contexts — no working contexts yet; the store is empty
    INFO skill       .ai/repo/skills/ — no skills; nothing to validate
    INFO state       - — no active task
    ·    budget      watch — <timed against the policy budget>
    INFO state       - — no active task
    watch: 0 drift finding(s)
    • exit 0
    • stdout_contains /0 drift finding/
  3. která pravidla jsou vynucována, čím, jaké třídy a zda je každé zapojeno

    majordomus.knowledge-graph             advisory  mj_validate_knowledge_graph doctor,watch
    majordomus.knowledge-integrity         blocking  mj_validate_knowledge_integrity check,doctor
    majordomus.candidates-reviewed         advisory  mj_validate_knowledge_accumulation doctor
    majordomus.ai-layout-integrity         blocking  mj_validate_ai_layout    doctor,watch
    majordomus.checkpoint-freshness        advisory  mj_validate_checkpoint   check,watch
    majordomus.layout-integrity            advisory  mj_validate_layout       doctor
    majordomus.ledger-integrity            blocking  mj_validate_ledger       check,doctor,watch
    majordomus.policy-completeness         blocking  mj_validate_policy_defaults doctor,watch
    majordomus.bootstrap-integrity         blocking  mj_validate_bootstrap    doctor,watch
    majordomus.catalogue-integrity         blocking  mj_validate_catalogue    doctor,watch
    majordomus.context-integrity           blocking  mj_validate_context      doctor,watch
    majordomus.policy-integrity            blocking  mj_validate_policy       doctor,watch
    majordomus.adr-integrity               blocking  mj_validate_adr          doctor,watch
    majordomus.blocker-resolution          blocking  mj_validate_blockers     check,finish
    majordomus.decision-records            advisory  mj_validate_decisions    check,doctor,watch
    majordomus.dag-integrity               blocking  mj_validate_dag          doctor,watch
    majordomus.command-surface             blocking  mj_validate_command_surface doctor,watch
    majordomus.doctrine-wiring-integrity   blocking  mj_validate_doctrine_wiring doctor
    majordomus.enforcement-wiring          blocking  mj_validate_wiring       doctor
    majordomus.command-coverage            blocking  mj_validate_command_coverage doctor,watch
    majordomus.handover-integrity          blocking  mj_validate_resolver     doctor,watch
    majordomus.lifecycle-observed          blocking  mj_validate_lifecycle    doctor,watch
    majordomus.knowledge-observed          blocking  mj_validate_knowledge_lifecycle doctor,watch
    majordomus.note-integrity              blocking  mj_validate_note         finish
    majordomus.profile-requirements        blocking  mj_validate_profile_requirements finish
    majordomus.project-integrity           blocking  mj_validate_project      doctor,watch
    majordomus.projection-integrity        blocking  mj_validate_projection   doctor,watch
    majordomus.context-budget              blocking  mj_validate_budget       doctor,watch
    majordomus.deployment-contract         blocking  mj_validate_deployments  doctor,watch
    majordomus.prompt-capture              blocking  mj_validate_prompt_capture doctor,watch
    majordomus.prompt-continuity           blocking  mj_validate_prompt_continuity doctor,watch
    majordomus.prompt-integrity            blocking  mj_validate_prompts      doctor,watch
    majordomus.questions-store-integrity   blocking  mj_validate_questions_store doctor,watch
    majordomus.retention-caps              blocking  mj_validate_retention    doctor,watch
    majordomus.roadmap-integrity           blocking  mj_validate_roadmap      doctor,watch
    majordomus.rule-package-integrity      blocking  mj_validate_rule_package doctor,watch
    majordomus.schema-integrity            blocking  mj_validate_schema_integrity doctor,watch
    majordomus.scope-integrity             blocking  mj_validate_scope        check,finish,watch
    majordomus.session-records             blocking  mj_validate_session_records doctor,watch
    majordomus.record-changed-files        advisory  mj_validate_record_changed_files doctor
    majordomus.session-lifecycle           blocking  mj_validate_session_lifecycle doctor,watch
    majordomus.skill-integrity             blocking  mj_validate_skills       doctor,watch
    majordomus.state-consistency           blocking  mj_validate_state        check,finish,watch
    majordomus.task-continuity             advisory  mj_validate_continuity   finish
    majordomus.task-on-the-mesh            blocking  mj_validate_task_on_the_mesh check,finish
    majordomus.use-case-coverage           blocking  mj_validate_use_case_coverage doctor,check,finish
    majordomus.verification-integrity      blocking  mj_validate_verification finish
    majordomus.obligation-closure          blocking  mj_validate_obligations  check,finish
    majordomus.completion-gates            blocking  mj_validate_completion_gates check,finish
    majordomus.publication-currency        blocking  mj_validate_publication_currency finish
    • exit 0
    • stdout_contains /^majordomus.enforcement-wiring +blocking/
    • stdout_contains /doctor/
  4. jedno pravidlo: jeho třída rozhoduje, zda porušení zastaví příkaz

    id          majordomus.enforcement-wiring
    title       Enforcement wiring
    class       blocking
    principle   
    summary     Every enforcement the policy declares is invoked by the hook it names, from a file the dispatcher will actually execute, without swallowing the exit code.
    validator   mj_validate_wiring
    enforced by doctor
    exit code   10
    claims      wiring-reconciliation,dispatcher-wiring
    tests       test/cases/14_wiring_dispatcher.sh
    depends on  majordomus.define-done-first@1
    rule        .ai/repo/rules/vendor/majordomus/rules/enforcement-wiring.v1.md (vendor:majordomus)
    wired       yes (lib/doctor.sh defines it)
    • exit 0
    • stdout_contains /^id +majordomus.enforcement-wiring/
    • stdout_contains /^class +blocking/

Proč to nástroj ví

Řetězec od této stránky ke kódu: případ užití jmenuje příkazy, pravidla a tvrzení; každé pravidlo se dispatchuje z registru a každé tvrzení jmenuje test, který ho dokazuje; scénář výše provedl příkazy. Nic v tomto řetězci není text o záměru.

Pravidla, díky nimž platí

Uplatněné záruky

Související případy užití

Vypočteno z toho, co sdílejí: tvrzení, pravidla, příkazy, kategorie, aplikace. Tento seznam nikdo neudržuje.

Okamžiky, na které to odpovídá

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