|
|
@@ -1,5 +1,103 @@
|
|
|
# Release Notes
|
|
|
|
|
|
+## v1.0.0-rc2 — 2026-06-07
|
|
|
+
|
|
|
+Second release candidate. Five post-rc1 commits closing **14 more audit
|
|
|
+findings** ([`docs/AUDIT_2026-06-05.md`](docs/AUDIT_2026-06-05.md))
|
|
|
+without changing the v1.0 surface or behavior contract. No migration
|
|
|
+needed from `v1.0.0-rc1` — `git pull` + restart.
|
|
|
+
|
|
|
+### Highlights
|
|
|
+
|
|
|
+- **Security batch (8 high)** — closed 8 attack surfaces with 1-10 line
|
|
|
+ fixes, each with a regression test in the new integration suite.
|
|
|
+- **Test coverage (3 high)** — added 25 tests across authenticate(),
|
|
|
+ rag.py, and instance-DB persistence; total tests at root `tests/`
|
|
|
+ now 132 (was 96), all green on Python 3.10 / 3.11 / 3.12.
|
|
|
+- **physics67 escape fix** — prevents the agent-write-to-repo-root
|
|
|
+ pattern uncovered in user audit; .gitignore defense in depth.
|
|
|
+- **Doc/spec alignment (2 high)** — `agentpaas/SPEC.md` stream URL +
|
|
|
+ response schema now match code; `docs/agentpaas.md` architecture
|
|
|
+ diagram corrected for the src-layout move.
|
|
|
+
|
|
|
+### Audit findings closed in rc2
|
|
|
+
|
|
|
+- `5e4688b` — `docs/agentpaas.md` architecture path (post src-layout)
|
|
|
+ + `agentpaas/SPEC.md` §3.3.1 response schema (#74 #75)
|
|
|
+- `c764d11` — physics67 sub-agent prompts forced to absolute paths
|
|
|
+ + .gitignore defense for stage-name escape patterns (root cause for
|
|
|
+ the `03_analysis/` and `nh_qgt/` write-escape bugs)
|
|
|
+- `c641f34` — **security batch**:
|
|
|
+ - `#14` `rollback_agent` RBAC + audit_log + tenant scope on version SELECT
|
|
|
+ - `#24` dev `docker-compose.yml` master-key fail-fast (was static
|
|
|
+ `dev_auto_generated` fallback)
|
|
|
+ - `#25` rate-limit middleware: unauth → per-IP bucket (was silent
|
|
|
+ bypass `if not api_key: return await call_next(request)`)
|
|
|
+ - `#26` `/analyze/*` router: `Depends(get_tenant)` + 256 KB body
|
|
|
+ cap (closes audit low `#90` billion-laughs DoS for free)
|
|
|
+ - `#27` `/knowledge/{kb_id}/files`: `kb_root` containment check
|
|
|
+ via resolved-path `startswith(kb_root + os.sep)`
|
|
|
+ - `#28` `/jobs/{job_id}` IDOR: tenant ownership check; 404 not 403
|
|
|
+ to defeat the id oracle
|
|
|
+ - `#30` `_build_kb_context`: per-kb SELECT now scoped by tenant_id
|
|
|
+ so runtime can't fan out over another tenant's KBs
|
|
|
+ - `#32` Dockerfile: `USER appuser` (UID 10001) instead of root
|
|
|
+- `e2332cd` — **test gap batch**:
|
|
|
+ - `#34` `tests/test_authenticate.py` (NEW, 9 tests including the
|
|
|
+ headline SEC-01 legacy→PBKDF2 auto-migration assertion)
|
|
|
+ - `#35` `tests/test_rag.py` (NEW, 8 tests; covers
|
|
|
+ SimpleVectorStore + RAGTool + create_rag deterministic ranking)
|
|
|
+ - `#36` `tests/test_instance.py +3` tests covering the
|
|
|
+ `agents.agent_template` / `agents.instance_dir` DB columns
|
|
|
+
|
|
|
+### Side fixes
|
|
|
+
|
|
|
+- `agentpaas/db/models.py` migration loop now skips ALTERs against
|
|
|
+ tables that don't yet exist (caught when running against fresh
|
|
|
+ `:memory:` SQLite — silently broken in `_init_tables` order
|
|
|
+ pre-rc2; production hid this because the DB persists across boots).
|
|
|
+- `Chat.tsx` rate-limit-aware: `/cancel` POST is now permanently
|
|
|
+ exempt from rate limiting (user-flagged: clicking Stop on a
|
|
|
+ runaway iterate run would get 429'd through the polling burst).
|
|
|
+
|
|
|
+### Cumulative audit progress
|
|
|
+
|
|
|
+```
|
|
|
+critical: 7/7 ✓ (100%)
|
|
|
+high: 22/33 (67%)
|
|
|
+medium: 1/29
|
|
|
+low: 1/15
|
|
|
+─────────────
|
|
|
+TOTAL: 28/84 = 33% closed
|
|
|
+```
|
|
|
+
|
|
|
+### Out of scope for rc2 (and rc-line in general)
|
|
|
+
|
|
|
+The remaining 11 high findings cluster into multi-week refactors —
|
|
|
+not fit for rc patches:
|
|
|
+
|
|
|
+- 4 parallel beta-reduction interpreters (audit `#20`)
|
|
|
+- `compiler.py` god-module 1654 LOC split (audit `#21`)
|
|
|
+- Compiler → Runtime layer violation (audit `#19`)
|
|
|
+- Module-global `_shell_set_cwd` concurrency race (audit `#11`)
|
|
|
+- Single shared SQLite connection (audit `#13`)
|
|
|
+- `qaagent67lambda` template hardcoded `/home/67/...` (audit `#16`)
|
|
|
+- `qaagent67lambda` `pickle.load` on shared knowledge dir (audit `#17`)
|
|
|
+- React error boundary missing (audit `#22`)
|
|
|
+- Chat history setState race (audit `#23`)
|
|
|
+- README "11 constructs" vs YAML supporting 5 (audit `#40`)
|
|
|
+- `lambdagent_guard` MIT vs lambdagent BUSL license conflict (audit `#44`)
|
|
|
+
|
|
|
+These move to GitHub issues and target `v1.1`. The release-candidate
|
|
|
+line is closed for new feature work.
|
|
|
+
|
|
|
+### Migration from rc1
|
|
|
+
|
|
|
+None. Same SQLite schema, same routes, same wire format. Restart the
|
|
|
+service after `git pull` to pick up the rate-limit + auth changes.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
## v1.0.0-rc1 — 2026-06-06
|
|
|
|
|
|
First public release candidate of **lambdagentpaas** — a full-stack platform
|