flightdeck-ai 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. flightdeck_ai-1.0.1/.cursorrules +7 -0
  2. flightdeck_ai-1.0.1/.gitattributes +2 -0
  3. flightdeck_ai-1.0.1/.github/CODEOWNERS +2 -0
  4. flightdeck_ai-1.0.1/.github/ISSUE_TEMPLATE/bug_report.yml +29 -0
  5. flightdeck_ai-1.0.1/.github/ISSUE_TEMPLATE/feature_request.yml +34 -0
  6. flightdeck_ai-1.0.1/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  7. flightdeck_ai-1.0.1/.github/workflows/ci.yml +81 -0
  8. flightdeck_ai-1.0.1/.github/workflows/release-pypi.yml +89 -0
  9. flightdeck_ai-1.0.1/.gitignore +31 -0
  10. flightdeck_ai-1.0.1/.pre-commit-config.yaml +17 -0
  11. flightdeck_ai-1.0.1/.python-version +1 -0
  12. flightdeck_ai-1.0.1/AGENTS.md +104 -0
  13. flightdeck_ai-1.0.1/CHANGELOG.md +215 -0
  14. flightdeck_ai-1.0.1/CLAUDE.md +38 -0
  15. flightdeck_ai-1.0.1/CONTRIBUTING.md +77 -0
  16. flightdeck_ai-1.0.1/DEVELOPMENT.md +134 -0
  17. flightdeck_ai-1.0.1/LICENSE +202 -0
  18. flightdeck_ai-1.0.1/NOTICE +14 -0
  19. flightdeck_ai-1.0.1/PKG-INFO +189 -0
  20. flightdeck_ai-1.0.1/README.md +142 -0
  21. flightdeck_ai-1.0.1/RELEASE_NOTES.md +58 -0
  22. flightdeck_ai-1.0.1/ROADMAP.md +29 -0
  23. flightdeck_ai-1.0.1/SECURITY.md +35 -0
  24. flightdeck_ai-1.0.1/VERSIONING.md +38 -0
  25. flightdeck_ai-1.0.1/examples/quickstart/README.md +16 -0
  26. flightdeck_ai-1.0.1/examples/quickstart/baseline-events.jsonl +1 -0
  27. flightdeck_ai-1.0.1/examples/quickstart/baseline-release/prompts/system.md +1 -0
  28. flightdeck_ai-1.0.1/examples/quickstart/baseline-release/release.yaml +22 -0
  29. flightdeck_ai-1.0.1/examples/quickstart/candidate-events.jsonl +1 -0
  30. flightdeck_ai-1.0.1/examples/quickstart/candidate-release/prompts/system.md +1 -0
  31. flightdeck_ai-1.0.1/examples/quickstart/candidate-release/release.yaml +22 -0
  32. flightdeck_ai-1.0.1/examples/quickstart/policy.yaml +8 -0
  33. flightdeck_ai-1.0.1/examples/quickstart/pricing-baseline.yaml +6 -0
  34. flightdeck_ai-1.0.1/examples/quickstart/pricing-candidate.yaml +6 -0
  35. flightdeck_ai-1.0.1/pyproject.toml +77 -0
  36. flightdeck_ai-1.0.1/schemas/v1/policy.schema.json +96 -0
  37. flightdeck_ai-1.0.1/schemas/v1/pricing_table.schema.json +66 -0
  38. flightdeck_ai-1.0.1/schemas/v1/release.schema.json +396 -0
  39. flightdeck_ai-1.0.1/schemas/v1/run_event.schema.json +249 -0
  40. flightdeck_ai-1.0.1/scripts/generate_schemas.py +23 -0
  41. flightdeck_ai-1.0.1/scripts/quickstart_smoke.py +89 -0
  42. flightdeck_ai-1.0.1/scripts/smoke.sh +34 -0
  43. flightdeck_ai-1.0.1/src/flightdeck/__init__.py +3 -0
  44. flightdeck_ai-1.0.1/src/flightdeck/bundle.py +68 -0
  45. flightdeck_ai-1.0.1/src/flightdeck/cli/__init__.py +0 -0
  46. flightdeck_ai-1.0.1/src/flightdeck/cli/main.py +727 -0
  47. flightdeck_ai-1.0.1/src/flightdeck/config.py +40 -0
  48. flightdeck_ai-1.0.1/src/flightdeck/doctor.py +59 -0
  49. flightdeck_ai-1.0.1/src/flightdeck/ledger.py +310 -0
  50. flightdeck_ai-1.0.1/src/flightdeck/models.py +235 -0
  51. flightdeck_ai-1.0.1/src/flightdeck/sdk/__init__.py +1 -0
  52. flightdeck_ai-1.0.1/src/flightdeck/sdk/client.py +25 -0
  53. flightdeck_ai-1.0.1/src/flightdeck/server/__init__.py +1 -0
  54. flightdeck_ai-1.0.1/src/flightdeck/server/app.py +46 -0
  55. flightdeck_ai-1.0.1/src/flightdeck/server/routes/__init__.py +0 -0
  56. flightdeck_ai-1.0.1/src/flightdeck/storage.py +628 -0
  57. flightdeck_ai-1.0.1/tests/conftest.py +27 -0
  58. flightdeck_ai-1.0.1/tests/fixtures/golden_bundle/prompts/s.md +2 -0
  59. flightdeck_ai-1.0.1/tests/fixtures/golden_bundle/release.yaml +16 -0
  60. flightdeck_ai-1.0.1/tests/fixtures/json/policy_minimal_v1.json +4 -0
  61. flightdeck_ai-1.0.1/tests/fixtures/json/pricing_table_minimal_v1.json +11 -0
  62. flightdeck_ai-1.0.1/tests/fixtures/json/release_artifact_minimal_v1.json +24 -0
  63. flightdeck_ai-1.0.1/tests/fixtures/json/run_event_minimal_v1.json +28 -0
  64. flightdeck_ai-1.0.1/tests/test_bundle_checksum.py +38 -0
  65. flightdeck_ai-1.0.1/tests/test_bundle_golden_fixture.py +30 -0
  66. flightdeck_ai-1.0.1/tests/test_cli.py +19 -0
  67. flightdeck_ai-1.0.1/tests/test_doctor.py +172 -0
  68. flightdeck_ai-1.0.1/tests/test_examples_parse.py +43 -0
  69. flightdeck_ai-1.0.1/tests/test_ledger.py +115 -0
  70. flightdeck_ai-1.0.1/tests/test_quickstart_smoke.py +19 -0
  71. flightdeck_ai-1.0.1/tests/test_release_verify.py +56 -0
  72. flightdeck_ai-1.0.1/tests/test_schemas.py +40 -0
  73. flightdeck_ai-1.0.1/tests/test_sdk_client.py +52 -0
  74. flightdeck_ai-1.0.1/tests/test_server_ingest.py +252 -0
  75. flightdeck_ai-1.0.1/tests/test_spine.py +769 -0
  76. flightdeck_ai-1.0.1/tests/test_version_consistency.py +25 -0
  77. flightdeck_ai-1.0.1/uv.lock +963 -0
@@ -0,0 +1,7 @@
1
+ # FlightDeck — Cursor
2
+
3
+ Read **`AGENTS.md`** for mission, non-goals, public contracts, engineering rules, verification, and docs policy. **`CLAUDE.md`** is a short index for Claude Code / Cursor.
4
+
5
+ Quick verify (uv): `uv sync --frozen --extra dev`, then `uv run python -m ruff check src tests`, `uv run python -m pytest`, `uv run python scripts/quickstart_smoke.py` (pip/venv equivalents in `DEVELOPMENT.md`; on Windows, `py -3` if needed).
6
+
7
+ Normative v1 direction: https://github.com/flightdeckdev/flightdeck/blob/main/docs/spec-v1-forward.md · backlog: https://github.com/flightdeckdev/flightdeck/blob/main/docs/v1-next-steps.md · CLI: https://github.com/flightdeckdev/flightdeck/blob/main/docs/cli.md
@@ -0,0 +1,2 @@
1
+ # Golden bundle checksum is sensitive to line endings on checkout (see CHANGELOG 0.7.0).
2
+ tests/fixtures/golden_bundle/** text eol=lf
@@ -0,0 +1,2 @@
1
+ # Team must exist under https://github.com/orgs/flightdeckdev/teams (or replace with @username).
2
+ * @flightdeckdev/maintainers
@@ -0,0 +1,29 @@
1
+ name: Bug report
2
+ description: Report a reproducible problem with FlightDeck.
3
+ title: "bug: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: textarea
7
+ id: summary
8
+ attributes:
9
+ label: Summary
10
+ description: What happened?
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: reproduce
15
+ attributes:
16
+ label: Reproduction
17
+ description: Commands, inputs, and output needed to reproduce.
18
+ validations:
19
+ required: true
20
+ - type: input
21
+ id: version
22
+ attributes:
23
+ label: Version
24
+ description: FlightDeck version or commit.
25
+ - type: textarea
26
+ id: environment
27
+ attributes:
28
+ label: Environment
29
+ description: OS, Python version, and relevant setup details.
@@ -0,0 +1,34 @@
1
+ name: Feature request
2
+ description: Propose a focused FlightDeck capability.
3
+ title: "feat: "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: textarea
7
+ id: problem
8
+ attributes:
9
+ label: Problem
10
+ description: What release safety problem does this solve?
11
+ validations:
12
+ required: true
13
+ - type: textarea
14
+ id: proposal
15
+ attributes:
16
+ label: Proposal
17
+ description: What should FlightDeck do?
18
+ validations:
19
+ required: true
20
+ - type: dropdown
21
+ id: area
22
+ attributes:
23
+ label: Area
24
+ options:
25
+ - release artifact
26
+ - run event
27
+ - safety ledger
28
+ - pricing
29
+ - policy
30
+ - CLI
31
+ - docs
32
+ - other
33
+ validations:
34
+ required: true
@@ -0,0 +1,21 @@
1
+ ## Summary
2
+
3
+ ## Why
4
+
5
+ ## Changes
6
+
7
+ ## Validation
8
+
9
+ - [ ] `python -m ruff check src tests`
10
+ - [ ] `python -m pytest`
11
+ - [ ] CLI smoke test, if relevant
12
+
13
+ ## Schema / Storage Impact
14
+
15
+ - [ ] None
16
+ - [ ] Schema change
17
+ - [ ] Storage change
18
+
19
+ ## Risk
20
+
21
+ ## Notes
@@ -0,0 +1,81 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ python-version: ["3.14"]
15
+
16
+ steps:
17
+ - name: Checkout
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Set up uv
21
+ uses: astral-sh/setup-uv@v5
22
+ with:
23
+ enable-cache: true
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Sync dependencies
27
+ run: uv sync --frozen --extra dev
28
+
29
+ - name: Lint
30
+ run: uv run python -m ruff check src tests
31
+
32
+ - name: Test
33
+ run: uv run python -m pytest
34
+
35
+ - name: JSON Schemas drift check
36
+ run: |
37
+ uv run python scripts/generate_schemas.py
38
+ git diff --exit-code schemas/
39
+
40
+ - name: Quickstart smoke (cross-platform)
41
+ run: uv run python scripts/quickstart_smoke.py
42
+
43
+ - name: CLI smoke
44
+ run: uv run flightdeck --help
45
+
46
+ test-windows:
47
+ runs-on: windows-latest
48
+ strategy:
49
+ fail-fast: false
50
+ matrix:
51
+ python-version: ["3.14"]
52
+
53
+ steps:
54
+ - name: Checkout
55
+ uses: actions/checkout@v4
56
+
57
+ - name: Set up uv
58
+ uses: astral-sh/setup-uv@v5
59
+ with:
60
+ enable-cache: true
61
+ python-version: ${{ matrix.python-version }}
62
+
63
+ - name: Sync dependencies
64
+ run: uv sync --frozen --extra dev
65
+
66
+ - name: Lint
67
+ run: uv run python -m ruff check src tests
68
+
69
+ - name: Test
70
+ run: uv run python -m pytest
71
+
72
+ - name: JSON Schemas drift check
73
+ run: |
74
+ uv run python scripts/generate_schemas.py
75
+ git diff --exit-code schemas/
76
+
77
+ - name: Quickstart smoke (cross-platform)
78
+ run: uv run python scripts/quickstart_smoke.py
79
+
80
+ - name: CLI smoke
81
+ run: uv run flightdeck --help
@@ -0,0 +1,89 @@
1
+ # Publish sdist + wheel to PyPI when a SemVer tag is pushed (e.g. v1.0.2).
2
+ # Configure "trusted publishing" on PyPI for this workflow + repository + optional GitHub environment.
3
+ # https://docs.pypi.org/trusted-publishers/
4
+
5
+ name: Release (PyPI)
6
+
7
+ on:
8
+ push:
9
+ tags:
10
+ - "v[0-9]+.[0-9]+.[0-9]+"
11
+
12
+ jobs:
13
+ publish:
14
+ name: Build, verify, publish
15
+ runs-on: ubuntu-latest
16
+ environment:
17
+ name: pypi
18
+ url: https://pypi.org/project/flightdeck-ai/
19
+ permissions:
20
+ contents: write
21
+ id-token: write
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Set up uv
27
+ uses: astral-sh/setup-uv@v5
28
+ with:
29
+ enable-cache: true
30
+ python-version-file: .python-version
31
+
32
+ - name: Sync locked dev environment
33
+ run: uv sync --frozen --extra dev
34
+
35
+ - name: Verify tag matches declared package versions
36
+ shell: bash
37
+ env:
38
+ TAG: ${{ github.ref_name }}
39
+ run: |
40
+ set -euo pipefail
41
+ if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
42
+ echo "Unexpected tag format: $TAG (expected vMAJOR.MINOR.PATCH)"
43
+ exit 1
44
+ fi
45
+ uv run python <<'PY'
46
+ import os
47
+ import pathlib
48
+ import re
49
+ import tomllib
50
+
51
+ tag = os.environ["TAG"]
52
+ expected = tag.removeprefix("v")
53
+ data = tomllib.loads(pathlib.Path("pyproject.toml").read_text(encoding="utf-8"))
54
+ pyproject = data["project"]["version"]
55
+ init = pathlib.Path("src/flightdeck/__init__.py").read_text(encoding="utf-8")
56
+ m = re.search(r'__version__\s*=\s*["\']([^"\']+)["\']', init)
57
+ if not m:
58
+ raise SystemExit("Could not parse __version__ from src/flightdeck/__init__.py")
59
+ module = m.group(1)
60
+ if pyproject != expected:
61
+ raise SystemExit(f"Tag {tag} expects {expected} but pyproject.toml has {pyproject}")
62
+ if module != expected:
63
+ raise SystemExit(f"Tag {tag} expects {expected} but __init__.py has {module}")
64
+ PY
65
+
66
+ - name: Lint
67
+ run: uv run python -m ruff check src tests
68
+
69
+ - name: Test
70
+ run: uv run python -m pytest
71
+
72
+ - name: JSON Schemas drift check
73
+ run: |
74
+ uv run python scripts/generate_schemas.py
75
+ git diff --exit-code schemas/
76
+
77
+ - name: Build distributions
78
+ run: uv build
79
+
80
+ - name: Publish to PyPI
81
+ uses: pypa/gh-action-pypi-publish@release/v1
82
+ with:
83
+ attestations: true
84
+
85
+ - name: Create GitHub Release
86
+ uses: softprops/action-gh-release@v2
87
+ with:
88
+ files: dist/*
89
+ generate_release_notes: true
@@ -0,0 +1,31 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .pytest_cache/
4
+ pytest-cache-files-*/
5
+ .ruff_cache/
6
+ .tmp/
7
+ .venv/
8
+ build/
9
+ dist/
10
+ *.egg-info/
11
+ .coverage
12
+ htmlcov/
13
+ .DS_Store
14
+ Thumbs.db
15
+
16
+ # Local FlightDeck workspace (SQLite ledger + local config); never commit.
17
+ .flightdeck/
18
+
19
+ # Environment and secrets
20
+ .env
21
+ .env.*
22
+ *.pem
23
+ *.p12
24
+ *.pfx
25
+ secrets/
26
+ private/
27
+
28
+ # Common credential filenames (adjust if you add fixtures with similar names).
29
+ *credentials*.json
30
+ *service-account*.json
31
+ google-credentials.json
@@ -0,0 +1,17 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v5.0.0
4
+ hooks:
5
+ - id: check-ast
6
+ - id: check-merge-conflict
7
+ - id: check-yaml
8
+ args:
9
+ - --allow-multiple-documents
10
+ - id: debug-statements
11
+ - id: end-of-file-fixer
12
+ - id: trailing-whitespace
13
+
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ rev: v0.15.12
16
+ hooks:
17
+ - id: ruff
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,104 @@
1
+ # AGENTS.md
2
+
3
+ ## Repository model (research vs canonical)
4
+
5
+ This tree is usually a **personal-account research repo** (`origin` → your GitHub user): local experimentation, WIP, and broad refactors are acceptable.
6
+
7
+ **Organization repos** — canonical product: **[github.com/flightdeckdev/flightdeck](https://github.com/flightdeckdev/flightdeck)** under [flightdeckdev](https://github.com/flightdeckdev). Only **relevant**, standards-meeting changes (tests, ruff, no secrets, changelog/version when releasing) should be pushed or PR’d there—typically via a second remote **`org`** (workflow: [git remotes](https://github.com/flightdeckdev/flightdeck/blob/main/docs/git-remotes.md)).
8
+
9
+ When implementing features, prefer **small, PR-shaped slices** that could ship to an org repo without extra cleanup. Do not conflate “saved in research” with “ready for org push.”
10
+
11
+ Extended maintainer docs (research workflow, org checklist, canonical publish) live on **`main`** in that repository (for example [research workflow](https://github.com/flightdeckdev/flightdeck/blob/main/docs/research-workflow.md), [GitHub organization](https://github.com/flightdeckdev/flightdeck/blob/main/docs/github-organization.md)). This clone may omit those paths to stay small. Claude Code / short entrypoint: **`CLAUDE.md`**.
12
+
13
+ ## Mission
14
+
15
+ FlightDeck is AI Release Governance for production agents. The core product promise is
16
+ trustworthy release safety: version releases, ingest runtime evidence, compare diffs, and gate
17
+ promotion with policy.
18
+
19
+ ## Current Wedge
20
+
21
+ Economic and operational safety for AI releases.
22
+
23
+ ## Non-goals
24
+
25
+ Do not add:
26
+
27
+ - prompt IDEs
28
+ - agent frameworks
29
+ - dashboards before CLI workflow is proven
30
+ - gateways/proxies by default
31
+ - compliance scanners
32
+ - fine-tuning ops
33
+ - broad plugin systems
34
+
35
+ ## Public contracts
36
+
37
+ Treat these as **stable API** unless a change explicitly marks an experimental path:
38
+
39
+ - **CLI:** synopsis, flags, exit codes — canonical reference: **[docs/cli.md](https://github.com/flightdeckdev/flightdeck/blob/main/docs/cli.md)** (normative for scripting).
40
+ - **On-disk / wire:** `release.yaml`, run events, pricing imports, policy shape — **`schemas/`** (generated; drift caught in CI), **[docs/spec.md](https://github.com/flightdeckdev/flightdeck/blob/main/docs/spec.md)** (0.x snapshot of what the code does today).
41
+ - **v1 / GA direction** (migrations, checksums, trust boundaries, defaults): **[docs/spec-v1-forward.md](https://github.com/flightdeckdev/flightdeck/blob/main/docs/spec-v1-forward.md)**. Prefer updating the forward spec for new v1 contracts; avoid expanding **`docs/spec.md`** as the rolling GA target.
42
+ - **Backlog and review status:** **[docs/v1-next-steps.md](https://github.com/flightdeckdev/flightdeck/blob/main/docs/v1-next-steps.md)**.
43
+
44
+ ## Engineering rules
45
+
46
+ - Keep changes small and behavior-focused.
47
+ - Preserve the local-first CLI workflow.
48
+ - Treat schemas and CLI behavior as public contracts.
49
+ - Add tests for every behavior change.
50
+ - Prefer boring, explicit code over clever abstractions.
51
+ - Do not introduce empty enterprise scaffolding.
52
+ - Do not move modules into packages/apps until there is a real release boundary.
53
+
54
+ ## Before large or multi-file changes
55
+
56
+ Do a short review pass for:
57
+
58
+ - **Contract drift** (CLI, JSON/YAML, SQLite columns consumers rely on).
59
+ - **Trust boundaries** (diff, pricing, policy, promotion, serve host binding).
60
+ - **Cross-platform ergonomics** (Windows paths, line endings on fixtures, temp dirs).
61
+
62
+ ## Verification
63
+
64
+ Recommended (**[uv](https://docs.astral.sh/uv/)** — see **`DEVELOPMENT.md`**):
65
+
66
+ ```bash
67
+ uv sync --frozen --extra dev
68
+ uv run python -m ruff check src tests
69
+ uv run python -m pytest
70
+ uv run python scripts/quickstart_smoke.py
71
+ ```
72
+
73
+ After editing Pydantic models, regenerate schemas and ensure a clean diff:
74
+
75
+ ```bash
76
+ uv run python scripts/generate_schemas.py
77
+ git diff --exit-code schemas/
78
+ ```
79
+
80
+ Fallback (activated **venv** or global tools): the same steps with **`python -m …`** / **`python scripts/…`** as in **`DEVELOPMENT.md`**.
81
+
82
+ On **Windows**, use `py -3` in place of `python` if that is how your environment is set up. If pytest temp dirs fail with permissions, see **`DEVELOPMENT.md`** / **`tests/conftest.py`**.
83
+
84
+ **CI bar** (mirrors **`.github/workflows/ci.yml`** on **CPython 3.14**): **`uv sync --frozen --extra dev`**, **`uv run python -m ruff check src tests`**, **`uv run python -m pytest`**, **`uv run python scripts/generate_schemas.py`** + no **`schemas/`** diff, **`uv run python scripts/quickstart_smoke.py`**, **`uv run flightdeck --help`**.
85
+
86
+ Use a repo-local temp directory if the OS temp directory is restricted.
87
+
88
+ ## Product doctrine
89
+
90
+ A feature must strengthen at least one:
91
+
92
+ - release artifact integrity
93
+ - runtime evidence
94
+ - safety ledger accuracy
95
+ - policy-gated promotion
96
+ - audit history
97
+ - developer onboarding
98
+
99
+ If it does not, it waits.
100
+
101
+ ## Docs rules
102
+
103
+ Public docs explain implemented behavior and near-term roadmap. Internal product strategy, legal
104
+ notes, and fundraising/customer discovery material do not belong in this repo.
@@ -0,0 +1,215 @@
1
+ # Changelog
2
+
3
+ All notable changes to FlightDeck will be documented in this file.
4
+
5
+ This project follows [Semantic Versioning](https://semver.org/). From **v1.0.0**, documented CLI behavior (**[docs/cli.md](https://github.com/flightdeckdev/flightdeck/blob/main/docs/cli.md)** on the canonical **`main`** branch), committed **`schemas/v1/`**, and **`POST /v1/events`** payloads with **`api_version` `v1`** are treated as stable public contracts unless a release notes a semver-major bump.
6
+
7
+ ## Unreleased
8
+
9
+ ### Added
10
+
11
+ - **`uv.lock`** and **[uv](https://docs.astral.sh/uv/)**-based workflow: **`uv sync --extra dev`** / **`uv sync --frozen --extra dev`** for reproducible installs; **`uv run …`** for commands (see **`DEVELOPMENT.md`**).
12
+ - **CI:** **`astral-sh/setup-uv`** with **`uv sync --frozen --extra dev`** and **`uv run python -m …`** (avoids **`uv run pytest`** path quirks with **`from tests.…`** imports).
13
+ - **`.github/workflows/release-pypi.yml`:** on push of **`vMAJOR.MINOR.PATCH`**, verify tag matches **`pyproject.toml`** and **`src/flightdeck/__init__.py`**, run **ruff** / **pytest** / schema drift, **`uv build`**, publish to **PyPI** via **OIDC** trusted publishing (**publish attestations**), and create a **GitHub Release** with **`dist/*`** assets (**`softprops/action-gh-release`**).
14
+ - **`tests/test_version_consistency.py`:** assert **`pyproject.toml`** **`version`** matches **`flightdeck.__version__`** (same invariant as the release workflow).
15
+
16
+ ### Fixed
17
+
18
+ - **`diff_releases` zero policy sample thresholds:** `Policy.min_candidate_runs`, `Policy.min_baseline_runs`, and `Policy.min_low_runs` set to **`0`** now correctly override workspace config defaults to `0` instead of being silently ignored. Previously, `or`-based fallback treated `0` as falsy and fell back to the config value (typically `500` / `50`). Fixed by using explicit `is not None` checks. A policy can now unconditionally accept any sample size by setting thresholds to `0` — for example, to allow diffs over empty event windows without a confidence downgrade.
19
+
20
+ ### Changed
21
+
22
+ - **`tests/conftest.py`:** create repo **`.tmp/`** at import time so **`pytest --basetemp=.tmp/pytest`** works on fresh checkouts and **Linux** CI (parent dir is no longer Windows-only).
23
+ - **`pyproject.toml` `[project] name`:** **`flightdeck-ai`** to match the **PyPI** trusted-publisher project; install with **`pip install flightdeck-ai`** / **`uv add flightdeck-ai`** (CLI remains **`flightdeck`**, imports **`flightdeck.*`**).
24
+ - **Contributor docs** (**`README.md`**, **`DEVELOPMENT.md`**, **`CONTRIBUTING.md`**, **`AGENTS.md`**, **`CLAUDE.md`**, **`.cursorrules`**): prefer **uv**; keep **pip** / **`python -m venv`** as fallback.
25
+ - **Python:** **`requires-python >=3.14,<3.15`**, **`.python-version`**, PyPI classifiers, **Ruff** `target-version`, **`uv.lock`**, and **CI** matrices now target **CPython 3.14** only (replacing broader **3.11–3.14** testing).
26
+
27
+ ## 1.0.1 - 2026-05-01
28
+
29
+ ### Added
30
+
31
+ - **`.gitattributes`:** force **LF** for **`tests/fixtures/golden_bundle/`** so checkout line endings do not change the pinned bundle digest (matches the **0.7.0** changelog intent).
32
+
33
+ ### Changed
34
+
35
+ - **Slim distribution:** this repository omits the full in-tree **`docs/`** tree, org mirror scripts, and **`verify-repo-standards`** wrappers. Narrative docs and maintainer runbooks live on **[github.com/flightdeckdev/flightdeck](https://github.com/flightdeckdev/flightdeck)**; in-repo links now point there where applicable.
36
+ - **`pyproject.toml`:** OpenTelemetry packages are **optional** only (**`telemetry`** / **`all`** extras); the default install matches the **1.0.0** dependency story (core does not import OpenTelemetry).
37
+ - **`.pre-commit-config.yaml`:** **ruff** replaces **black** / **isort**; **`ruff-pre-commit`** pinned to **v0.15.12** to match **`dev`** (**`ruff==0.15.12`**).
38
+ - **CI:** Python **3.13** and **3.14** added to the Ubuntu and Windows matrices (superseded by **3.14**-only policy; see **Unreleased**).
39
+ - **`pyproject.toml`:** default **`pytest --basetemp=.tmp/pytest`** so local runs avoid Windows **`PermissionError`** on **`%TEMP%\pytest-of-*`**.
40
+ - **`pre-commit-hooks`:** bumped to **v5.0.0**.
41
+
42
+ ### Removed
43
+
44
+ - **`tests/test_sync_export_public.py`** (depended on export tooling not shipped in this tree).
45
+
46
+ ## 1.0.0 - 2026-04-30
47
+
48
+ ### Added
49
+
50
+ - **v1.0.0 GA freeze** narrative: **`RELEASE_NOTES.md`**, **`docs/spec-v1-forward.md`**, **`docs/v1-next-steps.md`** (archived internal planning under **`docs/reviews/`** remains **development-clone only**).
51
+
52
+ ### Changed
53
+
54
+ - **v1.0.0 GA freeze:** stable contracts for the local-first spine summarized in **[RELEASE_NOTES.md](RELEASE_NOTES.md)** (trust boundaries, SQLite migrations, payload versioning).
55
+ - **`pyproject.toml`**: **Development Status :: 5 - Production/Stable** on PyPI classifiers.
56
+ - **Dependencies:** **`opentelemetry-api`**, **`opentelemetry-sdk`**, and **`opentelemetry-exporter-otlp`** removed from default installs; added optional **`telemetry`** extra (included in **`all`**) for forward OTLP work — core code did not import OpenTelemetry.
57
+
58
+ ## 0.9.0 - 2026-04-30
59
+
60
+ ### Added
61
+
62
+ - **[RELEASE_NOTES.md](RELEASE_NOTES.md)**: maintainer-facing trust boundaries, SQLite upgrades, pre-1.0 vs **v1.0.0** freeze intent, payload **`api_version`** behavior.
63
+ - **`tests/fixtures/json/`**: minimal golden JSON for **`RunEvent`**, **`ReleaseArtifact`**, **`PricingTable`**, **`Policy`**; **`tests/test_schemas.py`** validates each fixture against Pydantic models.
64
+ - **HTTP ingest tests:** **`POST /v1/events`** rejects empty **`api_version`**, wrong casing (**`V1`**), JSON **`null`**; accepts omitted **`api_version`** (defaults to **`v1`**); stable **`detail`** string for **`v2`** rejections.
65
+ - **[CLAUDE.md](CLAUDE.md)**: short agent entry (must-read table, verify commands, Windows note).
66
+ - **0.9 → 1.0** sequencing captured in **`docs/v1-next-steps.md`** (detailed milestone plans archived under **`docs/reviews/`** in maintainer clones only).
67
+
68
+ ### Changed
69
+
70
+ - **[AGENTS.md](AGENTS.md)**: public contracts section, large-change review checklist, expanded verification (including **`quickstart_smoke.py`**), PR-shaped slice guidance, pointers to **`CLAUDE.md`** and forward spec.
71
+ - **[.cursorrules](.cursorrules)**: slimmed to defer to **`AGENTS.md`** / **`CLAUDE.md`** and the same verify bar.
72
+ - **[VERSIONING.md](VERSIONING.md)**: database migrations describe shipped numbered SQLite migrations (replacing stale “future work” wording); **Approaching 1.0.0** pointer to **`RELEASE_NOTES.md`** / **`docs/v1-next-steps.md`**.
73
+
74
+ ## 0.8.0 - 2026-04-30
75
+
76
+ ### Added
77
+
78
+ - **[docs/cli.md](docs/cli.md)**: CLI reference (synopsis, flags, exit codes, pointers to quickstart examples).
79
+ - **`scripts/quickstart_smoke.py`**: cross-platform quickstart smoke (**no bash**): temp workspace, Python placeholder substitution, **`release verify`**, **`doctor`**.
80
+ - **CI:** run quickstart smoke on **Ubuntu** and **Windows** matrix jobs (alongside pytest and schema drift).
81
+ - **Tests:** `tests/test_quickstart_smoke.py` exercises the smoke script.
82
+ - **0.8 milestone planning** (CLI + CI): archived under **`docs/reviews/`** in development clones; shipped artifacts are **`docs/cli.md`** and **`scripts/quickstart_smoke.py`** above.
83
+
84
+ ### Changed
85
+
86
+ - **[docs/quickstart.md](docs/quickstart.md)**: recommend **`python scripts/quickstart_smoke.py`** on Windows; bash flow kept as optional.
87
+ - **[docs/architecture.md](docs/architecture.md)**: deferred section updated for shipped SDK / rollback / serve / doctor / verify.
88
+ - **`scripts/verify-repo-standards.sh`** / **`.ps1`**: run **`quickstart_smoke.py`** after pytest (same bar as CI).
89
+
90
+ ## 0.7.0 - 2026-04-30
91
+
92
+ ### Added
93
+
94
+ - **`flightdeck release verify <release_id> --path …`**: compares the checksum stored at registration with **`bundle_checksum`** on a supplied directory or `release.yaml` file; **exit code 2** on mismatch (**1** for normal CLI errors).
95
+ - **Committed golden bundle** `tests/fixtures/golden_bundle/` with a **pinned SHA-256** asserted in CI (Linux + Windows).
96
+ - **`.gitattributes`**: force **LF** for the golden fixture path so line-ending normalization on checkout does not change the digest.
97
+ - **0.7 milestone planning** (golden bundle / verify): archived under **`docs/reviews/`** in development clones; see **`tests/fixtures/golden_bundle/`** and **`flightdeck release verify`** above.
98
+
99
+ ### Changed
100
+
101
+ - **`flightdeck.bundle`**: skip **symlink** files when hashing bundles (determinism + safety); POSIX test in **`tests/test_bundle_golden_fixture.py`** (skipped on Windows where symlink creation is often unavailable).
102
+ - **CI:** run **`python scripts/generate_schemas.py`** then **`git diff --exit-code schemas/`** on Ubuntu and Windows to catch hand-edited schema drift.
103
+
104
+ ## 0.6.0 - 2026-04-30
105
+
106
+ ### Added
107
+
108
+ - **Apache License, Version 2.0:** root **`LICENSE`** (from [apache.org](https://www.apache.org/licenses/LICENSE-2.0.txt)), **`NOTICE`**, and **`pyproject.toml`** `license = "Apache-2.0"` aligned with the canonical org repo [flightdeckdev/flightdeck](https://github.com/flightdeckdev/flightdeck).
109
+ - **SQLite migration 3:** `release_actions.audit_seq` (backfilled in `created_at` order), **`UNIQUE`** index **`idx_release_actions_audit_seq`**, and automatic assignment on insert via **`Storage._next_audit_seq`**.
110
+ - **`PromotionRecord.audit_seq`**: optional on write; populated when listing actions from storage.
111
+ - **`Storage.check_release_actions_audit_seq()`** and **`flightdeck doctor`** extension: verifies **contiguous** non-null **`audit_seq`** values `1..max` (gap / tamper hint per forward spec).
112
+
113
+ ### Changed
114
+
115
+ - **README** / **[docs/github-organization.md](docs/github-organization.md)** / **[docs/git-remotes.md](docs/git-remotes.md):** point at **`https://github.com/flightdeckdev/flightdeck`**.
116
+
117
+ ## 0.5.1 - 2026-04-30
118
+
119
+ ### Added
120
+
121
+ - **`flightdeck doctor`**: read-only checks for **SQLite schema migrations** (through `LATEST_SCHEMA_MIGRATION_VERSION`) and **promoted release pointers** (each `promoted_releases.release_id` exists in `releases`).
122
+ - **`flightdeck.storage`**: `list_applied_migrations()`, `list_promoted_pointers()`, and **`LATEST_SCHEMA_MIGRATION_VERSION`** (keep in sync when adding migrations).
123
+
124
+ ## 0.5.0 - 2026-04-30
125
+
126
+ ### Added
127
+
128
+ - **[docs/v1-next-steps.md](docs/v1-next-steps.md)**: Maintainer v1 gap analysis (P0/P1/P2), milestone sequencing (0.5–1.0), and risk callouts; tracks implementation status as work lands.
129
+ - **`flightdeck serve`**: warns when `--host` is not loopback (trust boundary; see forward spec §4).
130
+ - **`POST /v1/events`**: rejects unsupported `api_version` before Pydantic with a clear 400 detail.
131
+ - **Ledger tests** (`tests/test_ledger.py`): `diff_releases` rejects cross-agent and mixed-agent run batches.
132
+
133
+ ### Changed
134
+
135
+ - **Implicit default policy** (no `flightdeck policy set`): `require_high_diff_confidence` now defaults to **`true`**, matching the `Policy` model and **v1 GA** direction. Quickstart and tests keep explicit **`require_high_diff_confidence: false`** where low-sample demos need it.
136
+ - **`diff_releases`**: enforces a single shared `agent_id` across baseline and candidate run events when both sides are non-empty (defense in depth vs CLI-only checks).
137
+ - **`Storage.insert_release`**: uses **`transaction()`** for the same atomic discipline as promotion paths.
138
+ - **CLI** `release diff`, `release promote`, and `release rollback`: surface `ValueError` from `diff_releases` as `ClickException`.
139
+
140
+ ## 0.4.2 - 2026-04-30
141
+
142
+ ### Added
143
+
144
+ - **[docs/git-remotes.md](docs/git-remotes.md)**: configure **`origin`** (personal research) vs **`org`** ([flightdeckdev](https://github.com/flightdeckdev) canonical), with everyday `git push` examples.
145
+
146
+ ### Changed
147
+
148
+ - **Research workflow docs** ([docs/research-workflow.md](docs/research-workflow.md), [RESEARCH.md](RESEARCH.md), [AGENTS.md](AGENTS.md), [.cursorrules](.cursorrules), [docs/github-organization.md](docs/github-organization.md)) now state explicitly: **personal account** = research clone; **org** = user-facing canonical.
149
+
150
+ ## 0.4.1 - 2026-04-30
151
+
152
+ ### Added
153
+
154
+ - **[docs/github-organization.md](docs/github-organization.md)** for the **[flightdeckdev](https://github.com/flightdeckdev)** org: when to add repos, pre-push checklist, private-file policy.
155
+ - **`scripts/verify-repo-standards.sh`** / **`.ps1`**: run ruff + pytest before pushing.
156
+
157
+ ### Changed
158
+
159
+ - **`.gitignore`**: ignore **`.flightdeck/`** (local DB/config), **`private/`**, **`secrets/`**, common cert/credential patterns, **`Thumbs.db`**.
160
+ - **Release bundle checksum** moved to **`flightdeck.bundle`**: LF normalization for text-like extensions so CRLF vs LF does not change the digest; `.git` / `__pycache__` under a bundle are excluded from hashing.
161
+ - **SQLite migration 2**: index on `run_events(release_id, timestamp)` for ledger queries.
162
+
163
+ ### Security / hygiene
164
+
165
+ - **[SECURITY.md](SECURITY.md)** and **[CONTRIBUTING.md](CONTRIBUTING.md)** expanded with secret/local-path guidance and link to the org push gate doc.
166
+
167
+ ## 0.4.0 - 2026-04-30
168
+
169
+ ### Added
170
+
171
+ - **Forward v1 specification** (`docs/spec-v1-forward.md`): normative direction for v1 GA (versioning, migrations, bundle checksum canonicalization, trust boundaries, diff/policy defaults, SDK testing discipline). `docs/spec.md` remains the frozen 0.x implementation narrative; new guarantees land here first.
172
+ - **SDK unit test** using `httpx.MockTransport` so the Python client is covered without relying on sync ASGI transport quirks.
173
+
174
+ ### Changed
175
+
176
+ - README status and documentation index now point at the forward v1 spec and reflect shipped local HTTP + minimal SDK.
177
+
178
+ ## 0.3.0 - 2026-04-30
179
+
180
+ ### Added
181
+
182
+ - Local HTTP ingestion service: `flightdeck serve` with `POST /v1/events`.
183
+ - Minimal HTTP client helper: `flightdeck.sdk.client.FlightdeckClient`.
184
+ - `flightdeck release rollback` with the same policy gate + audit trail as `promote`.
185
+ - Append-only pricing import audit log (`pricing_import_audit`) and required `--reason` for `pricing import --replace`.
186
+ - Public JSON Schemas under `schemas/v1/` plus `scripts/generate_schemas.py`.
187
+ - Policy can require HIGH diff confidence (`require_high_diff_confidence`, default `true` on explicit policies).
188
+
189
+ ### Fixed
190
+
191
+ - Atomic promotion: audit record + promoted pointer update now share a single DB transaction.
192
+ - SQLite connections enable WAL + busy timeout to reduce Windows locking issues.
193
+ - Safer `--window` parsing errors are surfaced as `ClickException` (no tracebacks).
194
+
195
+ ## 0.2.0 - 2026-04-30
196
+
197
+ ### Added
198
+
199
+ - Local release registry (`flightdeck release register`, `flightdeck release list`, `flightdeck release show`).
200
+ - Run event ingestion (`flightdeck runs ingest`).
201
+ - Trusted `flightdeck release diff` with confidence labels, explicit `--window`, and ASCII `delta` output.
202
+ - Per-release pricing for diffs (baseline and candidate are costed against their own `pricing_reference`).
203
+ - Cross-agent diff rejection by default.
204
+ - Immutable pricing table import with explicit `--replace` and `flightdeck pricing show`.
205
+ - Active policy object (`flightdeck policy set`, `flightdeck policy show`) used for diff evaluation and promotion.
206
+ - Policy-gated `flightdeck release promote` with required `--reason` and `flightdeck release history`.
207
+
208
+ ### Notes
209
+
210
+ - Cost estimates are **model token costs** only; tool spend pricing is not implemented yet.
211
+
212
+ ### Fixed
213
+
214
+ - Windows: avoid pytest temp-dir permission issues by redirecting `TEMP`/`TMP` into a repo-local `.tmp/`
215
+ directory during pytest (see `tests/conftest.py`), with an opt-out via `FLIGHTDECK_USE_SYSTEM_TEMP=1`.