Skip to content

Add Course Logistics part: Spring 2026 syllabus and schedule#912

Merged
d-morrison merged 6 commits into
mainfrom
add-course-logistics-pages
Jun 20, 2026
Merged

Add Course Logistics part: Spring 2026 syllabus and schedule#912
d-morrison merged 6 commits into
mainfrom
add-course-logistics-pages

Conversation

@d-morrison

Copy link
Copy Markdown
Owner

What

Adds a new "Course Logistics" part at the front of the book (after the preface, before Introduction to GLMs), converting the Epi 204 (Spring 2026) syllabus and schedule into Quarto pages.

File Purpose
chapters/syllabus.qmd Syllabus, converted from the Word doc
chapters/schedule.qmd Data-driven schedule + assignments tables (readxl + gt)
inst/extdata/epi-204-schedule-2026.xlsx Source schedule spreadsheet
_quarto-book.yml, _quarto-website.yml Wire the two pages into the book TOC + website render list/navbar

The schedule page reads the spreadsheet at render time, so updating the schedule later is just a matter of replacing the .xlsx — no .qmd edits needed.

⚠️ Please review: redacted links

The book renders to a public site, so I redacted secrets/internal links from the syllabus. Restore any you want public:

  • Posit Cloud join links (contained access_code=…) → pointed to generic https://posit.cloud/. The real join links are on Canvas.
  • Two instructor-only SharePoint links (the class "scratch notebook" and the syllabus source, both in the Epi204Instructors-Spring2026 team) → pointed to the Canvas course.
  • Kept as-is: the anonymous-feedback Google Form (forms.gle/…). Flagging it in case you'd rather not have it on the public site.

Notes

  • The schedule table shows only rows with a real session date, so the tentative "Skipped?" parametric-survival (AFT) row and footnote rows are omitted. Dates render as Mon DD, which also hides a couple of stray 2023 typo years in the source spreadsheet's Final/Review rows (worth fixing at the source).
  • Pre-commit checks (per CLAUDE.md): both chapters render to HTML ✓, lintr clean ✓, spelling::spell_check_package() clean ✓.
  • Book-content only — no .github/CI changes.

🤖 Generated with Claude Code

Convert the Epi 204 (Spring 2026) syllabus and class schedule into Quarto
pages and add them as a new "Course Logistics" part at the front of the book.

- chapters/syllabus.qmd: syllabus converted from the Word document. Posit
  Cloud join links (with access codes) and instructor-only SharePoint links
  are redirected to generic/Canvas URLs to avoid publishing secrets on the
  public site.
- chapters/schedule.qmd: data-driven schedule + assignments tables, built at
  render time from the spreadsheet via readxl + gt.
- inst/extdata/epi-204-schedule-2026.xlsx: source schedule spreadsheet.
- Wire both pages into the book TOC (_quarto-book.yml) and the website render
  list + navbar (_quarto-website.yml).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com>
@claude

claude Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 2m 33s —— View job


Code Review — PR #912: Add Course Logistics part

  • Gather context and read changed files
  • Review _quarto-book.yml and _quarto-website.yml changes
  • Review chapters/schedule.qmd
  • Review chapters/syllabus.qmd
  • Post inline findings and summary

Overall verdict

The PR is well-structured and the data-driven schedule approach is a clean pattern. A few CLAUDE.md convention violations and prose issues need attention before merge.


chapters/schedule.qmd

CLAUDE.md violation — #| tbl-cap: instead of div format (lines 56–58, 100–103)

CLAUDE.md requires:

"Use div format (:::{#fig-...}) for figures and tables, not chunk-option fig-cap/tbl-cap"

Both table chunks use the forbidden pattern:

#| tbl-cap: "Tentative schedule of class sessions (Spring 2026)."

and

#| tbl-cap: "Homework assignments and exams (Spring 2026)."

Each should be wrapped in a labelled div instead:

:::{#tbl-schedule}
```{r}
#| echo: false
...
:::

Fix this →

Unnecessary rowwise() (lines 64–71)

as.Date() and format() are vectorized; only combine_readings() requires row-wise evaluation. The current code applies rowwise() to the whole pipeline, which forces row-by-row execution of the Date conversion too. The Date mutation can either be moved before rowwise() or the rowwise()/ungroup() bracket narrowed to just the Readings column.

revealjs output format (lines 3–11)

Both schedule.qmd and syllabus.qmd declare revealjs output. The schedule page's gt tables are wide and data-heavy — they will likely overflow slides without additional formatting. Consider whether you actually want a RevealJS slide deck for these pages, and if so, add slide-aware formatting (e.g. #| output-location: or CSS overrides). If not, remove the revealjs block.


chapters/syllabus.qmd

Duplicate link — same URL twice in one sentence (lines 122–125)

The [schedule of class sessions and a tentative list of specific
topics](https://canvas.ucdavis.edu/courses/1077308/files/folder/Logistics)
is available
[here](https://canvas.ucdavis.edu/courses/1077308/files/folder/Logistics).

Both hyperlinks resolve to the same URL. The "is available [here]" trailing link is redundant. Remove one of the two.
Fix this →

Stray period mid-sentence (line 503)

Several of the texts. can also be downloaded **for free**

"texts. can" should be "texts can" — there is a spurious period inside the sentence.
Fix this →

Bare URL with no descriptive link text (line 531)

<https://www.routledge.com/Generalized-Linear-Mixed-Models-...>

This is an orphaned raw URL with no surrounding description or author attribution. Either remove it or wrap it in descriptive text like the other textbook entries in the same section.

Misleading "scratch notebook" link (line 209)

The class scratch notebook is
[here](https://canvas.ucdavis.edu/courses/1077308).

The link points to the Canvas course homepage, not to any scratch notebook. A reader following this link will not find the notebook. The PR description acknowledges this is a redacted SharePoint link, but the current placeholder text is actively misleading. Consider rephrasing: e.g., "The class scratch notebook is available on Canvas (link restricted to course participants)." or simply remove the sentence if it's instructor-only.
Fix this →

Heading with embedded hyperlink (line 211)

### [Schedule](https://canvas.ucdavis.edu/courses/1077308/files/folder/Logistics)

Embedding a link inside a heading can cause the heading text to render as a hyperlink in the sidebar TOC and in PDF output. The convention throughout this repo uses plain heading text and places references in the body below. Consider:

### Schedule

See the [course schedule on Canvas](https://canvas.ucdavis.edu/courses/1077308/files/folder/Logistics).

File length (749 lines)

CLAUDE.md says to "aim to keep .qmd source files under ~100 lines." The syllabus is inherently a long document, but if you want to comply strictly you could move major sections (Texts, Learning Resources, Policies) into named _subfiles/. That said, splitting a syllabus into subfiles may add more navigation friction than it solves — flagging for your judgment.


_quarto-book.yml / _quarto-website.yml

No issues. The new "Course Logistics" part slot and the navbar menu entry both look correct.


…se fixes

- schedule.qmd: wrap both tables in `:::{#tbl-...}` divs (per CLAUDE.md) instead
  of `#| tbl-cap:`; narrow `rowwise()` to just the Readings column (Date is
  vectorized); drop the unused `revealjs` output format.
- syllabus.qmd: drop `revealjs`; remove duplicate Canvas link; fix stray period
  ("texts. can"); wrap the bare Routledge URL in a descriptive list item;
  rephrase the redacted scratch-notebook link (no longer points misleadingly to
  the Canvas homepage); de-link the "Schedule" heading and cross-link to the new
  Schedule page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com>
@d-morrison

Copy link
Copy Markdown
Owner Author

Thanks for the review! Addressed in 6e44ec7:

chapters/schedule.qmd

  • tbl-cap → div format — ✅ Addressed. Both tables now use :::{#tbl-schedule} / :::{#tbl-assignments} fenced divs with the caption as the last line; removed the #| tbl-cap: chunk options.
  • Unnecessary rowwise() — ✅ Addressed. Date conversion is now a vectorized mutate() before rowwise(); the rowwise()/ungroup() bracket wraps only the Readings column.
  • revealjs output — ✅ Addressed. Removed the revealjs block (these pages aren't slide decks).

chapters/syllabus.qmd

  • revealjs output — ✅ Addressed. Removed.
  • Duplicate link — ✅ Addressed. Dropped the redundant "is available [here]"; now cross-links to the new Schedule page.
  • Stray period ("texts. can") — ✅ Addressed. (This is also a typo in the source .docx; will flag to the maintainer to fix at the source.)
  • Bare Routledge URL — ✅ Addressed. Wrapped in a descriptive list item with author/title.
  • Misleading "scratch notebook" link — ✅ Addressed. Rephrased to "shared with course participants on Canvas (link restricted to enrolled students)"; no longer links to the Canvas homepage.
  • Heading with embedded hyperlink — ✅ Addressed. ### Schedule is now plain text; the link moved to the body.
  • File length (749 lines)⤴️ Deferring (rebuttal). A syllabus is a single coherent document; splitting it into _subfiles/ would add navigation friction without real benefit, and the reviewer flagged this "for your judgment." Leaving as one file.

Pre-commit checks pass locally: both chapters render to HTML, lintr clean, spelling::spell_check_package() clean.

@claude review

@claude

claude Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 2m 7s —— View job


Code Review — PR #912 (follow-up after 6e44ec7)

  • Gather context and parse updated files
  • Verify all previous findings were resolved
  • Review chapters/schedule.qmd for remaining issues
  • Review chapters/syllabus.qmd for remaining issues
  • Post findings

Verdict

All eight findings from the prior review are fixed. Two new (minor) issues surfaced on a closer read of syllabus.qmd.


chapters/schedule.qmd — clean

The tbl-cap → div fix, the narrowed rowwise(), and the revealjs removal all look correct. No further issues.


chapters/syllabus.qmd — two remaining items

1. Misleading Posit Cloud workspace link (lines 244–248)

you can sign up for the Free plan and join the [Workspace for this
course](https://posit.cloud/),
which will provide access to additional compute hours for the duration
of this course.

The link text "join the Workspace for this course" promises a join link, but the href is just https://posit.cloud/ (the Posit Cloud homepage). A student who clicks it lands on the generic homepage with no path to the actual workspace. Since the real join link was intentionally redacted, the text should be softened so it doesn't imply a direct join. For example:

you can sign up for the Free plan at [Posit Cloud](https://posit.cloud/)
and join the workspace for this course (join link available on Canvas),
which will provide access to additional compute hours for the duration
of this course.

Fix this →

2. "Syllabus is online here" points to Canvas homepage (lines 714–716)

This syllabus is online
[here](https://canvas.ucdavis.edu/courses/1077308);

Now that this page is the online syllabus, "online here" is circular and misleading — the Canvas link goes to the course homepage, not to the syllabus. Either remove the sentence or update it to something like:

The authoritative, continuously-updated version of this syllabus is on
[Canvas](https://canvas.ucdavis.edu/courses/1077308).

Fix this →


@github-actions

Copy link
Copy Markdown
Contributor

👀 Picked up by workflow run #27778492043. R/Quarto/renv setup runs first (~3-5 min); Claude itself responds after that.

- Posit Cloud workspace: link text no longer implies a direct join link
  (points to posit.cloud homepage; join link is on Canvas).
- 'Syllabus is online here': rephrased to point to the authoritative Canvas
  version, since this page is now itself the online syllabus.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com>
@d-morrison

Copy link
Copy Markdown
Owner Author

Follow-up review addressed in 34d7777 — both items were artifacts of the link redaction:

  • Posit Cloud workspace link — ✅ Fixed. Link now reads "Posit Cloud" and the workspace text says "(join link available on Canvas)" so it no longer implies a direct join URL.
  • "Syllabus is online here" — ✅ Fixed. Rephrased to "The authoritative, continuously-updated version of this syllabus is on Canvas" (consistent with the callout at the top), since this page is now itself the online syllabus.

Local checks pass (render / lint / spell).

@claude review

@claude

claude Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 1m 50s —— View job


Code Review — PR #912 (follow-up after 34d7777)

  • Gather context and parse updated files
  • Verify fix 1: Posit Cloud workspace link text
  • Verify fix 2: "Syllabus is online here" sentence
  • Full pass for any new issues
  • Post findings

Verdict: approved

Both items from the previous round are cleanly fixed. One minor convention note surfaced on the final pass.


chapters/syllabus.qmd — both items confirmed resolved

Posit Cloud link (lines 243–245): The link text is now [Posit Cloud](https://posit.cloud/) and the workspace is described as "(join link available on Canvas)". No longer misleading. ✅

"Syllabus is online here" (lines 714–716): Rephrased to "The authoritative, continuously-updated version of this syllabus is on Canvas", consistent with the callout at the top of the file. ✅


chapters/schedule.qmd — minor note (non-blocking)

#| echo: false vs #| code-fold: true (lines 56, 103)

CLAUDE.md says: "Default to #| code-fold: true for figure/table chunks."

Both table chunks use #| echo: false, which hides the code entirely rather than providing a fold toggle. For a data-science textbook, code-fold: true would let curious readers inspect the readxl / gt pipeline — and demonstrating the data-driven approach is part of the point. Up to you whether to switch; it won't block merge.

Fix this →


Per CLAUDE.md ('default to code-fold: true for figure/table chunks'); also
lets readers inspect the readxl/gt pipeline that builds the schedule.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com>
@d-morrison

Copy link
Copy Markdown
Owner Author

Addressed the non-blocking note in 157a1a6: both schedule table chunks now use #| code-fold: true instead of #| echo: false, so the readxl/gt pipeline is inspectable (foldable) per CLAUDE.md. Renders clean locally.

@claude review

@claude

claude Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 1m 42s —— View job


Code Review — PR #912 (follow-up after 157a1a6)

  • Gather context
  • Read chapters/schedule.qmd — verify code-fold: true fix and full pass
  • Read chapters/syllabus.qmd — verify all prior fixes and full pass
  • Full pass on _quarto-book.yml / _quarto-website.yml
  • Post findings

Verdict: approved ✅

The code-fold: true change in 157a1a6 is correctly applied to both table chunks (lines 56 and 103 of chapters/schedule.qmd). All findings from prior rounds are confirmed resolved. No new issues.

chapters/schedule.qmd — clean

  • #| code-fold: true on both tbl-schedule and tbl-assignments chunks ✅
  • Date conversion remains outside rowwise() (vectorized) ✅
  • revealjs block absent ✅
  • Both tables use :::{#tbl-...} div format ✅

chapters/syllabus.qmd — clean

  • Posit Cloud link text matches the generic homepage href ✅
  • "Authoritative, continuously-updated version" phrasing for the trailing Canvas sentence ✅
  • ### Schedule heading is plain text; link moved to body ✅
  • Scratch notebook sentence no longer links to the Canvas homepage ✅

_quarto-book.yml / _quarto-website.yml — clean

  • "Course Logistics" part slot and navbar menu both wired correctly ✅

@claude

claude Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 4m 51s —— View job


Code Review — PR #912 (follow-up after 2ca4523 merge-from-main)

  • Read current state of changed files
  • Check diff vs origin/main (886 additions, 0 deletions — merge from main did not touch any of the 5 PR files)
  • Full review pass on chapters/schedule.qmd
  • Full review pass on chapters/syllabus.qmd
  • Review _quarto-book.yml / _quarto-website.yml
  • Post findings

Verdict

The merge from main (2ca4523) did not modify any of the five PR files. All findings from prior review rounds remain resolved. Two new items surfaced on this pass.


chapters/schedule.qmd — minor note (non-blocking)

combine_readings() is hidden but called in a code-foldable chunk

The helper is defined in the #| include: false setup chunk (lines 20–49), which is never shown to readers. Both table chunks use #| code-fold: true (correctly per CLAUDE.md), so a reader who clicks "Show code" will see combine_readings(...) called but not defined — a confusing loose end for anyone trying to understand or reproduce the pipeline.

Since this is a course logistics page rather than pedagogical R content, this is a judgment call rather than a bug. One option is to move the function definition into the first table chunk (inside the fold), so the full pipeline is self-contained when expanded. Non-blocking.


chapters/syllabus.qmd — structural issue

Stroup textbook entry is nested under ### Example Data Sets (lines 527–531)

### Example Data Sets

The data sets used in the Kleinbaum & Klein textbooks are available on
the Canvas page:
...

*Other textbooks on generalized linear models:*

- Stroup, Walter W. *Generalized Linear Mixed Models: Modern Concepts,
  Methods and Applications* (Routledge): ...

The "Other textbooks on generalized linear models" label and the Stroup entry are placed inside the ### Example Data Sets subsection, but they describe a textbook, not a dataset. This appears to be a Word → Markdown conversion artifact where this entry landed under the wrong heading. A reader browsing the sidebar TOC and navigating to "Example Data Sets" would not expect to find a textbook recommendation there.

Fix: move the Stroup entry into the main textbook bullet list in ## Texts (e.g., after the Moore survival analysis entry at line 481), and remove the orphaned *Other textbooks on generalized linear models:* italic heading.

Fix this →


_quarto-book.yml / _quarto-website.yml — clean

Indentation of the new "Course Logistics" part is consistent with existing parts. Navbar menu entries look correct. No issues.


@d-morrison

Copy link
Copy Markdown
Owner Author

Driving this PR to clean — back off until done.

…tbook

- schedule.qmd: move library/path/combine_readings() out of the hidden
  include:false setup chunk into the first code-foldable table chunk, so
  expanding 'Show code' reveals the whole pipeline (helper was called but not
  visibly defined).
- syllabus.qmd: move the Stroup 'Generalized Linear Mixed Models' entry from
  under '### Example Data Sets' (a Word->Markdown artifact) into the '## Texts'
  list after the Moore entry; remove the orphaned italic heading.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com>
@claude

claude Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @d-morrison's task in 2m 10s —— View job


Code Review — PR #912 (follow-up after e25302a)

  • Gather context
  • Read chapters/schedule.qmd — verify self-contained pipeline fix
  • Read chapters/syllabus.qmd — verify Stroup relocation fix
  • Full review pass on both files
  • Post findings

Verdict: approved ✅

Both outstanding items from the previous round are cleanly fixed. Full pass on both files found no new issues.


chapters/schedule.qmd — both items confirmed ✅

Self-contained pipelinecombine_readings() is now defined at lines 33–51 inside the #| code-fold: true chunk (along with library(dplyr) and schedule_path). A reader who expands the fold sees the complete pipeline without any hidden dependencies. The old #| include: false setup chunk is gone entirely. ✅

The rest of the file is unchanged from the prior approved state: Date conversion is vectorized before rowwise() (line 57); rowwise()/ungroup() brackets only the Readings mutation (lines 58–65); both tables use :::{#tbl-...} div format with #| code-fold: true; no revealjs block. ✅


chapters/syllabus.qmd — Stroup relocation confirmed ✅

The Stroup entry is now at lines 483–487, inside ## Texts after the Moore survival-analysis entry — the correct location. The ### Example Data Sets subsection (lines 524–531) now contains only the Kleinbaum & Klein dataset link, as expected. The orphaned italic *Other textbooks on generalized linear models:* heading is gone. ✅

All prior fixes (Posit Cloud link text, "authoritative" Canvas phrasing, plain ### Schedule heading, scratch-notebook sentence, stray period) remain intact. ✅


@d-morrison

Copy link
Copy Markdown
Owner Author

Addressed both items in e25302a:

Finding Disposition
schedule.qmd: combine_readings() defined in the hidden include:false chunk but called in the foldable table chunks Addressed — moved library/schedule_path/combine_readings() into the first code-fold:true table chunk and removed the hidden setup chunk, so expanding "Show code" reveals the full pipeline.
syllabus.qmd: Stroup textbook nested under ### Example Data Sets (Word→MD artifact) Addressed — moved the Stroup Generalized Linear Mixed Models entry into ## Texts after the Moore entry; removed the orphaned *Other textbooks…* italic heading.

Local checks pass (both chapters render, lintr clean, spelling clean). Waiting on the push-triggered review.

@d-morrison

Copy link
Copy Markdown
Owner Author

Done — PR is clean (review approved ✅, no flagged items; spellcheck/lint green; full-site build finishing). PR is free.

@github-actions

github-actions Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.

2026-06-20 08:04 UTC

@d-morrison d-morrison merged commit 869dd38 into main Jun 20, 2026
4 checks passed
@d-morrison d-morrison deleted the add-course-logistics-pages branch June 20, 2026 08:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants