UML — cat-harness/qa

Generated by cat-harness-tools/scripts/gen-uml-overview.ts — do not edit. The qa sub-graph of cat-harness (cat-harness/test/results), with every attribute read from its node schema.

Sources (same model): PlantUML · Mermaid · Graphviz DOT

Layout
UML class diagram of cat-harness/qa: one package per named sub-graph, one class per node schema, with its data fields. Portrait layout.
UML class diagram of cat-harness/qa: one package per named sub-graph, one class per node schema, with its data fields. Landscape layout.

The interactive view lays this diagram out in your browser with Graphviz, and needs JavaScript. Without it, pick Portrait or Landscape, or read the DOT source.

sub-graphdirectorygraph typologiesnode schemanodescohesioninout
cat-harness/qacat-harness/test/resultsqaKgQaReportSchema; KgQaManifestSchema; BlockQaReport; TestRunSchema; ts: QaWitness; ts: QaResult; QaScriptKind; ts: TranslationBlockQaReport; QaIndexSchema; QaTranslationPagesSchema; ts: DetangleSidecar; ts: LsiSidecar; ToolRunRecordSchema; ViewerNavQaSchemanot measured

Nodes, cohesion, in and out are the detangler’s pinned measurements for the same directory (bun run cat kg:detangle; skill graph-detanglement). Not measured means the detangler does not scan that directory, not that it has no edges.

Sub-graphs

The same model, drawn by Mermaid

Kept so the page renders even where the PlantUML image is missing, and because Mermaid nodes carry the CSS class that colours them from uml.css.

classDiagram
  direction TB
  namespace cat_harness__qa {
    class cat_harness_qa_kg_qa_v1_Flag["Flag"] {
      <<json: KgQaReportSchema>>
      id [1] string
      category [0..1] enum(8)
      severity [1] critical | major | minor
      weight [1] blocking | suggestion | praise
      where [1] string
      evidence [0..1] string
      detail [0..1] string
      status [0..1] open | resolved | overridden
      resolution [0..1] object
    }
    class cat_harness_qa_kg_qa_v1_Finding["Finding"] {
      <<json: KgQaReportSchema>>
      id [1] string
      category [0..1] enum(8)
      severity [1] critical | major | minor
      weight [1] blocking | suggestion | praise
      where [1] string
      evidence [0..1] string
      detail [0..1] string
      status [0..1] open | resolved | overridden
      resolution [0..1] object
    }
    class cat_harness_qa_kg_qa_v1_Adversarial_review["Adversarial_review"] {
      <<json: KgQaReportSchema>>
      reviewer [1] object
      author_sessions [0..*] string[]
      skill_hash [1] string
      at [1] string
      coverage [1] object
      result [1] pass | fail | unknown
      flags [0..*] Flag[]
      findings [0..*] Finding[]
    }
    class cat_harness_qa_kg_qa_v1_kg_qa_v1["kg-qa/v1"] {
      <<json: KgQaReportSchema>>
      $schema [1] 'kg-qa/v1'
      subject [1] object
      source_hash [1] string | null
      criteria [1] map~object~
      totals [1] map~number~
      pair_attestations [0..1] any
      voice_reviews [0..1] any
      adversarial_reviews [0..*] Adversarial_review[]
    }
    class cat_harness_qa_kg_qa_manifest_v1_kg_qa_manifest_v1["kg-qa-manifest/v1"] {
      <<json: KgQaManifestSchema>>
      $schema [1] 'kg-qa-manifest/v1'
      auditor [1] object
    }
    class cat_harness_qa_block_qa_v1_block_qa_v1["block-qa/v1"] {
      <<json: BlockQaReport>>
      $schema [1] 'block-qa/v1'
      label [1] string
      kind [1] string
      paths [1] object
      source_hashes [1] object
      criteria [1] map~object[]~
      updated_at [1] string
    }
    class cat_harness_qa_folio_test_run_v1_Case["Case"] {
      <<json: TestRunSchema>>
      input [1] any
      output [1] any
    }
    class cat_harness_qa_folio_test_run_v1_folio_test_run_v1["folio-test-run/v1"] {
      <<json: TestRunSchema>>
      $schema [1] 'folio-test-run/v1'
      skill [1] string
      subject [1] string
      data [1] object
      process [1] object
      outcome [1] map~any~
      cases [0..*] Case[]
      requirements [0..*] string[]
      updated_at [1] string
      plan [0..1] object
      sut [0..1] object
    }
    class cat_harness_qa_qa_witness_v1["qa-witness/v1"] {
      <<ts: QaWitness>>
      kind [1] 'script' | 'agent' | 'human'
      id [1] string
      version [0..1] string
      at [0..1] string
      sha [0..1] string
      scriptHash [0..1] string
      scriptCommitSha [0..1] string
      depsHash [0..1] string
      model [0..1] string
      session [0..1] string
      skill [0..1] string
      method [0..1] string
      freshness [1] QaFreshness
      changed [0..1] string[]
      notCompared [0..1] string[]
      notes [0..1] string
    }
    class cat_harness_qa_qa_results_v1["qa-results/v1"] {
      <<ts: QaResult>>
      $schema [1] 'qa-results/v1'
      producer [1]  /** Repo-relative path to the script. */ script: string; /** 12-char SHA-256 prefix of that script's source, as `script-qa` writes. */ script_hash: string; 
      subject [1]  kind: string; id: string 
      families [1] Record~string, QaResultFamily~
      total [1] number
    }
    class cat_harness_qa_qa_script_v1_qa_script_v1["qa-script/v1"] {
      <<json: QaScriptKind>>
      $schema [1] 'qa-script/v1'
      criterion_id [1] string
      source_file [1] string
      script_hash [1] string
      script_commit_sha [1] string
      extra_inputs [0..*] string[]
      deps_hash [0..1] string
      last_run_at [1] string
      last_run_sha [1] string
      engine_version [0..1] string
    }
    class cat_harness_qa_translation_qa_v1["translation-qa/v1"] {
      <<ts: TranslationBlockQaReport>>
      $schema [1] 'translation-qa/v1'
      label [1] string
      block [0..1] string
      locale [1] string
      paths [1]  md: string; ts?: string 
      po [1] string
      source_hashes [1] TranslationFieldHash
      criteria [1] Record~string, TranslationQaEntry[]~
      updated_at [1] string
    }
    class cat_harness_qa_folio_qa_index_v1_folio_qa_index_v1["folio-qa-index/v1"] {
      <<json: QaIndexSchema>>
      $schema [1] 'folio-qa-index/v1'
      page [1] string
      corpus [0..1] present | absent
      badges [1] map~object~
      unswept [0..*] string[]
    }
    class cat_harness_qa_folio_qa_translation_pages_v1_folio_qa_translation_pages_v1["folio-qa-translation-pages/v1"] {
      <<json: QaTranslationPagesSchema>>
      $schema [1] 'folio-qa-translation-pages/v1'
      corpus [1] present | absent
      pages [0..*] string[]
    }
    class cat_harness_qa_folio_detangle_sidecar_v1["folio-detangle-sidecar/v1"] {
      <<ts: DetangleSidecar>>
      $schema [1] 'folio-detangle-sidecar/v1'
      group [1] string
      size [1] number
      internal [1] number
      inbound [1] number
      outbound [1] number
      cohesion [1] number
      enforcedBoundary [1] number
      recordedBoundary [1] number
      proseMentions [1] number
      wrongDirection [1] number
      undeterminedDirection [1] number
    }
    class cat_harness_qa_folio_lsi_index_v1["folio-lsi-index/v1"] {
      <<ts: LsiSidecar>>
      $schema [1] 'folio-lsi-index/v1'
      method [1] string
      instance [1] string
      graph [1] string
      path [1] string
      docs [1] string[] | null
      fingerprint [1] string
      options [1] LsiOptions
      units [1] number
      terms [1] number
      k [1] number
      retained [1] number
      dimensions [1] Array~ dim: number; sigma: number; positive: string[]; negative: string[] ~
      findings [1]  nearDuplicates: Array~ a: string; b: string; cosine: number ~; narrowDimensions: Array~ dim: number; units: string[] ~; 
      neighbours [1] Record~string, Array~[string, number]~~
    }
    class cat_harness_qa_folio_tool_run_v1_folio_tool_run_v1["folio-tool-run/v1"] {
      <<json: ToolRunRecordSchema>>
      $schema [1] 'folio-tool-run/v1'
      tool [1] string
      target [1] string
      outcome [1] succeeded | failed
      inputFingerprint [1] string
      detail [0..1] string
    }
    class cat_harness_qa_viewer_nav_qa_v1_Page["Page"] {
      <<json: ViewerNavQaSchema>>
      path [1] string
      source [1] string
      verdict [1] railed | declined | linked | missing
      reason [0..1] string
      flags [0..*] enum(8)[]
    }
    class cat_harness_qa_viewer_nav_qa_v1_viewer_nav_qa_v1["viewer-nav-qa/v1"] {
      <<json: ViewerNavQaSchema>>
      $schema [1] 'viewer-nav-qa/v1'
      root [1] string
      totals [1] object
      pages [0..*] Page[]
    }
  }
  cat_harness_qa_kg_qa_v1_Adversarial_review *-- "0..*" cat_harness_qa_kg_qa_v1_Flag : flags
  cat_harness_qa_kg_qa_v1_Adversarial_review *-- "0..*" cat_harness_qa_kg_qa_v1_Finding : findings
  cat_harness_qa_kg_qa_v1_kg_qa_v1 *-- "0..*" cat_harness_qa_kg_qa_v1_Adversarial_review : adversarial_reviews
  cat_harness_qa_folio_test_run_v1_folio_test_run_v1 *-- "0..*" cat_harness_qa_folio_test_run_v1_Case : cases
  cat_harness_qa_viewer_nav_qa_v1_viewer_nav_qa_v1 *-- "0..*" cat_harness_qa_viewer_nav_qa_v1_Page : pages
  cssClass "cat_harness_qa_kg_qa_v1_Flag" fa_uml_kind_qa
  cssClass "cat_harness_qa_kg_qa_v1_Finding" fa_uml_kind_qa
  cssClass "cat_harness_qa_kg_qa_v1_Adversarial_review" fa_uml_kind_qa
  cssClass "cat_harness_qa_kg_qa_v1_kg_qa_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_kg_qa_manifest_v1_kg_qa_manifest_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_block_qa_v1_block_qa_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_test_run_v1_Case" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_test_run_v1_folio_test_run_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_qa_witness_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_qa_results_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_qa_script_v1_qa_script_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_translation_qa_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_qa_index_v1_folio_qa_index_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_qa_translation_pages_v1_folio_qa_translation_pages_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_detangle_sidecar_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_lsi_index_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_folio_tool_run_v1_folio_tool_run_v1" fa_uml_kind_qa
  cssClass "cat_harness_qa_viewer_nav_qa_v1_Page" fa_uml_kind_qa
  cssClass "cat_harness_qa_viewer_nav_qa_v1_viewer_nav_qa_v1" fa_uml_kind_qa

folio-assistant — code under the Apache License 2.0, documentation under CC BY 3.0. Generated schema and API references are rebuilt from source on every push to main.

deployed dev