← Files SSOT CheckARCHIVED FILE

.ssot.example.yaml

3.17 KB · Oct 2, 2026 · 00:33 UTC

↓ Download file

# .ssot.example.yaml — annotated manifest template.
# Copy to .ssot.yaml at your repo root and edit. Each fact has ONE canonical
# location; everything else is a copy. Patterns are regexes with EXACTLY ONE
# capture group around the value. Paths use forward slashes on every platform.
# Put regexes in single quotes so backslashes survive.

# Globs excluded from globbed-copy expansion and from `discover` scans.
ignore_paths:
  - "**/CHANGELOG.md"
  - "vendor/**"

facts:
  # A plain count. type: integer normalizes thousands separators and a trailing
  # '+', so "1,234" == "1234" == "1234+".
  - name: user-count
    type: integer
    note: >
      Total active users. Canonical is the metrics README. Counting convention:
      excludes trial accounts.
    canonical:
      file: docs/metrics.md
      pattern: 'Active users:\s*([\d,]+)'
    copies:
      - file: marketing/landing.html
        pattern: 'data-stat="users">([\d,]+)\+?<'
      - file: README.md
        pattern: '([\d,]+) users trust'

  # A price. type: currency strips the symbol and separators; it does NOT expand
  # magnitude suffixes — keep "$5k" as type: string if you use that style.
  - name: pro-price
    type: currency
    canonical:
      file: docs/pricing.md
      pattern: 'Pro plan:\s*\$([\d,]+)'
    copies:
      - file: marketing/landing.html
        pattern: '\$([\d,]+)\s?/\s?month'

  # A release version. type: semver ignores a leading "v".
  - name: release-version
    type: semver
    canonical:
      file: docs/release.md
      pattern: 'Current release:\s*v?([\d.]+)'
    copies:
      - file: README.md
        pattern: 'version\s+v?([\d.]+)'

  # A monotonic count with a rounded marketing copy. `rounding: floor-1000`
  # floors the canonical to the nearest 1000 before an EXACT compare (not fuzzy).
  # `monotonic: true` flags "canonical suspect" when a copy is higher.
  - name: total-downloads
    type: integer
    monotonic: true
    freshness:
      owner: growth-team
      max_age_days: 30
    canonical:
      file: docs/metrics.md
      pattern: 'Total downloads:\s*([\d,]+)'
    copies:
      - file: README.md
        pattern: '([\d,]+)\+ downloads'
        rounding: floor-1000
        note: auto-written by scripts/metrics.py, floored to the nearest 1,000.

  # A cross-repo copy (path escapes the repo root). By default the sibling's
  # working tree is read and nothing in that repo is touched. With `check
  # --fetch`, ssot-check runs `git fetch` there and compares against the
  # remote-tracking ref: that updates the sibling's remote-tracking refs and
  # FETCH_HEAD, but never pulls or modifies its working tree.
  - name: seat-price
    type: currency
    canonical:
      file: docs/pricing.md
      pattern: 'Per seat:\s*\$([\d,]+)'
    copies:
      - file: ../marketing-site/pricing.html
        pattern: 'data-price-seat="\$?([\d,]+)"'

  # A globbed copy path: every matching local file is checked with this pattern.
  - name: support-email
    type: string
    canonical:
      file: docs/support.md
      pattern: 'Contact:\s*(\S+@\S+)'
    copies:
      - file: 'docs/guides/*.md'
        pattern: 'email us at (\S+@\S+)'

SHA-256: 2323ee378a77ecf9cdd7689ccf2c04a518d23490e9a7c39e611eb97744b00429