CM108G NotebookLM Drive-backed source workflow
Purpose
The learner-facing course remains the HTML site. NotebookLM does not use those HTML files as its weekly reading source. Instead, each week has a stable native Google Docs document in a dedicated Drive folder. NotebookLM reads the Google Docs documents as Drive sources, so a later refresh can retrieve the current document content without creating a new NotebookLM source every time.
This is a one-way refresh boundary, not an automatic two-way file synchronizer:
approved local module
↓
clean NotebookLM mirror
↓
same Google Docs file ID
↓
NotebookLM Drive source refresh
An edit made directly in Google Docs can be refreshed into NotebookLM, but it does not automatically rewrite the local HTML site. If a Drive edit is intended to become course material, fetch it back into the normal PM, evidence, and review workflow before rebuilding the learner page.
Current provisioning
- NotebookLM notebook:
Management: From Creator to Company Building Blueprint - Notebook ID:
16a71890-6c2e-4226-b4d8-f2b77160af68 - Drive folder: CM108G Become Judy - NotebookLM refreshable sources
- Local source generator:
scripts/build_notebooklm_sources.py - Local generated mirrors:
01_sources/notebooklm/generated/week-01.mdthroughweek-18.md - ID and hash registry:
01_sources/notebooklm/notebooklm_drive_source_manifest.csv
The registry deliberately records both IDs:
drive_document_idis the native Google Docs file ID.notebook_source_idis the NotebookLM source UUID.
They are different identifiers. A NotebookLM sync call must receive
notebook_source_id; a Google Docs update must receive drive_document_id.
What each Drive document contains
Each document is generated from the current learner-facing unit inputs:
- the main reading between the controlled
main-bodydelimiters; - the weekly glossary;
- the assessment and AACSB-aligned reflection;
- the resources and APA 7 references.
Instructor-only blocks, internal HTML comments, agent names, private local paths, PM status, and review answer material are excluded from the mirror. Markdown-style headings and links are retained because they remain readable in the native document and searchable in NotebookLM.
Standard update procedure
-
Complete the normal local content and review process. Do not edit the Drive mirror first merely to bypass the Case Bible, claim ledger, or Reviewer.
-
Rebuild the local mirrors:
python scripts/build_notebooklm_sources.py -
Compare the resulting
content_sha256andword_countvalues in the manifest. Confirm that the intended week changed and unrelated weeks did not. -
Use Google Drive MCP to update the existing native Google Docs document in place. Clear its body and insert the regenerated mirror text. Do not create a replacement file with a new ID.
-
Run
source_list_drivefor the NotebookLM notebook before synchronizing. Confirm that the target sources aregoogle_docssources and note their freshness status. -
Run
source_sync_drivewith the corresponding NotebookLM source UUIDs andconfirm=true. If a source was just added and is already fresh, a result ofSynced 0 source(s)means there was no pending revision, not that the source was necessarily missing. -
Run
source_list_driveagain and confirm the source is fresh. Fetch at least one changed source through NotebookLM's raw-content endpoint and compare its opening text, section markers, assessment presence, and absence of internal project material. -
Update the manifest fields
last_drive_sync,last_notebooklm_refresh, andstatus, then updateHANDOFF.mdand the PM control records when the operation is a project stage.
Direct Google Docs edits
Direct Drive editing is supported for a quick correction or addition. The NotebookLM refresh boundary is the Google Docs revision, so the stable source ID remains valid. However, direct editing creates a possible divergence from the local HTML and from the approved manuscript. Before the change is treated as an official course revision:
- fetch the revised Google Docs text;
- identify the affected week and claims;
- route it through the Chief PM context and Reviewer checks;
- update the local module and learner-facing HTML;
- rebuild the mirror so the local and Drive representations agree again.
Legacy sources
The earlier 18 generated_text weekly candidate sources were permanently
deleted through the NotebookLM MCP after the 18 Drive-backed Google Docs
sources had been created, refreshed, and verified. The notebook now retains
the 18 refreshable weekly google_docs sources, the output-control document,
and seven Drive-backed bilingual or student-support sources. The three former
web-page sources were removed after replacement readback. The deleted candidate
sources are not part of the current revision authority.
Verification record for the initial migration
- 18 native Google Docs files were created in the dedicated Drive folder.
- All 18 documents were populated from the generated mirrors.
- Drive folder listing returned 18 files, all with MIME type
application/vnd.google-apps.document. - NotebookLM source listing returned 18 new
google_docssources, all withis_stale: falseafter provisioning and synchronization. - Week 12 was separately checked through NotebookLM raw content: the content
was present, included
Assessment and reflection, and did not containChief PM,Context Packet,instructor-only:start, or internal review paths. - The initial provisioning step briefly returned
Transport closedfrom the NotebookLM MCP, so the authenticatednlmCLI completed the first source addition, listing, synchronization, and raw-content verification. The MCP then recovered and was used to delete the 18 legacy candidate sources. - Final MCP readback returned 21 sources: 18
google_docsDrive sources, three existing web sources, and no legacy weeklygenerated_textsources. All 18 Drive sources remainedis_stale=false.
Current maintenance state — 2026-09-09
The refresh root is shared as Anyone with the link: Viewer with discovery
disabled. The six child folders inherit the same reader permission. The 18
weekly documents are now in 01_weekly-textbook; the output-control document
is in 00_course-control. The current folder IDs and all source IDs are in
notebooklm_source_registry.csv; the weekly manifest remains the compact
weekly build record.
The following Drive-backed bilingual sources were created, read back, and added to the NotebookLM notebook:
| source key | Drive document ID | NotebookLM source ID | folder |
|---|---|---|---|
| course-page-bilingual | ID_B1DC15C4AB |
ID_0E6937BD6E |
02_bilingual-web-case |
| long-case-bilingual | ID_A2E91E896E |
ID_BEBEDEEEF2 |
02_bilingual-web-case |
| short-case-bilingual | ID_7BEEC34617 |
ID_4913B48CD4 |
02_bilingual-web-case |
| ta-zh | ID_E31D38E54A |
ID_849C64F84B |
04_student-prompts |
| ta-en | ID_5DDB206D4C |
ID_BF161CDF31 |
04_student-prompts |
| ta-readme | ID_B5F1F04EA8 |
ID_F1FD10D318 |
04_student-prompts |
| source-guide | ID_3A9D1BC1BC |
ID_73C4C52281 |
05_source-index |
The former three web sources were removed only after replacement readback:
long case ID_15D701ABFA, course page
ID_952C130BE1, and short case
ID_5B25BE2EE4. Their IDs remain in the registry as
previous_source_id.
The current NotebookLM readback contains 26 Drive sources and reports
stale_count=0. A retry during provisioning created seven duplicate source
records; those duplicates were removed after title and content verification.
This event is recorded in maintenance-change-log.jsonl so a future run can
detect the same retry pattern.
Change detection and review efficiency
Every run begins with a deterministic Rapid Gate: source identity, Drive parent, permission, revision direction, non-empty content, bilingual markers, title parity, case-boundary labels, approval state, and internal-language privacy scan. If that scan finds no material problem, the run may continue to freshness synchronization and defer a full review.
Focused or full review is required for substantive content changes, new
translation, material transcript cleaning, new case or administrative claims,
source conflict, student error reports, or a high-risk Rapid Gate warning.
The local avoid-ai-writing skill is applied to English prose. Its P0/P1
scan precedes a full review; a full rewrite pass is reserved for substantial
English changes. Facts, dates, numbers, citations, uncertainty, and teacher
intent are protected.
Approved-transcript gate
Only teacher-approved files in 03_approved-transcripts may be imported. The
original and cleaned-pending versions remain private. User approval for Week
01 was received and recorded on 2026-09-10. The readable final cleaned
transcript was then read back from the approved Drive folder, passed the
English avoid-ai-writing P0/P1 detect gate, and was imported through a native
Google Docs mirror. The original Markdown remains preserved; the authoritative
record is transcript-register.csv, and NotebookLM source
ID_C6D5419EE9 is synced.
Student prompts and schedule
CM108G_TA_EN, CM108G_TA_ZH-TW, CM108G_TA_README, and the bilingual source
guide explain how students select the course page, matching textbook,
approved transcript, and optional long or short case. They explicitly prohibit
requests for formal Quiz answers or assessed No AI, midterm, or final work.
Active maintenance automations are recorded in the Codex app as daily general
maintenance at 03:30 Asia/Taipei, transcript checks Monday at 22:00, and
Tuesday at 09:00 and 18:00. They use Luna with the runtime's max reasoning
setting and notify only on failures, blockers, permission loss, updates, or
conflicts. A no-op run is quiet.
Daily maintenance readback — 2026-09-10
- The local generator rebuilt all 18 weekly mirrors. No weekly content changed; raw SHA-256 values matched the manifest 18/18, and normalized Drive/local text parity was 18/18.
- The root and six child folders still report anyone-with-link reader access with discovery disabled. All 26 Drive documents were nonempty and
source_list_drivereturnedstale_count=0. - The local canonical short-case HTML is at commit
4121c0071d722461014dfa99935462f246c099e0and the path is clean. The canonical and public pages currently expose no separate English section; the existing bilingual Drive document remains preserved and fresh (stale=false), so no Drive update orsource_sync_drivecall was made for Short Case. - The Week 14 registry hash was corrected from a one-row metadata mismatch.
CM108G_TA_EN,CM108G_TA_ZH-TW,CM108G_TA_README, andsource-guideremain valid Drive-backed sources, but their listed local canonical copies are absent and were recorded as Drive-backed-only. - User approval for the Week 01 transcript was received on 2026-09-10 and recorded in
transcript-register.csv. The readable final cleaned Markdown was found in03_approved-transcripts, passed the Englishavoid-ai-writingP0/P1 gate, was mirrored into native Google Docs, added to NotebookLM, and synchronized. Post-sync readback returned 27 Drive sources withstale_count=0; no commit, push, deployment, or publication was performed.
Week 01 transcript import readback — 2026-09-10
- Approved source:
CM108G_Week01_Cleaned_Transcript_EN_FINAL.md(ID_334E388692), 4,487 words, UTF-8 content hashB69A694E37ED6144455FC6EAA09FD7CA4A55007A620D13DF8288BDD6B119FF0C; the original Markdown was preserved. - Native mirror:
CM108G Week 01 Cleaned Transcript EN FINAL - NotebookLM Source(ID_AE13B96C1F) in the approved-transcripts folder; Drive readback passed normalized text parity. - Anti-AI gate: detect mode passed P0/P1. P0 cutoff-disclaimer, chatbot-artifact, vague-attribution, and significance-inflation counts were all 0; P1 tier-1 and template/
Let'shits were 0; no internal project language or credential pattern was found. - NotebookLM: source
ID_C6D5419EE9was added andsource_sync_drivereturnedsynced_count=1. Post-syncsource_list_drivereturneddrive_count=27,stale_count=0; raw content readback retained normalized parity and the expected Part I, Part II, and assessment sections. - The temporary incompatible Markdown source
ID_E38B4694A0was deleted after the invalid sync result. No duplicate transcript source remains.
Current run records
maintenance-run.json: latest run, source counts, readbacks, and blocker.maintenance-change-log.jsonl: append-only action records.source-conflict-report.md: conflict policy and current Week 01 evidence blocker.transcript-register.csv: approved-transcript eligibility register.prompt-source-register.csv: student prompt and README source register.
Daily maintenance readback — 2026-09-12
- The local generator rebuilt all 18 weekly mirrors; 18/18 SHA-256 values still match the registry and zero weekly content changes were found.
- NotebookLM
source_list_drivereturned 27 stable Drive-backed Google Docs,stale_count=0, and no duplicates. The course-page, long-case, and short-case Drive documents were read back successfully without internal project or credential markers. - The Drive root share event and all six child-folder permission panels read back as anyone-with-link / reader with discovery disabled. No permission change was made.
- Local course-page, long-case, and Short Case candidates have newer or separate local content, including the untracked Short Case
index-en.html. Their SHA-256 values and pending approval state are recorded innotebooklm_source_registry.csv; the existing Drive mirrors remain the source of truth for this run. - The English Short Case candidate had zero P0 and tier-1 P1 counts, no internal markers, and passed local asset/reference structure checks. Full-style detection retained one template-word note and 12 em dashes across 3,997 words, so it remains an unapproved candidate requiring review.
- No
source_sync_drivecall was made because the notebook was already fresh and current PM/teacher approval for the local candidates was not recorded. After approval, update the existing Drive documents in place and sync only the affected stable source UUIDs; do not create duplicates.
Daily maintenance readback — 2026-09-13
- Run
notebooklm-maintenance-2026-09-13-01completed as a no-op. The generator rebuilt 18 weekly mirrors; registry hash matches were 18/18, weekly content changes were 0, and normalized local/Drive extracted-text parity was 18/18 with current revision readback. - Drive inventory remained unchanged: the refresh root has six expected child folders with 1, 18, 3, 2, 3, and 1 files respectively. Root and child-folder permission metadata read back as anyone-with-link / reader with discovery disabled.
- NotebookLM
source_list_drivereturned 27 stable Google Docs sources,stale_count=0, and no duplicates. Nine static Drive documents and their NotebookLM source content passed nonempty/readback checks with no internal project markers. Indexed NotebookLM raw text was not used as a byte-for-byte parity gate because its representation can contain indexing wrappers or repeated tab text. - The course-page, long-case, and short-case local candidates did not change since the previous run. Current PM and teacher approval is still absent, so the existing Drive mirrors were preserved; no Drive update, source creation, deletion, or
source_sync_drivecall was made. - No English candidate changed, so the previous
avoid-ai-writingP0=0 and tier-1 P1=0 result was retained and full-style review was not rerun. NotebookLM MCP remained authenticated at version 0.11.1; 0.11.3 is available but was not installed during maintenance. - Next action after approval: update the existing native Drive file IDs in place, read them back, then synchronize only the affected stable NotebookLM UUIDs. Do not create duplicate sources.