Skip to content

Commit 0cd8a61

Browse files
committed
feat: v0.9 preview gates, package naming, and final audit cleanup
1 parent aa0542b commit 0cd8a61

85 files changed

Lines changed: 2175 additions & 579 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockerignore

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
.git/
2+
.github/
3+
4+
# Local-only/private operator material
5+
.env
6+
.claude/
7+
CLAUDE.md
8+
AGENTS.md
9+
archive/
10+
docs/plans/
11+
docs/tasks/
12+
13+
# Local development caches and virtualenvs
14+
.venv/
15+
__pycache__/
16+
*.py[cod]
17+
.pytest_cache/
18+
.coverage
19+
.coverage.*
20+
htmlcov/
21+
coverage.xml
22+
.mypy_cache/
23+
.ruff_cache/
24+
25+
# Build/package outputs
26+
build/
27+
dist/
28+
*.egg-info/
29+
30+
# Local databases and model/benchmark artifacts
31+
*.db
32+
*.db-journal
33+
*.db-wal
34+
*.db-shm
35+
models/
36+
*.gguf
37+
**/*.gguf
38+
docker/model.gguf
39+
artifacts/bench-results/
40+
41+
# Editor/OS noise
42+
.idea/
43+
*.swp
44+
*.swo
45+
.DS_Store

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!--
2-
This template encodes the milestone rules from CLAUDE.md. Do not delete
3-
sections — leave the unchecked checkboxes as a record of what does not
2+
This template encodes the project milestone rules from CONTRIBUTING.md. Do not
3+
delete sections — leave the unchecked checkboxes as a record of what does not
44
apply, and explain why in a brief note.
55
-->
66

.github/workflows/ci.yml

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ on:
99
# Each gate runs in its own job so failures land on distinct rows in the PR
1010
# checks list — much easier to read than one giant `make check` log.
1111
#
12-
# `release.yml` (task 029) and `fuzz-nightly.yml` (task 027) are intentionally
13-
# unchanged by this workflow.
12+
# `release.yml` (tag-driven publish) and `fuzz-nightly.yml` (scheduled IPC
13+
# fuzzer) are intentionally unchanged by this workflow.
1414

1515
jobs:
1616
lint:
1717
runs-on: ubuntu-latest
1818
strategy:
1919
fail-fast: false
2020
matrix:
21-
python-version: ["3.12"]
21+
python-version: ["3.12", "3.13"]
2222
steps:
2323
- uses: actions/checkout@v4
2424
- name: Install uv
@@ -37,7 +37,7 @@ jobs:
3737
strategy:
3838
fail-fast: false
3939
matrix:
40-
python-version: ["3.12"]
40+
python-version: ["3.12", "3.13"]
4141
steps:
4242
- uses: actions/checkout@v4
4343
- name: Install uv
@@ -56,7 +56,7 @@ jobs:
5656
strategy:
5757
fail-fast: false
5858
matrix:
59-
python-version: ["3.12"]
59+
python-version: ["3.12", "3.13"]
6060
steps:
6161
- uses: actions/checkout@v4
6262
- name: Install uv
@@ -75,7 +75,7 @@ jobs:
7575
strategy:
7676
fail-fast: false
7777
matrix:
78-
python-version: ["3.12"]
78+
python-version: ["3.12", "3.13"]
7979
steps:
8080
- uses: actions/checkout@v4
8181
- name: Install uv
@@ -94,7 +94,7 @@ jobs:
9494
strategy:
9595
fail-fast: false
9696
matrix:
97-
python-version: ["3.12"]
97+
python-version: ["3.12", "3.13"]
9898
steps:
9999
- uses: actions/checkout@v4
100100
- name: Install uv
@@ -110,14 +110,12 @@ jobs:
110110

111111
fitness:
112112
runs-on: ubuntu-latest
113-
# Fitness functions are advisory while the full suite is being filled in
114-
# (task 021 et al.). Surface failures in the PR check list, but don't
115-
# block a merge on them yet.
116-
continue-on-error: true
113+
# Pytest fitness job — the suite is fully filled in for v1.0; runs as a
114+
# blocking gate alongside `make-fitness` below.
117115
strategy:
118116
fail-fast: false
119117
matrix:
120-
python-version: ["3.12"]
118+
python-version: ["3.12", "3.13"]
121119
steps:
122120
- uses: actions/checkout@v4
123121
- name: Install uv
@@ -135,12 +133,11 @@ jobs:
135133
runs-on: ubuntu-latest
136134
# Runs scripts/fitness.sh — the canonical fitness entry point per
137135
# docs/spec/fitness-functions.md, complementary to the pytest fitness job
138-
# above (the two cover different invariants). Blocking per task 043
139-
# (honeypot P95 latency regression resolved via budget update).
136+
# above (the two cover different invariants). Blocking gate.
140137
strategy:
141138
fail-fast: false
142139
matrix:
143-
python-version: ["3.12"]
140+
python-version: ["3.12", "3.13"]
144141
steps:
145142
- uses: actions/checkout@v4
146143
- name: Install uv

.github/workflows/release.yml

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ jobs:
7575
- name: Publish to PyPI (OIDC trusted publishing)
7676
uses: pypa/gh-action-pypi-publish@release/v1
7777

78-
# Smoke test: pull the published image and run the e2e demo
78+
# Smoke test: pull the published daemon image and verify health
7979
smoke-test:
8080
needs: build-image
8181
runs-on: ubuntu-latest
@@ -99,10 +99,25 @@ jobs:
9999
run: docker pull ghcr.io/${{ github.repository_owner }}/armor:${{ steps.meta.outputs.version }}
100100

101101
- name: Test image help command
102-
run: docker run --rm ghcr.io/${{ github.repository_owner }}/armor:${{ steps.meta.outputs.version }} --help
102+
run: docker run --rm --entrypoint armor ghcr.io/${{ github.repository_owner }}/armor:${{ steps.meta.outputs.version }} --help
103103

104-
- name: Run e2e demo inside container
105-
run: docker run --rm ghcr.io/${{ github.repository_owner }}/armor:${{ steps.meta.outputs.version }} armor health
104+
- name: Start published daemon image
105+
run: docker run -d --name armor-smoke ghcr.io/${{ github.repository_owner }}/armor:${{ steps.meta.outputs.version }}
106+
107+
- name: Smoke test daemon health inside container
108+
run: |
109+
for i in {1..30}; do
110+
if docker exec armor-smoke armor health; then
111+
exit 0
112+
fi
113+
sleep 2
114+
done
115+
docker logs armor-smoke
116+
exit 1
117+
118+
- name: Clean up smoke container
119+
if: always()
120+
run: docker rm -f armor-smoke || true
106121

107122
# Create GitHub Release with auto-generated notes
108123
create-release:
@@ -135,5 +150,5 @@ jobs:
135150
generateReleaseNotes: true
136151
body: |
137152
Multi-arch image: ghcr.io/${{ github.repository_owner }}/armor:${{ steps.meta.outputs.version }}
138-
PyPI: pip install ai-armor==${{ steps.meta.outputs.version }}
153+
PyPI: pip install armor-ai==${{ steps.meta.outputs.version }}
139154
See post-release checklist: docs/release/post-release-checklist.md

.gitignore

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,26 @@
33
archive/
44

55
# Operator-private build process — task files, test specs, sprint plans, and
6-
# roadmap drafts. The build-process *workflow* (TDD spec-first, atomic commits,
7-
# task lifecycle) is documented publicly in CONTRIBUTING.md and CLAUDE.md, but
8-
# specific task/test-spec contents may include sensitive data, attack-corpus
9-
# instructions, or vendor-specific details that should not ship in the public
10-
# repo. Kept locally so the workflow keeps working on the operator's machine.
6+
# roadmap drafts. The build-process workflow is documented publicly in
7+
# CONTRIBUTING.md, but specific task/test-spec contents may include sensitive
8+
# data, attack-corpus instructions, or vendor-specific details that should not
9+
# ship in the public repo. Kept locally so the workflow keeps working on the
10+
# operator's machine.
1111
docs/plans/
1212
docs/tasks/
1313

14+
# Local agent harnesses — keep public integration examples under examples/.
15+
.claude/
16+
CLAUDE.md
17+
AGENTS.md
18+
1419
# Secrets
1520
.env
1621

1722
# Python virtual environment (lives in the Docker volume — not part of the repo)
1823
.venv/
1924

20-
# Python bytecode — also emitted by .claude/scripts/ hooks
25+
# Python bytecode
2126
__pycache__/
2227
*.pyc
2328
*.pyo
@@ -57,10 +62,6 @@ models/
5762
# are documented in docs/architecture/decisions/018-validator-model-choice.md.
5863
artifacts/bench-results/
5964

60-
# Claude Code local state — not part of the reproducible environment
61-
.claude/settings.local.json
62-
.claude/.last-checkpoint
63-
6465
# Design discussion artifacts — local reference, not part of public release
6566
discussion.md
6667
discussion-*.md

0 commit comments

Comments
 (0)