Duplicate ct.prod droplet destroyed + reserved IP released (billing stopped);
terraform state re-imported to the live apps.ct record (plan: No changes); real
LE cert verified for apps.ftw.pw. Remaining: edge token injection for the console,
mesh-only SSH, wg1 join.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The public IP is IaC-owned (digitalocean_record.ct_apps); joker.com just holds
a one-time CNAME apps.ftw.pw -> apps.ct.uvlava.com. CNAME (not url-forwarding)
so the browser stays on apps.ftw.pw and Caddy issues its LE cert. Apex short-
links untouched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
serve-classifier: launch the trained LoRA classifier (Qwen2.5-7B +
/mnt/models/lora-classifier adapter) via vLLM --enable-lora on :8001,
coexisting with the 27B generator on :8000 (gpu-mem 0.25, /mnt/models ro).
classifier-serving.md: the integration contract — how prospect.classify routes
to the served quinn-classifier model (the one ai-harness/backend change), env,
the 12-move + is_prospect-first schema. Docs/my-lane only; backend wiring
punch-listed for the parallel agent.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Document ct.prod as the hardened public prod host: public Caddy edge + app on
ct.prod, /internal + DB on VPC/mesh, lime internal-only. Add the exact ordered
operator runbook (terraform plan/apply -target for the ct.prod resources, wg1
join via citron, one-time DB role + trusted-source, apps.ftw.pw DNS as an
operator decision since ftw.pw is not DO-managed, deploy-server.sh, Caddy
install). Keep the lime DB/env/systemd mechanics as a legacy reference.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Two concurrent lanes meet only at a versioned interface, never the same files:
- Backend+UI lane (the parallel agent): src/, web/, migrations/ — engine,
ai-harness wiring, governance, teach-loop, specs/mission backend, UI,
orchestrator.
- Data->model lane (this session): tooling/eval/ + model artifacts — identity
gate, re-sweep, label verify, classifier+voice LoRA, eval bake-off, CPU
distill, GPU ops.
Interface: a trained eval-passed build do-gpu-<model>_<build> at
GPU_INFERENCE_URL; backend points draft_engine at it. No shared files.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ultracode pass (survey -> author -> adversarial verify) updated the master
plan to the now-real state and added the 5 finishing sections:
- Status legend (shipped/in-progress/proposed) applied throughout.
- ai-harness reconciled: @packages/ai-harness now EXISTS (committed; retired
model-boss, MODEL_BOSS_URL->GPU_INFERENCE_URL, wired via src/gpu fail-soft).
- Dependency-resolution section (ai-harness done; PROSPECTOR_TRAINING + Executor
datasets external; src/specs/0014 proposed).
- GPU cost-control sequencing (0013 shipped 2 of 6 settings).
- Sources-of-truth appendix (verified path + status per asset).
Verify phase caught + fixed the one new error (tooling/eval 8 .py, not 11).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Multi-agent review against the real repo confirmed 3 accuracy errors (the
design docs were correctly cleared as forward-looking, not state claims):
- ai-system-plan: drop '95% terse' — score.py emits only on-voice/location/
malformed; cite those.
- tooling/eval/README: pseudonym is RQ_NN only (extract.py), not THREAD_NN.
- training-loop: mark PROSPECTOR_TRAINING.md as an external Executor doc not
yet in this repo (also dangling-cited in fast-classifier.ts:4).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Replace every model-boss/coordinator reference with the @prospector/ai-harness
story (direct vLLM client + classify/draft/judge/orchestrate task registry +
on-demand GPU lifecycle + CoT-workflow runner + cost meter) across ai-first-v4,
draft-engine, model-eval-pipeline, and PROSPECTOR.md; GPU_INFERENCE_URL is the
canonical inference contract. Note ai-harness is promotable to a shared @ct
package (onlyfans carries a parallel src/engine/classifier.ts).
- Fix migration collision: ai-first-v4 actor-attribution renumbered 0007 -> 0016
(0007_tasks.sql exists; tree at 0013).
- Add the three missing pieces from the plan: a formal DRAFT runner mode distinct
from PAUSE + DRAFT->GO graduation (new control-modes.md); a runtime per-draft
alignment gate (deterministic facts/policy + GPU judge; spec_conflict/
policy_conflict holds) in draft-engine's pipeline; and the facts/mission config
schema (src/specs/, 0014_specs.sql) in ai-system-plan §5 + draft-engine.
- Index control-modes.md and the ai-harness rename in features/README.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add docs/features/README.md — feature docs grouped by area (AI system,
engine, training & eval, GPU/cost/ops, interfaces) with a reading order.
Rewrite tooling/eval/README.md to document the full built pipeline (lib,
mine_cluster, sweep, rationalize, run, score, gpu.py) grouped by stage.
Point docs/README.md at the grouped index. Remove stale gpu.sh (gpu.py
replaced it); gitignore __pycache__/prompts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Master plan tying the AI engine + mission layer + model + UI/UX + tuning
levers. Answers: layering (trained-stable vs mission-volatile -> mission
changes need NO retrain), the model (27B/52GB BF16 or ~16GB Q4, on the nyc2
volume+HF, CoT-thinking, generator accurate / classifier needs clean-data
LoRA), GPU-vs-CPU (GPU for batch+teacher, distill small for CPU+Q4 production),
the UI gaps (Mission Control, teach-loop wiring, tuning/interpretability
surface, eval dashboard, GPU buttons -- atop the existing ModelView/VoiceView/
AutopilotView/orchestrator scaffolds), and the levers (mission/canon/prompt/
temp/taxonomy/LoRA + the CoT trace as the explainability output).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
scripts/seed-sim.mjs (npm run seed:sim) drives POST /internal/inbound
exactly as macsync would, with a varied realistic batch (every classifier
bucket, booking triads, multi-message threads, a gift-card scam, US/UK/MX
markets). Lights up 13/16 operator-PWA views with real backend-derived
data so the UI is exercisable without the live mesh — verified in Chrome
(Triage: 19 prospects + funnel; Outbox: 26 draft tasks; Reports funnel).
docs/THREE_LANES_STATUS.md captures the proof: Lane 1 (backend+MCP) PROVEN
end-to-end, Lane 2 (UI) SIMULATED, Lane 3 (AI orchestrator MCP) DESIGNED,
plus ranked blockers — incl. a safety-critical classifier gap (gift-card/
BTC scam tagged logistics/qualified) that must be fixed before any GO mode.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the third prospector interface: an AI-facing streaming orchestrator MCP
that sits above the raw mcp-prospector adapter and alongside the operator PWA.
It ticks the system, reports status, detects items needing a human, raises
dedup'd nudges, and drives the GO/PAUSE/AWAY kill-switch — but never sends
(every send stays behind Gate-2 + the human_owned floor).
- @packages/mcp-orchestrator: package.json + tsconfig + src/{index,client,
nudges,types}.ts. Six tools (orchestrate_tick, status_report, list_nudges,
ack_nudge, set_mode, drive_loop) wired to the real REST surface; detection/
loop logic left as documented PENDING stubs. Typechecks + builds clean.
- docs/features/ai-orchestrator.md: responsibilities, tool surface, streaming/
nudge loop, nudge rules mapped to verified live endpoints, reuse + safety,
open decisions.
- register the package in the root workspaces.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bake-off harness in src/eval/ with Claude as offline labeler/judge/advisor
(never in the serving loop). Per-role scoring (classifier F1, generator
refusal+voice+policy+85% gate, orchestrator tool-call), replay harness to
fix Executor cycle-1's no-batch-replay blocker, researched candidate
roster (de-refused instruct base + Quinn-voice LoRA over heavy RP
fine-tunes). Reuses outcomes.jsonl/gold-turnpairs/RUNNER-POLICY.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PLAN.md belongs at the repo root as the active build roadmap, not nested under
docs/prototype/. Fix its internal links to resolve from root; point the prototype
README and app README at the new location.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
View-by-view map of the 16 prototype views to their src/ backend module and
web/ component, with status (exists/extend/new), the 6 backend gaps (Stream,
Bookings, Backfill cohorts, Voice alignment, Dashboard, Autopilot), and a P0–P3
phasing. Grounded against the actual src/ modules and web/src/views.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Self-contained, hash-routed Design Component fusing the per-view designs/
mockups into one navigable app. Adds the two previously-blank routes
(Voice alignment, Backfill) and a Stream empty-state; all 16 views verified
interactive with zero console errors.
- Prospector.html self-unpacking bundle (zero deps) — open this
- Prospector.dc.html editable <x-dc> source + runtime files
- BREAKDOWN.md view <-> builder <-> data decomposition map
- README.md structure, run/edit, re-bundle notes
- docs/README.md link from the docs hub
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Thesis: enrich 10K+ history into per-turn {read, move, outcome, source}
records before training. Map the two producers (matcher=classify+retrieve,
agent=generate) to data routing; distill agent wins into the matcher
library as the cost/quality shortcut. LoRA per role on a transient
training droplet; multi-LoRA serving on the single inference droplet;
eval-gated build flip. Classifier first, generator second, orchestrator
never trained.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The prospector extraction is now the precedent for finances + marketing. Added pointer to the new high-level navigation hub (applications, packages, platforms).
Distinguish three AI roles across two tiers: the orchestrator/chat agent
(Tier A, control-surface CLIENT, user-facing, presence-warmed) vs the
classifier + message-generator (Tier B, pipeline components the app CALLS,
queue-warmed). Plane-3 autonomy agent = same orchestrator, event-driven
entry point. Fix warm-up triggers to be role-specific.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Presence-driven auto-warm (confirm toast), live uptime cost meter,
pause=teardown to stop billing, GPU policy moved to settings config.
Corrects the cost model: DO bills for droplet existence, not inference.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Three control planes (operation/observation/autonomy) + governance, OSS
model end to end. Sequences parity+observability -> governance -> autonomy.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update the unified definition + backend index to reflect the buildout:
- PROSPECTOR.md §3: Queue is now a typed-task console; add Hosts (GPU
fleet); Reports covers the 4 contracted reports (graph/intros/
marketplace); Control gains the peer registry. §5: model-boss/DO GPU
enrich path + peer-exchange protocol. Designs now 10 (PWA-only).
- src/README.md: module rows for tasks/providers/intros/marketplace/
peers/gpu; entities + migrations 0001-0012; UI feature list refresh.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Remove all Swift/legacy artifacts — no native app, no swift-react UI, no
tech debt. The Chrome PWA (web/) on the NestJS backend (src/) + MCP server
is the sole way forward.
Removed:
- @packages/prospector-client, @packages/prospector-ui (Swift packages)
- Sources/ (QuinnProspector, QuinnProspectorCore), Config/, project.yml,
QuinnProspector.xcodeproj, Resources/
- PLAN.md (stale my/-port plan, superseded)
Rewired:
- .forgejo/workflows/ci.yml → Node CI (npm ci → typecheck/test/build for
backend + web + MCP) instead of Swift build/test
- .gitignore → drop .build/, *.xcodeproj/
Unified definition:
- docs/PROSPECTOR.md — new single source of truth (architecture, surfaces,
invariants, dependencies, build/deploy)
- README.md, CLAUDE.md, docs/README.md, src/README.md → PWA-forward,
point at docs/PROSPECTOR.md, no Swift/legacy references
designs/ kept intact as the authoritative UI/behavior spec.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codify project standards in docs/STANDARDS.md (feature-sliced NestJS modules,
pure-logic/IO split, reuse-don't-reimplement, co-located Vitest, 300/500 LOC
caps, README-per-feature). Add src/README.md as the module index. Point CLAUDE.md
at both. src/markets/ is the reference module.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reconcile the strategic docs with what's actually built (the docs still claimed
the app lived in the platform my/ feature and led with a 10-phase my/-port plan):
- README: seven wired views incl. Markets, the /prospector/* endpoint each uses,
the two distinct "market" notions (calling-code vs tour-stop), open goals.
- CLAUDE.md: primary deliverable + implementation location now point to web/ +
src/ here; my/ SSO surface reframed as a future goal; current-focus refreshed.
- PLAN.md: prepend a "Reality Update" banner that supersedes the my/-port phases
(kept below as historical context); fix the stale header lines.
- docs/README.md: point at the reality + the PLAN banner.
No .project directory exists in this repo — nothing to dissolve. Backend 160
tests green, web tsc clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The full coworker-replacement app is built in web/ (served by this repo's
NestJS backend), not the platform my/ surface. Document the six views and the
/prospector/* endpoints each uses, the shared-audit/human_owned/Life-opt-in
guarantees, and dev/build commands. Keep the platform my/ SSO vision as-is.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace manual doctl DB creation with the declarative IaC path: terraform apply
creates people+prospector DBs+users on the managed cluster; pull DB passwords +
host from terraform output into the service .envs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Probe found no local PG: droplet pgbouncer fronts a DO Managed cluster
(private-lilith-store-pg, holds live quinn). people+prospector are new DBs on
that cluster (additive); services connect direct to :25060 over SSL. Node 20
already installed on lime.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
black homelan is gone; prod target is the DO backend droplet (lilith-store-backend,
209.38.51.98 / wg 10.9.0.5) where mac-sync-server already runs. Fix black:2546x
DB-host refs in comments/migrations. GPU is on-demand + queue-driven: hold warm
while backlog is deep, release on idle grace (not strictly per-tick).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document the draft engine direction: OSS uncensored models on DO GPU droplets
(reuse LPv2 provisioning, no model-boss), engine id 'do-gpu-<model>_<build>', and
pastebin → CoT workflow builder (versioned reasoning chains the model runs;
pastebin canon as injected context; corrections as per-build tuning data). Rename
the MVP static-render engine value 'pastebin' -> 'template' (pastebin is now
context, not the engine).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Restructure to match the @mac-sync sister-app convention + operator direction:
- Backend service -> repo root (root package = the app); engine is CORE source,
now src/engine/ (not a separate package); imports rewritten to relative.
- MCP server -> @packages/mcp-prospector/ (agent interface; thin REST wrapper so
the coworker can trial this backend and fall back to legacy quinn-prospector).
- web/ stays a top-level surface.
- draft_engine default 'claude:sonnet' -> 'pastebin': the whole point is to run
OFF hosted Claude (which refuses adult-services copy) on OSS-uncensored LLMs on
raw GPU droplets; generative target is 'gpu:<model>'. Reuse LPv2's existing DO
GPU provisioning, not model-boss.
- docs/features/mcp.md: how the MCP works + the coworker graceful-switch protocol.
- .gitignore: ignore Swift .build/.
Verified: tsc clean, 101 tests (92 engine + 9 runner), app boots from root,
mcp-prospector builds + boots, smoke tests green (scam held, settings=pastebin).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>