Spaces:
Sleeping
Sleeping
Commit History
-
Phase 5: staged read-only email adapter + ops hardening
Staged real-inbox connector (the user's "read-only behind a flag" decision): - env/connectors/: isolated package mapping real mail into the un-privileged Observation schema. base.py (RawEmail + ReadOnlyEmailConnector, no send/delete/mutate), mapping.py (neutral defaults; emits ONLY Observation/ ObservationEmail, never EmailRecord/gold fields -> ungradeable by construction), imap_readonly.py (selects readonly=True, SEARCH/FETCH only; client injected so it's testable without network), config.py (EMAIL_CONNECTOR_ENABLED, default off). - scripts/run_benchmark.py refuses to run if the connector is enabled (benchmark is sim-only by construction). - tests/test_connector.py (fixture-driven, no network) + test_connector_isolation.py (AST import-graph proof: grader/environment never import connectors and vice versa; benchmark-guard raises). tests/fixtures/mail/sample.eml. Ops hardening: - benchmark/results_report.py HTML: a11y pass (lang, <main>, <caption>, th scope=col, thead…0842437 -
Phase 0: error-proof invariant harness
Build the test harness every later advancement plugs into, BEFORE any feature, so regressions to the deterministic core are structurally unmergeable. - tests/harness/invariants.py: reusable assertions for the invariant contract (INV-1 open-interval, INV-2 determinism, INV-3 persona-invariant headline, INV-4 bounded reward) + canonical BaselinePolicy rollout helper. - tests/harness/test_invariants_property.py: Hypothesis property/fuzz tests over tasks x personas x generated action sequences (derandomize=True, no flake). - tests/harness/test_golden_snapshots.py + snapshots/baseline_golden.json: full GraderResponse (incl. per-step step_breakdown) frozen for the canonical rollout across tasks x personas x seeds[42,43]. Regen only via scripts/regen_golden.py. - tests/harness/test_determinism_guard.py, test_perf_regression.py, test_data_integrity.py: full-matrix determinism, coarse perf budget, and the INV-5 closed-schema guarantee (gold fields never reach an Observation). - s…81315e9 -
Repositioning: world-class personal project (v1.0.0)
Drop all competition/hackathon framing and tighten the project into a standalone, portfolio-grade repo. Behavior of the environment, graders, and API is unchanged; this is reframing + cleanup + consolidation. De-hackathon: - Remove HF Space frontmatter from README; reword "OpenEnv-style" -> "RL-style" and "validator parity"/"validator-friendly" -> "score/log contract" / "numerically stable" across all docs and code docstrings. - Delete the OpenEnv manifest (openenv.yaml) and the dead openenv-core dep. - Rewrite DEPLOYMENT_GUIDE from an HF-submission checklist into a generic Docker/cloud deployment guide (HF Spaces kept as one optional target). - Rename tests/test_validator_parity.py -> tests/test_score_contract.py. - Remove empty stray dirs (Hackathon/, Hackathonenvlearning/, E:Meta/). UI consolidation: - Remove the duplicate Streamlit console (streamlit_app.py) and the streamlit dependency; the React dashboard is now the single served UI. Dependency & tooling: - Single runt…203345c
-
Release polish: real GHCR slug + v0.1.0 CHANGELOG section
- release.yml IMAGE_NAME -> ghcr.io/rogerdemello/autonomous-executive-email-copilot. - CHANGELOG [0.1.0] release section (body source for the release workflow) + links.6c34548 -
Wave 2 infra: release pipeline, Postgres option, LLM metrics, load test
- .github/workflows/release.yml: tag-triggered GHCR publish + SBOM + GH Release. - Optional DATABASE_URL (Postgres) with pool tuning; SQLite stays the default, psycopg stays an optional dep. +tests/test_db_engine.py. - telemetry: llm_cost_usd_total / llm_tokens_total / llm_latency_ms metrics + record_llm_usage() helper + 3 Grafana panels. +tests/test_llm_metrics.py. - scripts/loadtest/: optional Locust load test + runbook. - Suite: 255 green.78d9fa0
-
Phase 4: frontend robustness, live WebSocket, tests, lint/format
- Shared API client (dashboard/src/api.ts): fetch with timeout (AbortController), retry/backoff for GETs, typed ApiError; Inbox + App health check refactored onto it. - Live updates: useDashboardSocket hook connects to /ws/dashboard with ping/pong heartbeat + capped-backoff reconnect; App shows Live/Connected/Disconnected. - Tooling: vitest + @testing-library/react (jsdom), eslint (flat config, typescript-eslint + react-hooks), prettier. Scripts: test, lint, format. - Tests: api client (success/4xx-no-retry/5xx-retry/url) and Inbox (render + error). - Applied prettier across dashboard sources; lint clean, 6 tests pass, build green. - CI frontend job now runs eslint + prettier check + vitest before tsc/build.d32f686
-
Phase 3: overhaul CI pipeline
Replace the minimal workflow with parallel jobs: - lint: ruff check + ruff format --check - test: Python 3.10/3.11/3.12 matrix, pytest + coverage gate (--cov-fail-under=70, current 77%), Codecov upload (non-blocking) - typecheck: mypy (informational/continue-on-error) - security: bandit (-ll, blocking) + pip-audit (informational) - frontend: npm ci, tsc --noEmit, build - docker: build image + smoke /health, /docs, /dashboard/ - inference-smoke: baseline-fallback run with no provider key Add pytest-cov to requirements. Restrict alert webhooks to http(s) schemes (fixes bandit B310) so the security job passes.68b3ca2 -
Phase 1: commit CI workflow and dependency lockfile
.github/workflows/ci.yml and requirements.lock were untracked.334616d