Canon

Ideas and architecture

Canon is the idea POV: principles, boundaries, architecture decisions, vocabulary, and the bigger picture that nearby behaviours and implementations must stay connected to.

Core canon

Canon

Collaborative prose as Y.Text — and what stays Y.Map

Open

Collaborative prose as Y.Text — and what stays Y.Map CareerVector's collaboration model assumes more than one author per field at any moment. A friend rephrases a bullet while the user keeps typing the next one; a men...

Canon

Compute Backend — one engine, many hosts, no drift

Open

Compute Backend — one engine, many hosts, no drift CareerVector splits "what to execute" from "where to execute it." The engine is one TypeScript module tree under lib/domain/src/pipeline/stages/; the backends are the...

Canon

JobCache participant UI

Open

JobCache participant UI The scraping pill is a compact status and consent control in the right side of CareerVector's workspace action band. It projects a participant owned by the application root. Mounting, opening,...

Canon

LLM Cascade — one resolver for every model and service call

Open

LLM Cascade — one resolver for every model and service call The cascade is the single way every model or service call in CareerVector picks a provider, a model, and an API key. Importing a provider SDK directly, readi...

Canon

No User Accounts — workspace as the collaboration unit

Open

No User Accounts — workspace as the collaboration unit CareerVector deliberately has zero authentication. There is no login, no registration, no profile, no admin role, and no per user permission. This is a product de...

Canon

Op Catalog — typed writes, one broker contract

Open

Op Catalog — typed writes, one broker contract lib/mutations/src/opsCatalog.ts is the single source of truth for every write CareerVector can make to a workspace. Anything that mutates Yjs state flows through it: the...

Canon

Per-job pipeline machine, unified editor, per-language quarry

Open

Per job pipeline machine, unified editor, per language quarry Per job pipeline machine ui/src/lib/pipeline.svelte.ts is the browser backend of the process request queue. It runs one xstate machine per job through five...

Canon

Quarry Pattern — content pool, three mutability tiers, deterministic identity

Open

Quarry Pattern — content pool, three mutability tiers, deterministic identity The quarry pattern is CareerVector's core document generation idea. The user maintains a single content pool (the "quarry") containing ever...

Canon

RADAR — automated job discovery into the workspace

Open

RADAR — automated job discovery into the workspace RADAR is the entry point for jobs that the user did not paste manually and that did not come from MCP or a collaborator. It is one of the pipeline stages defined in l...

Canon

Read-only mirror and workspace-intelligence projection

Open

Read only mirror and workspace intelligence projection Mirror by URL pattern The /view/[wsId]/... route tree is the sanctioned read only view of a workspace. It is not a fork, not a snapshot, not a separate workspace...

Canon

Realtime resilience — many transports, one leader, cached snapshots

Open

Realtime resilience — many transports, one leader, cached snapshots CareerVector's realtime channel is the path collaboration takes. It must survive vendor incidents (CF or Deno regional outages), corporate firewalls,...

Canon

Scoring & Views — three input categories, rule-based groups, immutable order

Open

Scoring & Views — three input categories, rule based groups, immutable order The dashboard's two main decision aids are scoring and views. Both are designed so users can rank and group hundreds of jobs without the sys...

Canon

Testing architecture — story-driven, local-first, deployed-target bounded

Open

Testing architecture — story driven, local first, deployed target bounded CareerVector's testing strategy is a stack, not a single tool. Each lane exists because a kind of mistake would otherwise reach production. The...

Canon

Tiered telemetry — RED, YELLOW, diagnostic

Open

Tiered telemetry — RED, YELLOW, diagnostic CareerVector has no user accounts, so it cannot beg permission on signup or attach a user level consent record. Telemetry is workspace scoped and graduated by impact so the d...

Canon

Typst Client Render — render economics, font system, design canon

Open

Typst Client Render — render economics, font system, design canon Document compilation happens in the browser, never on the server. The Typst WASM compiler + renderer (~25 MB) is lazy loaded from a CDN on first use; f...

Canon

Work Queue + Singleflight — three concurrency layers, one stack

Open

Work Queue + Singleflight — three concurrency layers, one stack CareerVector coordinates concurrent work at three different granularities. They are layers of the same stack, not alternatives. Confusing them is the fas...

Principles and architecture

JobCache — Wiki

Adapter Code Inventory

Open

Adapter Code Inventory Current state: all shipped ingest sources are direct Adapters that emit the canonical Observation shape. There is no second submitted output shape and no portal wrapper layer in the ingest tree....

missing idea node
JobCache — Wiki

Adapter Contract

Open

Adapter Contract An Adapter is a language neutral dock contract. It names how JobCache hands bounded work to source specific code and how an Observation comes back. The implementation behind the dock is a blackbox. It...

Architecture

Adapter Dock

Open

Adapter Dock What this is The Adapter dock is the language neutral Rust contract every job source observer plugs into. One implementation per source (or per source produced by a multi tenant family factory) discovers...

JobCache — Wiki

Adapter Slice Plan

Open

Adapter Slice Plan Rule for every slice: it ships one coherent Adapter path, validates through ObservationSchema, and deletes any same source code it replaces. No parallel submitted shapes and no compatibility layer l...

missing idea node
JobCache — Wiki

Admin Gate Auth

Open

Admin Gate Auth jobcache ops api, jobcache ops mcp, and ops.jobcache.corbet.ch share one admin secret. The gate code lives in the ops API; the MCP and UI cookies fan out to that gate, so there is only one secret to ro...

Architecture

Analytics Layers

Open

Analytics Layers This note fixes vocabulary around analytics surfaces. The product can ship without the user facing analytics tab, but the names must stay clear so later work does not mix product analytics, platform i...

Studies

Architectures — Delivering Cockpit Data

Open

Architectures — Delivering Cockpit Data The cockpit must compose three streams of evidence: 1. Snapshot — point in time aggregates (queue depth, counts, latency of last probe). Cheap to compute, expensive if computed...

JobCache — Wiki

Broker Flow

Open

Broker Flow HISTORICAL (broker lane abandoned). The active transport is the orchestrator: devices POST /lease for targets (including discover targets), scrape, deposit results to B2, and notify via POST /deposited; di...

Architecture

Browser & Device Compatibility Audit — v2

Open

Browser & Device Compatibility Audit — v2 Audit date: 2026 04 26. Methodology: static code analysis + caniuse style reasoning. No live browser testing. 1. Declared Targets vs Reality No .browserslistrc, no Browserslis...

Architecture

BYOK Encryption — Client-Side Key Protection Design

Open

BYOK Encryption — Client Side Key Protection Design Status: LOCKED. This document records the design, threat model, and phased implementation plan for encrypting BYOK AI provider API keys at rest in D1. Implementation...

Studies

CareerVector — Architecture

Open

CareerVector — Architecture Technical architecture decisions that flow from the business model in studies/business model/README.md. Covers the data model, system surfaces (Browser UI / REST API / MCP), the relationshi...

Architecture

CareerVector — Cloud Infra & Vendor Reference

Open

CareerVector — Cloud Infra & Vendor Reference Canonical reference for which cloud vendor runs what, why, and the hard rules that keep the architecture sustainable. Status: live spec. If reality and this doc disagree,...

Architecture

CareerVector / JobCache Resource Map

Open

CareerVector / JobCache Resource Map Status: repo derived inventory, last reviewed 2026 05 30. This is the operator map for active and near active infrastructure. It is not a secret inventory and not a full provider a...

Architecture

CareerVector Analytics Event Catalog

Open

CareerVector Analytics Event Catalog Status: CANONICAL. This document is the contract for all telemetry emitted by CareerVector. Every event type must appear here before shipping. Adding a new event without updating t...

Architecture

CareerVector product thesis

Open

CareerVector product thesis CareerVector is a private career intelligence workspace connected to a collectively maintained, real time model of the job market. It finds opportunities, explains fit and builds truthful a...

Architecture

Cloudflare Workers Limits Audit

Open

Cloudflare Workers Limits Audit Sources reviewed: relay/cf/src/workspace doc.ts — Durable Object broker api/src/routers/ .ts — REST handlers (Hono workers; workspaces.ts, misc.ts, llm.ts, telemetry.ts, p2p.ts, interna...

JobCache — Wiki

CockroachDB — Hot Store + CF Worker Access

Open

CockroachDB — Hot Store + CF Worker Access SUPERSEDED (2026 06 08). The canonical hot store is now CrateDB Cloud CRFREE (West Europe, Azure; pg wire only — no JSONB/txns/FK; dialect contract in jobcache/shared/src/pg...

Architecture

Control plane — the thin orchestrator

Open

Control plane — the thin orchestrator The principle: the genius is in the math, not in fat workers. The control plane moves data and runs cheap math. It never inspects content, never validates payloads, never keeps a...

Architecture

CVL Open Questions

Open

CVL Open Questions Status: historical decision companion This page keeps the anchors referenced by Tree of Choices and records which questions are still live. It is intentionally short: resolved items belong in the de...

Architecture

Desktop App Architecture

Open

Desktop App Architecture Status: Phase 1 Linux MVP fully wired. The Tauri v2 shell ships, 88 adapter families are linked into the router (Waves 0 3 complete), TauriEnv::fetch rendered is implemented via a hidden Tauri...

JobCache — Wiki

Desktop Edge Runtime Proposal

Open

Desktop Edge Runtime Proposal Jobcache should treat the desktop app as an optional edge runtime, not as a second product. The user visible CareerVector app stays Svelte/TypeScript; the desktop build adds a native Taur...

JobCache — Wiki

Device Contract

Open

Device Contract This document defines the boundary for distributed jobcache devices. It does not define adapter implementation. Source specific fetch and parse code can be built by another agent or team as long as it...

JobCache — Wiki

Device QA

Open

Device QA Distributed device execution needs QA from day zero because defects here can pollute shared ad and role state. QA treats the device, session, task, lease, Observation, current ad payload cells, and global de...

JobCache — Wiki

Env Fetch Router — Cheapest-First Cascade

Open

Env Fetch Router — Cheapest First Cascade JobCache has to handle a mixed source landscape: friendly direct pages, JS rendered boards, and hostile detection heavy boards. Paying browser backed rates for an HTML only pa...

Architecture

Fleet routing — the tensor as navigator (M6)

Open

Fleet routing — the tensor as navigator Companion to [[CONTROL PLANE]] (orchestrator internals: queue, lease, deposit, ingest) and [[SCRAPER FLEET]] (host classes + rebuild requirements). This doc is the ROUTING desig...

JobCache — Wiki

Free Container Provider Inventory

Open

Free Container Provider Inventory This page tracks external capacity for JobCache Devices. A provider is useful only if it can run brokered work without receiving Cockroach, B2, R2, S3, or provider credentials. Every...

JobCache — Wiki

Free-Tier Infrastructure

Open

Free Tier Infrastructure JobCache is a peer product, not a hosted SaaS. It pays for itself by operating inside the free tier of every vendor it uses. That constraint shapes a lot of decisions that look strange in isol...

JobCache — Wiki

Glossary

Open

Glossary Use these words consistently. Each word should mean one thing. Source Catalog family: reusable job site type, such as Workday, Greenhouse, jobs.ch, RSS, or custom HTML. source: concrete job site, board, compa...

Architecture

Graph Metadata Editor

Open

Graph Metadata Editor Status: design contract. The editor works on graph claims, not raw file formats. A human or agent edits the same conceptual object everywhere: The backing writer decides whether the change eventu...

JobCache — Wiki

Ingest Architecture Draft

Open

Ingest Architecture Draft JobCache is the top down ingest trigger for CareerVector's job knowledge graph. It should learn aggressively from proven Swiss job aggregation systems, especially their scraping process and s...

Architecture

JobCache ↔ CareerVector relationship

Open

JobCache ↔ CareerVector relationship Status (2026 08 17): both edge installations and the relevant Core boundaries exist in code. CareerVector is the first deployed installation. JobCache App's Worker/D1/MCP and the n...

Architecture

JobCache Architecture

Open

JobCache Architecture Status (2026 08 18): the API first architecture is implemented, migrated and live. JobCache Core's corpus/search facade and participant lifecycle run from jobcache/interface/ on a protected Alway...

Architecture

JobCache Dashboard — product vision (STUB)

Open

JobCache Dashboard — product vision (STUB) Status: STUB. This page records the agreed direction and intentionally does NOT enumerate the dashboard's tabs. The tab set is an open product decision (task 72) and must be...

JobCache — Wiki

JobCache host routing

Open

JobCache host routing JobCache no longer multiplexes its public API, MCP and UI through one Render process. The public product perspectives are separate Worker peers; Core is a protected origin behind the App boundary...

Architecture

JobCache ingestion and CareerVector consumer AI

Open

JobCache ingestion and CareerVector consumer AI These are two independent systems that share Sporewright's mathematics. They do not share a tensor, queue, identity, feedback log, or persistence boundary. JobCache rout...

Architecture

JobCache perspectives — hosts, packages and deployment

Open

JobCache perspectives — hosts, packages and deployment JobCache is one product with an observer private App zone and a shared Core zone. App API, MCP, UI, status, ops, QA and wiki are peer perspectives; “Core” is a co...

JobCache — Wiki

Jobich Gap Analysis

Open

Jobich Gap Analysis This is a behavioural study, not a code reference. Jobich is the proven Swiss job aggregation reference; we have no licence to its code. Every observation below is described in our vocabulary (Adap...

missing idea node
Architecture

Local AI pill

Open

Local AI pill Product intent Local AI should become available on as many capable devices as possible, but a multi gigabyte model must never download without informed consent. The product therefore separates instant va...

JobCache — Wiki

Observability — Push to Vendors, Pull /metrics for Cockpit

Open

Observability — Push to Vendors, Pull /metrics for Cockpit JobCache has two distinct observability paths. One pushes structured logs and traces to vendor dashboards (Sentry, Grafana Cloud) for incident forensics. The...

JobCache — Wiki

Observation

Open

Observation JobCache receives @cv/jobcache Observation envelopes from top down devices and safe bottom up CareerVector imports. Both paths emit the same ad id centered shape; workspace jobs remain private. There is on...

JobCache — Wiki

Operator Actions — Append-Only Audit

Open

Operator Actions — Append Only Audit Every mutating endpoint in jobcache ops api writes a row to operator actions before dispatching the actual upstream call. The MCP wraps the same endpoints, so MCP driven recovery i...

Architecture

Privacy posture and data minimization

Open

Privacy posture and data minimization Status: normative engineering policy with both product edge lifecycle implementations present in code. Production activation still requires the additive D1/CrateDB migrations, sco...

Architecture

Private product edges / JobCache Core boundary

Open

Private product edges / JobCache Core boundary Status: implemented, migrated and live at both product edges and the JobCache Core API. The App Worker/D1, scoped credentials, scheduled erasure drain and public API/MCP...

Architecture

Product engine — shared mechanism, separate products

Open

Product engine — shared mechanism, separate products Aligned 2026 08 17. CareerVector and JobCache are two product domains. They reuse code where the mechanism is genuinely the same; they do not collapse their meaning...

JobCache — Wiki

QA Surfaces

Open

QA Surfaces JobCache's QA platform follows the same three worker shape used everywhere else in the repo: API for state, MCP for agents, UI for humans. The shape is intentional — every product (CV, JobCache, future one...

Architecture

RADAR Architecture

Open

RADAR Architecture RADAR is the CareerVector to JobCache feature slice: how a JobCache role reaches a person and how purpose approved feedback returns. For compactness this diagram combines JobCache App and JobCache C...

Architecture

REALTIME ARCHITECTURE V3 — Multi-Pathway, Actor-Aware, Cost-Bounded

Open

REALTIME ARCHITECTURE V3 — Multi Pathway, Actor Aware, Cost Bounded Status: deployed — the waves landed on main (cvl node tree direct merged 2026 05 16). Supersedes the hot path sections of the retired REALTIME ARCHIT...

Architecture

Realtime Broker Design (Yjs over Durable Object)

Open

⚠️ HISTORICAL DESIGN. The body below describes the pre byte relay broker design (op validation at ingest, DO SQLite persistence, D1 cold backup). It was superseded by the live thin byte relay: the WorkspaceDoc DO (rel...

JobCache — Wiki

Rust + WASM Adapter Architecture

Open

Rust + WASM Adapter Architecture End state proposal for the JobCache Adapter dock. Written for Codex review — Codex owns the contract crate, WIT source, host shim, and build pipeline. Adapter implementer (me) owns the...

JobCache — Wiki

Scrape Event Log

Open

Scrape Event Log scrape events is JobCache's append only operational pulse. Device runtimes and trusted operator owned harnesses report one row per leased scrape attempt through the control plane; the ops API reads fr...

Architecture

Scraper Fleet — requirements + build spec

Open

Scraper Fleet The collection side of JobCache. [[CONTROL PLANE]] is the orchestrator internals, [[FLEET ROUTING]] is the M2 tensor routing design (locked 2026 07 02: archetype options, trust mechanics, budget λ, occup...

Architecture

Server framework — Hono for backend perspectives

Open

Server framework — Hono for backend perspectives Decision date: 2026 05 16 Decision owner: Julian, after architecture discussion Status: Adopted; migration in progress TL;DR Pure REST and pure RPC perspectives (api, m...

JobCache — Wiki

Source Coverage Catalog

Open

Source Coverage Catalog Canonical per family source list for the JobCache adapter rollout. Every entry maps to one row in a Rust adapter crate's SOURCES const (or a single source Adapter's hardcoded constants). Status...

Architecture

System Architecture

Open

System Architecture There are two products and three privacy/runtime zones . JobCache App is the observer facing product edge. JobCache Core is JobCache's shared corpus, search, recommendation and market intelligence...

Architecture

The Shared Seam Packages

Open

The Shared Seam Packages Status (2026 08 17): @cv/corpus shared is integrated by CareerVector, JobCache Core and the new JobCache App. Pure participant/privacy/search/snapshot/fact/delivery/lifecycle contracts are sha...

Architecture

Tier-2 Headless Fleet — implementation spec (#68)

Open

Tier 2 Headless Fleet — implementation spec ( 68) Generated 2026 06 08 by the tier2 headless fleet workflow. The buildable plan; Browserbase OUT, fully self hosted. Recommended free 512MB target Oracle Cloud Always Fr...

Architecture

Tier-2 Headless Ingestion (#68)

Open

Tier 2 Headless Ingestion ( 68) Decision (2026 06 07): JS rendered + hostile boards are scraped by a self hosted fleet of Playwright pods on k3s , called by a lean Rust device (thin client). No managed/external headle...

Architecture

UI Taxonomy

Open

UI Taxonomy CareerVector's shared frontend components live in three lib/ packages, split by audience and quality bar. The split keeps product polish out of admin surfaces (where the cost would be unjustified) and keep...

Architecture

Vocabulary

Open

Vocabulary Canonical definitions for terms that appear in code, UI copy, agent prompts, and operator chatter. The goal is to prevent drift: if you read one of these words in a code comment, in a Svelte template, in an...

Architecture

Wiki App Shape

Open

Wiki App Shape The wiki perspective (wiki.careervector.corbet.ch) is one site presenting the same knowledge mesh through six primary entry points. The shape of the app — its tabs, its index, its host — is intentional,...

Architecture

Wiki Knowledge Mesh

Open

Wiki Knowledge Mesh The Wiki should be one mesh, not one wiki per product. QA and Ops stay separate as products and deployments. A CareerVector QA queue is not a JobCache QA queue. A CareerVector Ops anomaly is not a...

Product vision and studies

Studies

Architectures — Delivering Cockpit Data

Open

Architectures — Delivering Cockpit Data The cockpit must compose three streams of evidence: 1. Snapshot — point in time aggregates (queue depth, counts, latency of last probe). Cheap to compute, expensive if computed...

Studies

CareerVector — Architecture

Open

CareerVector — Architecture Technical architecture decisions that flow from the business model in studies/business model/README.md. Covers the data model, system surfaces (Browser UI / REST API / MCP), the relationshi...

Studies

CareerVector business model

Open

CareerVector business model The decision CareerVector is free, permanently. It must never cost its users a cent. This is not a temporary launch offer, a free tier or a funnel into a paid applicant product. CareerVecto...

Studies

CareerVector Cockpit — Concrete Views

Open

CareerVector Cockpit — Concrete Views This file describes the cockpit views for ops.careervector.corbet.ch (and the projection that lands on status.careervector.corbet.ch), assuming the recommended hybrid architecture...

Studies

Cloudflare AI Gateway fit for CareerVector

Open

Cloudflare AI Gateway fit for CareerVector Status: research memo, 2026 05 19. This note evaluates Cloudflare AI Gateway against CareerVector's AI model: browser/client BYOK calls where possible, server key calls only...

Studies

DevOps Wiki Product Vision

Open

DevOps Wiki Product Vision Status: draft product vision Date: 2026 05 19 The wiki should become the glue between product vision, implementation, quality, and operations. It is not just a document site. It is the share...

Architecture

JobCache Dashboard — product vision (STUB)

Open

JobCache Dashboard — product vision (STUB) Status: STUB. This page records the agreed direction and intentionally does NOT enumerate the dashboard's tabs. The tab set is an open product decision (task 72) and must be...

Studies

JobCache Ops — Concrete Views

Open

JobCache Ops — Concrete Views JobCache is CareerVector's sister product, sharing the role → ad → workspace job fact tree (CLAUDE.md sibling repo notes; jobcache repo .agent/AGENT.md). Today it focuses solely on extrac...

Studies

Naming the Corpus

Open

Naming the Corpus A commercial naming study for the CareerVector job postings corpus product 2026 05 08 Executive summary The product is a continuously scraped, deduplicated, normalized, embedded corpus of job posting...

Studies

Ops & Status v1 Product Brief

Open

Ops & Status v1 Product Brief This brief captures the first implementation target for the CareerVector operations cockpit after the auth spike was set aside. It is the product contract for the first useful version, no...

Studies

Ops Vendor Inventory Sweep — 2026-05-19

Open

Ops Vendor Inventory Sweep — 2026 05 19 Status: implementation note for the ops cockpit inventory sprint. This sweep looked at three sources without copying secret values: Runtime code and wrangler.toml bindings. Exis...

Studies

Telemetry Tiers — Green / Yellow / Red

Open

Telemetry Tiers — Green / Yellow / Red This note formalizes the consent model the cockpit relies on. It builds on the tier names already in the code (ANALYTICS EVENT CATALOG.md) but extends them from "build flag bundl...

Stories and onboarding

CareerVector AI Onboarding

CareerVector AI Onboarding

Open

CareerVector AI Onboarding This folder is durable onboarding context for AI agents working on this checkout. It is intentionally short, current, and more stable than temporary task handoff notes. Start Here 1. Read th...

Stories

CareerVector Efficiency Stories

Open

CareerVector Efficiency Stories This catalog covers cost, quota, latency, and operational efficiency. User stories say what the user can accomplish. System stories say what platform guarantees make that possible. Effi...

CareerVector AI Onboarding

CareerVector Repository Operating Contract

Open

CareerVector Repository Operating Contract This document is the orientation sheet a new contributor (human or agent) should read after CLAUDE.md. It explains how the repository is laid out, which files are load bearin...

Stories

CareerVector System Stories

Open

CareerVector System Stories This catalog covers stories the system must guarantee so user stories remain true. User stories describe visible applicant and collaborator goals. System stories describe platform behavior,...

Stories

CareerVector User Stories

Open

CareerVector User Stories This catalog enumerates the user stories CareerVector needs to guarantee semantically. It is the input to the testing architecture, not the architecture itself. Each story is written in user...

CareerVector AI Onboarding

Current Architecture

Open

Current Architecture This file describes the careervector cvl checkout as of 2026 05 12. Stable Architecture CareerVector is a SvelteKit app on Cloudflare Workers with D1/R2, a realtime Durable Object relay, MCP worke...

CareerVector AI Onboarding

Product North Star

Open

Product North Star The canonical product thesis, including the role of JobCache, AI and the open strategic questions, is architecture/PRODUCT THESIS.md. This page is the concise contributor contract. CareerVector is a...