ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
캘리포니아 커뮤니티 컬리지 사전 학습 대시보드용 실시간 크레딧 – MAP·CPL 경로·주 전체 분석 제공
Live Credit for Prior Learning dashboards for the California Community Colleges — MAP-platform articulations, CPL pathways, and statewide analytics from the CPL Initiative.
교육JavaScript · PLpgSQLGitHub @CPL-Initiative온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기CPL Initiative Work Plan Tracker Dashboard
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
The CPL Project Tracker, renamed. The masthead (cobi_brand.js) is a single row: the seal and the COBI wordmark with its Alpha chip, the site switcher, the "Where To?" search, and a utility cluster carrying your access and the ℹ About menu — with a quiet line beneath saying COBI is in alpha and what it answers from. (The Kobe homage — a rotating Mamba Mentality subtitle and an 8→24 wink — was retired 2026-06-22; the gold CPL superscript and the per-site org tag followed on 2026-09-04.)README 전문 보기 ↗
The CPL Project Tracker, renamed. The masthead (
cobi_brand.js) is a single row: the seal and the COBI wordmark with its Alpha chip, the site switcher, the "Where To?" search, and a utility cluster carrying your access and the ℹ About menu — with a quiet line beneath saying COBI is in alpha and what it answers from. (The Kobe homage — a rotating Mamba Mentality subtitle and an 8→24 wink — was retired 2026-06-22; the gold CPL superscript and the per-site org tag followed on 2026-09-04.)
A live dashboard, data pipeline, and curation workbench for the California Community Colleges Credit for Prior Learning Initiative — tracking statewide CPL adoption, articulation, and project work across all 116 California Community Colleges (CCC).
Live site: https://cpl-initiative.github.io/cpl-project-tracker/
Each morning the dashboard opens with First Light — a once-a-day greeting featuring a fresh public-domain California plein air painting each day (revealed grayscale → full color) with the artist's story, an optional read-aloud, and an anonymous "thought for the day" reflection box. Opt-out respected; reopen anytime via the "Today's painting" chip in the header.
The dashboard combines (a) project-management data for the CPL Initiative itself (workplan, budget, personnel, deliverables) with (b) live statewide CPL metrics scraped daily from the CCCCO MAP CPL Dashboard, plus (c) a synthetic knowledge-base layer that unifies course identities and CPL exhibits (credentials) across colleges so adoption can propagate from one college's articulation decision to the rest of the system.
The whole ecosystem, end-to-end:
kb/coci_minted_memberships.json), a Common Exhibit Reference tab (sister
to CCR — expand a credential for scope/CPL chips, a statewide-or-generated
credit rec, green/orange adopted-vs-potential college badges, the
college-entered exhibit-title variants, and the local courses with units that
articulate to it, an Eligible (units) column (credit waiting to be unlocked
= eligible − transcribed, rolled up from MAP's Exhibit CRs Catalog) and a
Eligible students column, in three views: Needs you (the titles the
nightly procedures run held for a person, the unclassified queue with each
title's pre-filled proposal, credentials with no issuer, and merges to
confirm), Procedures (each rule in plain words, who set it and what it
settled) and Reference (every credential and the industry credentials);
the tab opens on Needs you when the run held titles), a
quick-start natural-language chat widget on the first screen (Claude
API classifies your prompt to one of the 11 tabs and can pre-pop the
destination tab's filters — "review unclassified credentials" lands you
in Common Exhibit Reference with the unclassified-in-MAP queue already
filtered; "apprenticeship initiative" pre-fills the Dashboard search;
"subjects needing review" lands in Common Subjects Reference filtered to
needs-review), a Letters tab embedding the budget-support letter
curator (iframe to budget-support/web/curator.html, passcode-gated),
Sierra AI (a conversational RAG assistant — ask CPL questions
and get streamed answers drawn from the knowledge base, live dashboard
metrics, and 2,300+ statewide exhibits; it talks to the shared cpl-chat
Supabase Edge Function that also powers the live map.rccd.edu widget; she
opens full screen over any tab — from Sierra Training, the Where To? box or
a #chatbot link — and docks in My College, and she replaced the separate
CPL Assistant tab on 2026-10-16),
a Sierra Training tab (team-only: the assistant's improvement loop —
the thumbs-up / thumbs-down feedback queue from both chat surfaces with a
review status, a gap miner over the chat logs surfacing the questions the
knowledge base had no good source for, and the plain-English instructions
Sierra follows on every question — five numbers at the top that filter the
lists they count, editable instructions, and a test question you can put
to Sierra AI over the tab or in My College; round 1 of Sam's redesign,
2026-09-29), a ⚖️ Governance tab (team-only: the decision-rights
register — who decides what, how far each input is trusted, and which cadences
actually run; it measures itself rather than asserting compliance, so a loop
that was decided but never run says so), a MAP Users tab (per-college MAP platform user
counts + role mix publicly; for a signed-in reviewer, the staff roster and a
⚠ No student contact worklist — the colleges whose landing page has no
Primary Contact, which is the address MAP routes a student's CPL request to,
each with a proposed contact drawn from designations that college already
made in MAP, and a Proposed because chip saying which designation it came
from and why the cascade fell to it; a reviewer can override any row with a
curator-set proposal, labeled with who set it and when, and the CSV export
carries both layers separately so it doubles as the correction list to work
through in MAP — nothing here writes to MAP, which has no write API, and
these proposals are deliberately invisible to Sierra, who answers only from
what MAP holds), a 🤝 Noncredit & Learning Partners tab (the noncredit / not-for-credit / adult-school / ROP / high-school-Cx / apprenticeship register — the six modes of Learning Partner CPL, a self-refreshing dormant-statewide-exhibit worklist, and an in-place ✎ Add insight affordance), a 🎓 CPL Pathways tab (audience-facing; a College filter, a Search box and an alphabetical Pathway list, and for a chosen college its My College sections; it also lists each harvested catalog record, Beta draft, laid out by requirement or by term
apprenticeship-to-baccalaureate course maps with CPL check-offs derived
live from the MAP articulation data — Cerritos's Field Ironworker
Supervisor BS (31.5 units of journeyworker CPL) plus Foothill's Dental
Hygiene & Respiratory Care BS views; violet ⊕ adoption-option chips show
where OTHER colleges already articulate a credential, each with a ⚡
Quick Adopt request form; status stages (Discussion Draft / Active /
Tabled) + a print-ready ⬇ PDF extract), an Implementation Funding tab (the DRAFT
CPL funding model as a scenario tool: a selectable 2-year window,
year-specific funding priorities, each card carrying its own Ed. Code
§78093.2(d)(1) outcome — its letter, name, citation and the statute's own
sentence — which is DERIVED from what the priority's metric measures rather
than from its name, and which a curator can override on the card (Year 1 /
Year 2 filter; every metric and description editable, draggable into a
different order, with every section below the metric collapsing behind a
summary that still carries its own figure; outcomes with no campus measure
get their own reported cards, which carry designated activities and a share
of the statewide project allocation — the order is stored as a permutation
beside the config, so a
priority's wording, share, funding factor and strategies all travel with it
and no stored figure moves — and an optional Year 2 mirrors Year 1
switch), one funding total over
all 118 institutions (the one-pool model, adopted 2026-08-31: $150K base
to $400K cap on the combined credit + noncredit award; the three
noncredit-only campuses — NOCE / SD Continuing Ed / Calbright — are ordinary
rows qualifying by origination), one row per institution led by its
minimum-conditions pie and Veteran Star and reading Max and Curr
funding by lane and in total (the College Dashboard Sam locked on
2026-09-28: Curr is the funding qualifying so far, and no reserve figure
shows), its max award decomposing into credit and noncredit shares,
per-priority drill-ins opening on the Minimum Conditions line, district
rollups, and one statewide row under a frozen header (measured pins, no lazy loading) —
the table is the first section after the introduction, and every other
section is folded on open (per visit, since 2026-09-02) —
with the project card's named projects folded in live from the Budget
table — and layered editing — anonymous edits are a private
per-browser sandbox, while a signed-in reviewer saves the base model
everyone opens to (Supabase-backed) — plus live per-priority actuals from
the daily MAP pull (a measure that has yet to arrive reads TBA and counts
$0, and the noncredit shares count $0 until their feeds report)), a
TMC Builder tab (align a college's local
courses to an ASCCC Transfer Model Curriculum / ADT — pick a college + a TMC
and the right column auto-fills the local course already carrying each
slot's C-ID; all 45 official TMCs, a GE Breadth companion for the full ADT,
curator notes, and a per-college approved-ADT overlay sourced from the
COCI program export so each TMC shows whether that college already has the
ADT — ✓ Active (live in the catalog) / ✓ Approved (pending activation) /
⏳ in progress / ◐ teach-out — plus the statewide established-college count;
the templates carry per-slot acceptance metadata toward an in-tool ADT
review/compliance engine), a Knowledge Base tab (a sign-in-gated
portal over the public CPL Knowledge Base — read the curated docs, and
compose a new doc with optional file attachments + Claude polish, then
commit it to GitHub as yourself), a CPL News tab (an auto-curated CPL
news feed — California-first, then national, plus adjacent systems
(Career Passport, CA Master Plan, workforce/upskilling) and CA budget
items; harvested daily from free sources + a suggest-a-story queue and
Claude-triaged, read live so it never goes stale), a My College tab
(off the menu since 2026-10-22: its sections now open inside CPL Pathways' college view, and #college-briefing still opens it; open to colleges and the public since 2026-09-17, reading published
copies with small student counts removed before publication, while the
protected tables behind it keep their protection: one page, not 123 — pick a college and get where it stands
against the goals, what its already-articulated-and-waiting credit actually
consists of, its CPL funding (the seed grant, the implementation max award,
the three minimum conditions with its own state, the funding its current
outcomes demonstrate, and each priority's target),
its tier with the missing criteria named, who MAP has on file for it, what
occupations in its region it could already give credit for — matched against
its own catalog, with the accuracy disclosed — and a
Sierra AI box with questions computed from that college's own figures, which
fills the screen while she answers), and
a Pipeline progress board.excel_to_dashboard.py regenerates the dashboard HTML, exports the
client-side data files, builds Word reports, and pushes back to main
so GitHub Pages re-publishes.kb/) — synthetic identity layers above the raw
MAP exhibit + course data: unified credential titles (so "First Aid /
AHA / American Heart Assoc. First Aid" all collapse to one card),
unified course identities using a CCN-aligned surrogate scheme
(CCN-ID > C-ID > M-ID), with a Phase B fold that consolidates M-IDs
under official C-ID/CCN anchors when the underlying members agree,
a statewide c-id.net articulation router (per-college official
approvals place 8,377 member courses under their C-ID descriptor rows —
no titles consulted), a description-evidence worklist lane that
surfaces same-course candidates among the M-IDs no official source
covers (TF-IDF over catalog descriptions, guard-suite gated, always
curator-confirmed), and a title-evidence worklist lane that does the
same across near-duplicate titles — including the ~54k single-college
stand-alones — with no units gate, because externally standardized
curricula (BAR smog, POST academy modules) pack the same spec at
different unit loads per college. One deliberately strict exception
acts on its own: the twin merge folds M-IDs whose titles contain
the same words AND match on subject, discipline, credit, and units —
every twin carries an alias receipt. The worklist's core same-title
grouping is level-collapsing (Session 57) — "Beginning / Intermediate /
Advanced X" surface as one family — so curators consolidate aggressively
(Title 5 §55050 grants credit for similar learning), always one
confirm at a time. A curated-anchor duplicates lane (2026-09-04)
leads the queue: the May 2026 curated common courses that carry the same
title and discipline as a catalog course, the catalog course proposed as
the survivor, recomputed every build — never merged by a script. The rules in plain language:
docs/ccr_rules_brief.md.#map, but its button left the row on 2026-09-08), Night by default and
Day one control away, a slow turn that stops at the first touch, and drag
and drop on the curve. On a phone (2026-09-09) the control row folds
behind the word Controls and opens as a sheet at the bottom, the legend
starts closed and the map takes 86% of the window; pinch zooms. COBI's header and side menu fold away and
the ☰ at the map's top left brings the menu back, while the window controls
at the row's right step between the map inside COBI, the map alone and the
browser's full screen; the map's More menu reaches the comprehensive view,
the Disciplines and subjects workspace, How SkyView works and the table,
and #unified-courses/list opens the table directly. Two words next to
Show: Courses | CPL (2026-09-10) swaps the map's universe — the
courses, or the 1,987 curated credentials with the local MAP exhibits
folded into each, the courses articulated to them (each a door back onto
the Courses map) and a second ring on the 84 statewide ones; nothing moves
on the CPL map — and Articulations lights what carries one; the
coverage line says the universe's own counts and #skyview/cpl links to
it. The search box also takes questions
(2026-09-09): type a sentence rather than a keyword and Enter asks
SkyView, which turns it into a selection on the map — the map answers by
moving, and anything it cannot find on the map it says so rather than
quietly leaving out. Its answer prints beside the search box, where you
typed. Isolate draws only what you selected, a discipline included —
authenticated reviewers (Supabase
magic-link auth) curate disciplines, merge variants, and verify
inferred values. Edits write to a live Supabase table and overlay the
git-tracked KB. Eligible-units + Students columns + a 🎯 Cleanup-impact
preset (Session 37) rank the cleanup queue by real CPL student-credit
payoff (rolled up from the Common Exhibit Reference via the articulation
crosswalk), not just a structural proxy. Session 38: the Subject
column/filter shows the canonical SUBJ4 (raw local codes on hover), a
surfaced affordance leads each row's actions cell, the
expanded member table is , and Units shows a
(e.g. ) with a ⚠ alarm when the spread exceeds 2.0 — a likely
over-merge signal. the per-row ⚇ Merge
dialog can now the surviving course (its Common SUBJ shows
the new canonical immediately with a ⟲ "re-keys at the next fold" marker; a
course with discipline now shows a blank Common SUBJ instead of a
non-canonical local code, and the worklist has a lane that flags courses a title keyword likely mis-disciplined,
each with a suggested fix — Session 113), and
the ✨ Suggested-merges worklist gained ,
a global slider, (only the ★
target pre-checked), and a so word-order/suffix variants
(Conversational ↔ Conversation) group together, with an amber flag on cross-discipline groups.kb/_row_audit.py) — produces a per-row
Trust Card for every M-ID + Cluster with a faculty_trust_score (the
bar for cross-college articulation adoption) and an mc_ready_score
(the destination — Model Curriculum readiness for ASCCC C-ID
submission). 11 active rules cross-validate discipline assignments
against title, TOP code, description, and member aggregation. The
UCL surfaces findings as a "⚠ N · 0.XX" chip color-graded by severity,
with a Triage: filter to carve the cleanup queue (8 modes including
"3+ findings" for the high-confidence misassignment subset). Full
decisions + lessons: docs/unified_courses_audit_lessons.md.
See CLAUDE.md §11 for the M-ID → CIDx pipeline framing./fact-sheet/
that recreates the journalist Fact Sheet, pulls the headline KPIs live from
live_metrics.json, and prints to a clean PDF. On screen it is on First Light
(Playfair Display and Source Sans 3, and a dark mode that follows COBI's
theme control, S352); print and the Word download keep Cambria and Calibri.
It "sits alone" (no
dashboard nav) so it can be shared publicly without exposing the internal
tabs; a "📄 CPL Fact Sheet" link in the left nav rail opens it. It carries a
rotating "My CPL Stories" section and is reviewer-Curate-editable in place
(edit/add/reorder boxes + manage images; edits show for every visitor, the
baked page is the fallback). The ✎ Curate button is hidden from the public
— it appears for a signed-in reviewer (the COBI session is shared across
browser tabs), or via the bookmarkable ?curate=1. That is presentation, not
security: writes were always gated by row-level security, never by the button.
The page is verified for WCAG AA contrast, keyboard access and phone widths —
tests/factsheet_a11y.test.js in CI, plus
fact-sheet/check_mobile_layout.js
(headless Chromium, run on demand). Built Session 74 — see
docs/fact_sheet_lessons.md./funding-model/,
written for a Chancellor's Office / Finance reader. It is live, not a
snapshot: it loads cpl_funding.js and paints every figure from the same
engine and the same Supabase config the Implementation Funding tab uses, so a
dial change appears on the next reload with nothing to rebuild or republish.
Its headline row sets the appropriation beside its two destinations, the
institutions box split into credit and noncredit, and noncredit's share follows
the tab's Credit and noncredit setting (blank keeps each institution's
teaching mix); the words in every box and passage edit on the tab under The
explainer's text, with Bold and Italic.
Its Max award by institution section, directly after the introduction, is
the tab's own institution table rendered in embed mode
(window.CPL_FUNDING_EMBED = "college") — the same rows, drill-in, search
and Excel export, not a copy — given the window's width rather than the prose
column, because the prose cap is what pushed its last column off the edge.
Funding outcomes and milestones follows: the four priorities and the
milestone list together, open, with each priority's recommended strategies
folded closed. The sections that explain the mechanics fold closed on open,
each headed by its text title alone, and the titles are the model's own words
(How an allocation is computed, Eligibility requirements). Every checkable claim — the priority
descriptions, the baseline requirements, the participation deadline — is read
from the model rather than typed beside it. Download PDF prints the page
itself, so the file carries the model as it currently stands; there is no
built artifact to go stale.
It replaced a published artifact that had to be regenerated by hand and had
silently drifted from the model it explains — see
docs/kb-notes/methodology-a-snapshot-of-a-live-model-is-a-claim-that-decays.md. CCCCO MAP CPL Dashboard (Azure)
│
▼ REST /api/potential-savings
Cloudflare Worker (cpl-proxy.slee-548.workers.dev)
│
▼ GET /scrape?secret=…
live_metrics.json
│
CPL_Initiative_Project_List_v3.xlsx ──┐
kb/ (knowledge base, curation) │
▼
excel_to_dashboard.py (Python pipeline)
│
┌────────────────────┼─────────────────────┬────────────────┐
▼ ▼ ▼ ▼
CPL_Dashboard.html CPL_Data.js / etc. kpi_history.json reports/*.docx
│
▼ cp → index.html, commit, push
GitHub Pages (cpl-initiative.github.io/cpl-project-tracker/)
Supabase (hvuwhnbuahrtptokpqfh.supabase.co)
├── projects, workplan_goals ← READ BY the pipeline (source of truth as of the
│ Excel→Supabase migration; daily snapshot + Excel fallback). `projects` is
│ the authoritative sub-activity TREE; `workplan_goals` is a by-id year-ladder
│ OVERLAY (Path A, #909) — so the Annual Workplan Goals tab reflects EVERY
│ Activities-tab project, X.Y.Z ids nesting under their X.Y parent. Inline-
│ editable by allowed reviewers — Activity + sub-activity TITLES + brief
│ DESCRIPTIONS on the Annual Workplan Goals tab (single-source editor, #902;
│ `workplan_goals.description` col); blank-ladder rows are read-only on the
│ year cells (title/description still edit `projects`)
├── budget_funding, budget_expenditures, personnel ← also Supabase-read (Budget
│ cutover, PR #189); inline-editable. Dashboard config (title/desc/KPI
│ params) moved to committed kb/dashboard_config.json (Excel-retirement P2).
│ The master .xlsx is no longer WRITTEN on any run; a few readers remain.
│ 2026-07-30: budget_funding is now the whole CPL LEDGER (45 rows) —
│ section/parent_id/archived/description/window_label give it Sources,
│ Uses, the combined $18M project pool and the 2017-forward history,
│ rendered by budget_ledger.js with collapsible detail and inline
│ editing on every non-total field. TOTALS SUM PARENT ROWS ONLY.
└── kb_curation, allowed_reviewers (UCL curation overlay)
Cloudflare Worker (cpl-proxy.slee-548.workers.dev)
├── GET /scrape → CCCCO MAP API → live_metrics.json
└── POST / → Anthropic API → Custom Report Generator
The worker calls the CCCCO Dashboard's REST API directly — no browser automation. That was a deliberate decision after Chrome-based scraping proved unreliable.
.github/workflows/daily-dashboard.yml runs on cron 17 10 * * *
(≈10:17 UTC / 2:17 AM PT) and on manual dispatch. Steps:
main.fetch_custom_report.py).kb/_apply_curation.py) so the
morning's reviewer edits land in kb/coci_curation.json.excel_to_dashboard.py — regenerates the dashboard HTML in place,
exports the client-side JS data files, builds Word reports, snapshots
today's KPIs into kpi_history.json.cp CPL_Dashboard.html index.html (Pages serves index.html).main with a rebase-retry loop for concurrent pushes.The commit always includes the regenerated dashboard, the Unified Courses
data files, and exports/unified_courses.xlsx, so curation + the daily
data refresh are captured atomically.
.
├── CLAUDE.md ← project memory, rules, roadmap (read first)
├── README.md ← this file
├── excel_to_dashboard.py ← main pipeline (reads Excel + live_metrics, generates HTML/JS/docx)
├── CPL_Dashboard.html ← generated dashboard (mirror of index.html)
├── index.html ← served by GitHub Pages
├── fact-sheet/ ← public standalone CPL Fact Sheet (live KPIs + print-to-PDF; sits alone)
├── funding-model/ ← public "How this funding model works" — LIVE off cpl_funding.js + the Supabase config (no snapshot to rebuild)
├── library/ ← the public CPL Library: the pieces listed from COBI's Library tab (Malone's look, 2026-10-24)
│ └── cpl-opportunity/ ← one college's CPL Opportunity Analysis (?college=), moved here 2026-10-26; cpl-opportunity/ forwards
├── privacy.html ← public privacy page for the Library filer (its Google consent screen links it)
├── CPL_Data.js / statewide_data.js ← client-side data for filters/search
├── statewide_prescriptive.js ← EACR prescriptive layer (who could adopt → likely local course)
├── unified_courses*.js ← Unified Courses tab data + lazy files
├── dashboard_filters.js ← client-side filter/search/sort
├── kpi_reorder.js ← KPI card drag-to-reorder (per-browser, localStorage)
├── report_generator.js ← Custom Report (Claude API via proxy)
├── college_report_generator.js ← per-college .docx generator
├── docx.min.js ← local [email protected] UMD build (do NOT switch to CDN)
├── jszip.min.js ← local JSZip 3.10.1 (MIT), loaded on demand by the Library's remediation (do NOT switch to CDN)
├── library_remediate.js ← the Library tab's in-browser remediation of a .pptx or .docx (S509)
├── cloudflare-worker-proxy.js ← dual-purpose worker (scrape + Anthropic proxy)
├── live_metrics.json ← latest scrape
├── kpi_history.json ← daily KPI snapshots (must have no date gaps)
├── CPL_Initiative_Project_List_v3.xlsx ← master project data
├── reports/ ← generated Word reports
├── exports/ ← per-table .xlsx exports + unified_courses.xlsx
├── kb/ ← knowledge base + curation + auditor
│ ├── README.md ← KB schemas + identity precedence + status
│ ├── _row_audit.py ← row Trust-Card auditor (see CLAUDE.md §11)
│ ├── _apply_curation.py ← Supabase kb_curation → coci_curation.json sync
│ ├── _infer_disciplines*.py ← re-runnable discipline inference passes
│ ├── coci_minted_*.json ← minted M-ID identities + memberships + singletons
│ ├── coci_unified_courses.json ← variant-unified clusters
│ ├── coci_articulations.json ← earned articulations resolved to identity + credential
│ ├── coci_curation.json ← human curation overlay (regen-safe)
│ ├── promotions.json ← Phase A/B official-id consolidation manifest
│ ├── reference/ ← read-only authorities (C-ID, CCN, MQ disciplines, COCI list)
│ ├── remint_out/ ← re-mint dry-run artifacts + alias_map.json
│ └── row_audit/ ← per-day Trust Card artifacts (latest.json + <date>.md)
├── docs/ ← decision docs + lessons-learned (synced to Obsidian)
│ ├── INDEX.md ← landing page (generated block; kb/_build_docs_index.py)
│ ├── catalog/ ← GENERATED per-lane doc catalogs — do not hand-edit
│ ├── coursecontrolnumber_remint.md ← the 2026-05-22 M-ID re-mint playbook
│ ├── exhibit_unification_vision.md ← credential-layer canonicalization design
│ └── reference/ ← C-ID / CCN / TMC reference PDFs from ASCCC
└── .github/workflows/ ← GitHub Actions (daily-dashboard.yml)
The full pipeline is Python + a few static assets — no build step.
# Regenerate the dashboard locally
python3 excel_to_dashboard.py
# Re-run the row Trust-Card auditor (read-only)
python3 kb/_row_audit.py
# Re-run a discipline inference pass (idempotent — only fills blanks)
python3 kb/_infer_disciplines.py
python3 kb/_infer_disciplines_from_desc.py
python3 kb/_infer_disciplines_from_top.py
excel_to_dashboard.py streams the 24 MB kb/reference/coci_course_list.xlsx
with openpyxl read-only — never cat it.
CLAUDE.md — project memory, critical rules, full pipeline reference,
knowledge-base build status, M-ID lifecycle + MC vs TMC framing,
roadmap, troubleshooting.kb/README.md — KB schemas, course-identifier precedence
(CCN-ID > C-ID > M-ID), curation workflow, generator inventory.docs/coursecontrolnumber_remint.md — the playbook for safely
re-keying shared-system identifiers (used for the 2026-05-22 re-mint;
any future identifier re-key should follow the same pattern).docs/subj4_canonicalization_remint_lessons.md — Phase 1e decisions +
lessons (the second re-mint, first under the revised Rule 7 staging
framing; complete 2026-05-23 — 65k aliases applied, cleanup receipt
zero).docs/common_subject_code_tab_lessons.md — Common Subject Code tab
evolution (the four-PR series A → D, 2026-05-23). UX patterns, validate
workflow design, TOP/CTE/CIP column rationale, render-refactor lessons.docs/exhibit_unification_vision.md — the credential-layer
canonicalization design (synthetic unified-title layer over MAP's freehand
exhibit titles).main. Claude Code sessions use
claude/<short-description> branches automatically.main — coordinate around the
10:17 UTC window for any shared-system change (Supabase, alias maps).main (GitHub Pages serves from it).docs/coursecontrolnumber_remint.md
— dry-run + alias map + Supabase fresh-read + atomic land + cron-window.
Once the M-ID layer is faculty-published, Rule 7 re-locks to "stable
identifiers, no renumbering."© 2026 California Community Colleges Chancellor's Office (CCCCO). All rights
reserved — no copying, redistribution, or derivative use without prior written
permission (see LICENSE). This project tracks public statewide CPL
data and is maintained by the CPL Initiative team at RCCD on behalf of the
California Community Colleges system. The underlying public data and any
separately-licensed component (e.g. the CPL Knowledge Base, CC BY 4.0) keep their
own terms. Permission requests: [email protected].
1–1.5