[examples] add June 5–16 2026 incidents — monthly sweep (635 → 639) #49
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: structure-validate | |
| on: | |
| pull_request: | |
| paths: | |
| - "examples/**" | |
| - "techniques/**" | |
| - "tactics/**" | |
| - "actors/**" | |
| - "mitigations/**" | |
| - "software/**" | |
| - "data-sources/**" | |
| - "TAXONOMY-GAPS.md" | |
| - "citations.bib" | |
| - "tools/check_linkage.py" | |
| - "tools/check_backlinks.py" | |
| - ".github/workflows/structure-validate.yml" | |
| push: | |
| branches: [main] | |
| paths: | |
| - "examples/**" | |
| - "techniques/**" | |
| - "tactics/**" | |
| - "actors/**" | |
| - "mitigations/**" | |
| - "software/**" | |
| - "data-sources/**" | |
| - "TAXONOMY-GAPS.md" | |
| permissions: | |
| contents: read | |
| jobs: | |
| forward-linkage: | |
| name: Forward references and example structure | |
| runs-on: ubuntu-latest | |
| # Strict: every example must have Loss / OAK Techniques observed / | |
| # Attribution (with strength label) / Summary / Public references; every | |
| # OAK-T*, OAK-G*, OAK-M*, OAK-S*, OAK-DS-* mention must resolve to the | |
| # taxonomy or to a TAXONOMY-GAPS candidate. | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Run check_linkage.py | |
| run: python3 tools/check_linkage.py | |
| backlinks: | |
| name: Reverse anchors and bidirectional consistency | |
| runs-on: ubuntu-latest | |
| # Strict: actor `## Observed Examples` and technique `## Real-world examples` | |
| # must list every example that attributes / references them via canonical | |
| # markdown link or `**OAK-Gnn:**` header. Mitigation `**Maps to Techniques:**` | |
| # and software `**Used by Groups:**` metadata must resolve. | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Run check_backlinks.py | |
| run: python3 tools/check_backlinks.py | |
| coverage-matrix: | |
| name: Coverage matrix snapshot | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Generate coverage matrix | |
| run: python3 tools/build_coverage_matrix.py > /tmp/coverage-snapshot.md | |
| - name: Upload coverage snapshot | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: coverage-matrix-snapshot | |
| path: /tmp/coverage-snapshot.md | |
| retention-days: 30 |