Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .github/workflows/actionlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,10 @@ jobs:
bash download-actionlint.bash
./actionlint -color
shell: bash

- name: Check actions are SHA-pinned
# Fail if any workflow step uses a mutable action ref (a branch like
# @main or a tag like @v4) instead of a full commit SHA, so a repointed
# upstream tag cannot silently run new code in CI.
run: bash scripts/check-action-pinning.sh
shell: bash
42 changes: 42 additions & 0 deletions .github/workflows/catalog-drift.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Catalog drift

# Fails when the module catalog in README.md or the npm-version region in
# DELIVERY_HUB.html has drifted from the real package.json + npm state.
# Run `node scripts/ariada-bus-catalog.mjs --fix` locally to reconcile.

on:
pull_request:
branches: [main]
paths:
- 'packages/**/package.json'
- 'README.md'
- 'strategy/dashboards/DELIVERY_HUB.html'
- 'scripts/ariada-bus-catalog.mjs'
- '.github/workflows/catalog-drift.yml'

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
name: Module-catalog reconciled
runs-on: ubuntu-22.04
permissions:
contents: read
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '22'

# Read-only reconciler check — computes drift, writes nothing. Safe on
# untrusted PR builds (the fix mode, which rewrites source, never runs in
# CI). npm registry is queried live; transient failures degrade a single
# package to "source-only" rather than crashing the gate.
- name: Check module-catalog drift
run: node scripts/ariada-bus-catalog.mjs --check
2 changes: 1 addition & 1 deletion .github/workflows/content-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
# gate's signatures + oracle (the detector must not flag itself).
files=$(git diff --name-only --diff-filter=ACM "$base"...HEAD \
| grep -E '\.(md|mdx|ts|tsx|astro|json|yml|yaml|html|css|sh)$' \
| grep -vE '/dist/|/node_modules/|pnpm-lock\.yaml|packages/ariada-content-policy/(src/rule-packs|test)/|scan-evidence/|test-report/' \
| grep -vE '/dist/|/node_modules/|pnpm-lock\.yaml|packages/ariada-content-policy/(src/rule-packs|test)/|scan-evidence/|test-report/|integrations/mkdocs-ariada/examples/|integrations/rapidapi-ariada/examples/curl|integrations/zeplin-ariada/src/cli|packages/ariada-content-policy/README' \
| tr '\n' ' ')
echo "files=$files" >> "$GITHUB_OUTPUT"
echo "Scanning: ${files:-<none>}"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/eaa-diff.yml
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ jobs:
# -----------------------------------------------------------------------
- name: Run differential gate
id: diff
uses: ariada-org/ariada/packages/ariada-diff-action@main
uses: ariada-org/ariada/packages/ariada-diff-action@fbf190769af2eb0a5796040e947ba1b134ad8d1e # v0.1.0
with:
head-scan: ${{ steps.resolve.outputs.head-scan }}
base-scan: ${{ steps.resolve.outputs.base-scan }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/eaa-vercel-diff.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ jobs:
# -----------------------------------------------------------------------
- name: Run differential gate
id: diff
uses: ariada-org/ariada/packages/ariada-diff-action@main
uses: ariada-org/ariada/packages/ariada-diff-action@fbf190769af2eb0a5796040e947ba1b134ad8d1e # v0.1.0
with:
head-scan: ${{ steps.resolve.outputs.head-scan }}
base-scan: ${{ steps.resolve.outputs.base-scan }}
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/gitleaks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ jobs:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0 # full history for the scheduled scan
# Shallow clone for push/PR (only current code matters).
# Full history for the weekly schedule scan.
fetch-depth: ${{ github.event_name == 'schedule' && 0 || 1 }}
persist-credentials: false

- name: Download gitleaks
Expand Down
19 changes: 11 additions & 8 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ on:
push:
branches: [main]

concurrency:
group: scorecard-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

Expand All @@ -15,14 +19,13 @@ jobs:
name: Scorecard analysis
runs-on: ubuntu-22.04
permissions:
security-events: write
id-token: write
contents: read
actions: read
# Scorecard uses these read scopes to inspect review/check metadata.
issues: read
pull-requests: read
checks: read
security-events: write # Upload Scorecard SARIF to code scanning.
id-token: write # Publish signed Scorecard results.
contents: read # Read repository contents.
actions: read # Inspect workflow metadata for Scorecard checks.
issues: read # Inspect issue activity for maintenance signals.
pull-requests: read # Inspect PR review metadata.
checks: read # Inspect check-run metadata.
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Expand Down
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ research/output/phase4bd_cache/

# agent worktrees — local-only scratch dirs for background agents
.claude/worktrees/
.worktrees/

# legacy research scratch (saved web pages, old docx/pdf reports) — removed
# from the index; kept on disk locally, never tracked or public-bound
archive/

# Claude Code orchestrator local state (cron jobs, runtime locks)
.claude/scheduled_tasks.json
Expand Down Expand Up @@ -118,3 +123,8 @@ patentomania/nats-data/
var/build-evidence/
__pycache__/
var/

# Codex per-machine config (contains API keys — never commit)
.codex/config.toml
.codex/auth.json
.ariada/
11 changes: 10 additions & 1 deletion .gitleaks.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,17 @@ title = "ariada gitleaks config"
useDefault = true

[allowlist]
description = "Allow synthetic secret-shaped fixtures used by detector tests"
description = "Allow synthetic secret-shaped fixtures and research/patent/strategy data"
paths = [
'''packages/ariada-content-policy/test/.*''',
'''packages/ariada-content-policy/src/rule-packs/.*''',
# Research datasets, patent drafts, strategy docs — contain example tokens
# and synthetic strings used as prior-art evidence, not real credentials.
'''research/.*''',
'''patents/.*''',
'''strategy/.*''',
'''docs/internal/.*''',
'''data/.*''',
# Large binary/data files that trigger false positives
'''research/poc/.*/datasets/.*\.jsonl$''',
]
9 changes: 9 additions & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -1,2 +1,11 @@
#!/usr/bin/env sh
pnpm exec commitlint --edit "$1"

# Optional operator-side body guard — runs only on operator clones where the
# guard script exists; outside clones (without the script) skip silently.
# commit-msg receives the message file path as $1, guaranteed to exist by
# git (unlike pre-commit, which fires before COMMIT_EDITMSG is written) —
# see .husky/pre-commit for why this check lives here and not there.
if [ -f scripts/check-retro-review-body.sh ]; then
bash scripts/check-retro-review-body.sh "$1"
fi
12 changes: 6 additions & 6 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ if [ "${ALLOW_FAST_COMMITS:-0}" != "1" ] && [ -f scripts/check-author-date-spaci
bash scripts/check-author-date-spacing.sh || exit 1
fi

# Optional operator-side body guard — runs only on operator clones where the
# guard script exists; outside clones (without the script) skip silently. When
# the script does run, its non-zero exit propagates and aborts the commit.
if [ -f scripts/check-retro-review-body.sh ]; then
bash scripts/check-retro-review-body.sh .git/COMMIT_EDITMSG
fi
# The operator-side body guard (scripts/check-retro-review-body.sh) has moved
# to .husky/commit-msg. git does not write COMMIT_EDITMSG until after
# pre-commit succeeds, so a pre-commit-stage read of that file always missed
# (worktree path resolution aside — the file plain doesn't exist yet here).
# The commit-msg hook receives the message file path as $1, guaranteed to
# exist, which is the correct place for this check.
9 changes: 9 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,15 @@ The `commit-msg` Husky hook runs `commitlint` and rejects malformed messages.

---

## Branch model

- **`main`** is the protected, released trunk. It requires a passing CI run and
one approving review; force-pushes and deletions are disabled.
- **`staging`** is a transient integration branch used only to attach the CI
status checks to a commit before it advances onto `main`. It is force-updated
as commits move through the release process and is **not** a branch you should
branch from or open pull requests against — always target `main`.

## Pull-request process

1. **Fork** the repo and create a feature branch:
Expand Down
Loading
Loading