Skip to content
Closed
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 65 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,19 @@ env:
MISE_LOCKED: "1"

on:
push:
branches: [main]
pull_request:
workflow_dispatch:
inputs:
run_postgres:
description: Run the PostgreSQL integration job
type: boolean
default: true
run_clickhouse:
description: Run the ClickHouse integration job
type: boolean
default: true

permissions:
contents: read
Expand Down Expand Up @@ -59,7 +71,7 @@ jobs:
name: PostgreSQL integration
runs-on: ubuntu-24.04
timeout-minutes: 30
if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_postgres }}
if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_postgres }}

services:
postgres:
Expand Down Expand Up @@ -109,6 +121,58 @@ jobs:
--config examples/postgres_dbt/policystrata_real_db_clean.yaml
--out runs/scan-real-db-clean

clickhouse-integration:
name: ClickHouse integration
runs-on: ubuntu-24.04
timeout-minutes: 30
if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_clickhouse }}

services:
clickhouse:
image: clickhouse/clickhouse-server:25.6
env:
CLICKHOUSE_DB: policystrata
CLICKHOUSE_USER: policystrata
CLICKHOUSE_PASSWORD: policystrata
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1"
ports:
- 8123:8123
options: >-
--health-cmd "wget -qO- http://localhost:8123/ping | grep -q Ok"
--health-interval 3s
--health-timeout 3s
--health-retries 20

steps:
- name: Check out repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
persist-credentials: false

- name: Set up mise
uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db
with:
version: 2026.7.1
install: true
cache: true

- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39
with:
enable-cache: true
cache-suffix: clickhouse-py-3.12

- name: Install dependencies
run: mise x python@3.12.13 -- uv sync --extra dev

- name: Run ClickHouse integration tests
env:
POLICYSTRATA_RUN_CLICKHOUSE_TESTS: "1"
run: mise x python@3.12.13 -- uv run pytest tests/test_clickhouse_integration.py

- name: Run ClickHouse row-policy evidence script
run: mise x python@3.12.13 -- uv run python scripts/clickhouse-rls-evidence.py

github-action:
name: GitHub Action smoke test
runs-on: ubuntu-24.04
Expand Down
35 changes: 35 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,41 @@

## [Unreleased]

## [1.1.1] - 2026-07-22

- Publish the review-response hardening work from the immutable `v1.1.0`
source line after integrating the current protected `main` branch.
- Keep the Node runtime and Agent Trust Gateway packages unchanged; this is a
Python-package release.

## [1.1.0] - 2026-07-21

Responds to the external review of the artifact. PyPI package only; the npm
runtime and gateway packages are unchanged this cycle.

- Lead the README and evidence snapshot with the defense-in-depth gap (a layered
conventional stack misses 159/1720 that responsibility contracts localize);
frame 1720/1720 as a construction-consistency check.
- Run CI on push and pull requests (was `workflow_dispatch` only); score the
PostgreSQL integration job by default and add a ClickHouse integration job.
- Fix the scanner's custom-domain tenant-column fallback: a `domain_path` domain
with no tenancy config no longer inherits the built-in `accounts.tenant_id`
column and is no longer flagged as tenant-scope-missing. Add per-table
`table_tenant_columns` config.
- Add a real ClickHouse row-policy adapter (`database_clickhouse.py`), DDL
fixture, env-gated integration tests, and evidence script.
- Add counterfactual-repair attribution validation, higher-order compound
mutants, witness-minimization metrics, a soundness invariant with per-class
completeness, scalability curves with a covering-array generator, difficulty
tiers, and adversarial clean controls at scale.
- Add deployable comparator baselines (`conventional_test_suite`,
`property_differential`) and a baseline false-positive evaluator.
- Add a reconstructed real-fault suite (19 cited public faults), a spec-blind
mutant suite, brownfield scan configs for four open-source stacks, adapter
trusted-computing-base mutation testing, a build-only LLM reachability harness,
and a self-contained write-action fault model.
- New CLI subcommands: `compound`, `counterfactual`, `minimization-report`.

## [1.0.5] - 2026-07-08

- Add generic `policystrata-json` evidence export, runtime event builder helpers for common Node
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,12 @@ Reproduce the paper-facing artifact run:
POLICYSTRATA_RUN_ROOT=/tmp/policystrata-final ./scripts/reproduce-final.sh
```

The paper reports deterministic artifact-suite coverage: 1720/1720 non-clean injected cases and
0 false positives on 80 clean controls. This is not a production-recall claim and not an
The paper's central evidence is the defense-in-depth gap: a layered stack of conventional
controls (validator, SQL snapshot, database/RLS, final-answer checks) misses 159 of 1720
injected cross-layer faults that PolicyStrata's responsibility-scoped contracts catch and
attribute to the first violating surface. The deterministic artifact-suite coverage figures
(1720/1720 non-clean injected cases, 0 false positives on 80 clean controls) are a consistency
check over PolicyStrata's own operator taxonomy, not a production-recall claim, and not an
authorization boundary.

## Quick Start
Expand Down Expand Up @@ -327,7 +331,7 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: raintree-technology/policystrata@v1.0.5
- uses: raintree-technology/policystrata@v1.1.1
with:
config: policystrata.yaml
out: runs/policystrata
Expand Down
Loading
Loading