Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
89f0692
fix(api): close the authorization bypasses and Iceberg conformance gaps
AlexMercedCoder Aug 10, 2026
bdcfdb0
fix(store): align the four backends and add a cross-backend parity suite
AlexMercedCoder Aug 10, 2026
93fdd71
fix(deploy,docs): make the quick start work and stop the config drifting
AlexMercedCoder Aug 10, 2026
aec5a77
fix(ui,api): reconnect the management UI to the server it talks to
AlexMercedCoder Aug 10, 2026
0ebe817
fix(clients): make the CLIs and SDK talk to the API that exists
AlexMercedCoder Aug 10, 2026
a905c80
test(ci): add the permission matrix and wire every guardrail into CI
AlexMercedCoder Aug 10, 2026
43d995c
docs(changelog): record the roadmap_aug10 audit remediation
AlexMercedCoder Aug 10, 2026
e64b5d5
fix(store,release): repair the SQLite upgrade path and four defects o…
AlexMercedCoder Aug 10, 2026
b7ebe70
test(mongo): exercise the replica-set paths, and fix the B21 they exp…
AlexMercedCoder Aug 10, 2026
bc9120b
fix(mongo): audit every collection for the UUID encoding asymmetry
AlexMercedCoder Aug 10, 2026
ded790c
fix(ui): green test suite, and the defects it was hiding
AlexMercedCoder Aug 10, 2026
0326a72
fix(ci): the guardrail jobs had never run, and one guard flagged its …
AlexMercedCoder Aug 10, 2026
214e13b
chore(deps): clear the advisories a lockfile update can reach
AlexMercedCoder Aug 10, 2026
a2c3400
fix(deps,features): clear every advisory, and the cloud features that…
AlexMercedCoder Aug 10, 2026
d300071
fix(ci): cargo audit was not reading the exceptions it was meant to
AlexMercedCoder Aug 10, 2026
b685c78
fix(release): the release pipeline had never produced a release
AlexMercedCoder Aug 10, 2026
947922c
fix(api): the server shut itself down 25 seconds after startup
AlexMercedCoder Aug 11, 2026
0247796
fix(ci): supply the release harness's variables to the compose valida…
AlexMercedCoder Aug 11, 2026
73dadb2
feat(api): throttle the authentication endpoints (C-5)
AlexMercedCoder Aug 11, 2026
cc7c32d
feat(store): encrypt warehouse cloud credentials at rest (C-11)
AlexMercedCoder Aug 11, 2026
60ae054
fix(store,api): make branch-create-by-copy atomic, and stop it report…
AlexMercedCoder Aug 11, 2026
3a044c8
feat(mongo): manage the index set, and enforce the uniqueness the SQL…
AlexMercedCoder Aug 11, 2026
6357385
feat: complete the non-OIDC production-readiness work, and reconcile …
AlexMercedCoder Aug 11, 2026
8f3fd53
feat(auth): implement OpenID Connect (C-2/C-3)
AlexMercedCoder Aug 11, 2026
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
21 changes: 19 additions & 2 deletions .github/workflows/build-binaries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,19 @@ jobs:
path: deployment_assets/bin/linux-x86_64/*

build-macos-intel:
runs-on: macos-13 # Intel runner
# `macos-15-intel`, not `macos-13`.
#
# The macOS 13 image was retired in December 2025. Every tagged release
# since has hung here: the job sat queued for the full 24-hour limit
# waiting for a runner that no longer exists, while linux, macos-arm and
# windows finished in 8-15 minutes, and `create-release` was skipped
# because it `needs:` all four. That is why v0.4.0 through v0.6.0 produced
# no GitHub release and no binaries - the workflow had never once
# succeeded.
#
# `macos-15-intel` is GitHub's documented replacement for workflows that
# genuinely need x86_64.
runs-on: macos-15-intel
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
Expand Down Expand Up @@ -98,8 +110,13 @@ jobs:
steps:
- uses: actions/download-artifact@v4
- name: Create Release
uses: softprops/action-gh-release@v1
uses: softprops/action-gh-release@v2
with:
body: |
See [CHANGELOG.md](https://github.com/AlexMercedCoder/Pangolin/blob/main/CHANGELOG.md)
for the full list of changes, and
[SECURITY.md](https://github.com/AlexMercedCoder/Pangolin/blob/main/SECURITY.md)
for the security advisory and upgrade steps.
files: |
linux-binaries/*
macos-intel-binaries/*
Expand Down
546 changes: 535 additions & 11 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,14 @@ check_log.txt
test_results.txt
debug_output*.txt
:memory:

# Editor backup copies of source files (B45).
#
# `pangolin_store/src/memory.rs.bak` and `mongo.rs.bak` sat in the tree as ~4k
# lines of divergent, dead query copies - a grep trap that returned plausible
# but stale code for anyone searching the store layer.
*.bak
*.rs.bak

# Logs live under logs/ directories that were previously tracked.
logs/
40 changes: 40 additions & 0 deletions AUDIT_EXECUTION_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,48 @@ Three findings define the current state:

The good news is that the fixes are tractable and mostly independent. The critical security items are each a few dozen lines. The correctness items are contained in one file. The hygiene items are largely mechanical. **The single highest-leverage action is standing up CI**, because without it every fix below is one refactor away from silently regressing — which is precisely how the current state was reached.

> ## Status as of 2026-08-11 — read this first
>
> This document is the **original audit of 2026-08-09**, kept as the historical
> record of what was found. Much of it has since been fixed. Where this file and
> the reconciled status below disagree, **the status below is correct**.
>
> Current state is tracked in:
>
> - [`STATUS.md`](STATUS.md) — the single reconciled view of done vs. outstanding
> - [`CHANGELOG.md`](CHANGELOG.md) — what changed in each release, and why
> - [`SECURITY.md`](SECURITY.md) — the advisory and the remaining security gaps
> - [`docs/operations/`](docs/operations/) — backend parity, encryption, backup
> and recovery, performance, multiple replicas
>
> The scorecard immediately below has been updated in place; every other section
> of this document is left as it was written on 2026-08-09.

### Readiness scorecard

**Updated 2026-08-11.** Ratings in parentheses are the original 2026-08-09
assessment, kept so the direction of travel is visible.

| Dimension | Rating | One-line justification |
|---|---|---|
| Feature breadth | **Strong** (Strong) | Four backends, three clouds, branching/merge, RBAC, audit, SSO, SDK, UI |
| Iceberg REST correctness | **Good** (Weak) | Requirements and updates enforced; `registerTable`, `listViews`, `viewExists`, `dropView` added. `commitTransaction` deliberately absent — see below |
| Security (authn/authz) | **Adequate** (Critical) | OAuth exfiltration, default JWT secret, bypass path and the 0.7.0 authorization cluster all fixed; rate limiting and credential encryption added. OIDC is still not OIDC |
| Error handling | **Adequate** (Weak) | Iceberg error envelope conforms; `unwrap()` counts unchanged in non-Iceberg paths |
| Observability | **Good** (Absent) | `/metrics` with latency histograms, request tracing, `RUST_LOG` honoured, `/health/live` and `/health/ready` |
| Reliability | **Good** (Weak) | Graceful shutdown, timeouts, body and concurrency limits, readiness that probes the store |
| Data integrity | **Good** (Weak) | Postgres and SQLite wrap catalog delete, branch delete, merge, and branch-create-by-copy. MongoDB wraps the cascade where a session exists |
| Test coverage | **Good** (Critical) | 63 targets / 415 tests green against live PostgreSQL, MongoDB and MinIO; 19 CI jobs including an authz matrix and a four-backend parity suite |
| Code hygiene | **Adequate** (Weak) | `rustfmt` clean; clippy at a ratcheted budget of 30, down from 314 |
| Enterprise readiness | **Partial** (Partial) | Credentials encrypted at rest, backup/restore drilled and measured, multi-replica constraints documented. No HA proof, no tamper-evident audit, no OIDC |
| Deployment | **Good** (Partial) | Helm lints and templates; container runs non-root; release pipeline actually produces a release (it never had) |
| Documentation | **Strong** (Strong user / Absent contributor) | CONTRIBUTING, SECURITY, CHANGELOG, and an operations set covering parity, encryption, backup, performance and replicas |

**Still weak, stated plainly:** OIDC (no PKCE, no JWKS, no `id_token`
validation), no tamper-evident audit trail, no point-in-time recovery,
multi-replica operation untested under load, and `commitTransaction` absent
because the store cannot commit several tables atomically.

| Dimension | Rating | One-line justification |
|---|---|---|
| Feature breadth | **Strong** | Four backends, three clouds, branching/merge, RBAC, audit, SSO, SDK, UI |
Expand Down
Loading
Loading