Repository-specific working notes for Codex and similar coding agents.
_posts/: pod/, log/, hold/, misc/.pod/, hold/, misc/: public/ uses a year subfolder (e.g., _posts/pod/public/2026/). private/ stays flat.log/ further splits by project: _posts/log/<project>/public/2026/ and _posts/log/<project>/private/.
kanana-o/ (Kanana-o modality gap experiments), remode/ (REMODE paper track — modality gap reversal & task-aware routing; plan/feedback docs carry hidden: true for URL-only access, surfaced via /posts/remode/ series page).Type semantics:
pod/ — paper review pods.log/ — project-bound progress notes. Project subfolder required.hold/ — link-shareable but unlisted. Posts here carry hidden: true in front matter so they are excluded from home listings and pagination, but remain directly accessible via URL. Use when the link has been shared externally but the post should not surface in site navigation.misc/ — project-agnostic tech notes (tools, environment setup, etc.).Posts and slide deck entries can be in one of five visible states:
| Case | Trigger | Behavior |
|---|---|---|
| (1) Public | No lock / hide metadata | Normal listing + click navigates to body |
| (2) Publish soon | Post path contains /private/ (or any other listing-side equivalent) |
Listing shows 🔒 lock icon; click redirects to /posts/private/ (“This post will be published soon.”) — <a> stays alive, only the URL is swapped |
| (3) Click-blocked | _data/slides_public.json entry has disable_link: true |
/talks/ Presentations board renders the card as a static <div> (no <a>) with a “Lock” mark — click is genuinely disabled |
| (4) 404 | URL itself doesn’t exist (no matching post / slide page) | 404.html (“Go Back · Go to Main”) |
| (5) Unlisted | Post frontmatter hidden: true |
Body fully public via direct URL; absent from every general listing AND from previous/next navigation. Exception: a track-specific entry-point page (e.g. /posts/remode/) is the post’s only listing-side surface and intentionally does NOT apply the hidden filter — hidden posts appear there. _includes/post_pagination.html skips hidden posts. Cases (5) and (2) can stack: a /private/ path post with hidden: true is hidden from every listing AND its body is redirected on direct URL access (effectively fully private — used for archived posts). |
Triggers, single-source:
/private/ is the only trigger. Frontmatter locked / private are not used (removed during the redesign — path-based was already the de-facto rule, and the OR conditions in _includes/archive-single.html / _layouts/single.html still accept them defensively, but no posts set them).hidden: true is the only trigger. All general listings apply where_exp: "post", "post.hidden != true"; _includes/post_pagination.html also filters it out so the previous/next pager skips hidden posts. Track-specific entry-point pages (currently only /posts/remode/) are the deliberate exception — they intentionally omit the filter so hidden posts have a listing-side surface.disable_link: true (case 3) and private: true (filters the entry out of home Recent Presentations) are independent metadata in _data/slides_public.json.Code locations:
_includes/archive-single.html:13-29 — is_private_post OR-detection + URL replacement to /posts/private/._layouts/single.html:24-29 — same OR-detection, sets post-no-select class and disables TOC._layouts/home.html:104-110 — same pattern in the Recent Posts grid._pages/talks.html:489-518 — disable_link static-card branch.404.html — fallback page with Go Back (history.back with home fallback) + Go to Main._includes/post_pagination.html — builds previous/next from site.categories[primary_category] and excludes post.hidden == true (and /private/-path posts) from the scoped list.Note: pod-card--locked CSS keeps opacity: 0.85 plus disabled hover/transform but no longer sets cursor: not-allowed, since case (2) is actually clickable (it redirects). Cursor-based UX is reserved for case (3) only.
The 5 cases above govern per-post visibility. Where a Public post appears is a separate axis — multiple track listings each apply their own filter:
| Page | Filter | Hidden posts shown? |
|---|---|---|
/posts/ |
site.categories.log + hidden != true + limit: 5 |
no |
/posts/list/ |
all posts + hidden != true |
no |
/posts/{2023…2026}/ |
site.categories.pod, year-scoped + hidden != true |
no |
/posts/kanana-o/ |
site.tags.kanana + hidden != true |
no (general track) |
/posts/remode/ |
site.tags.remode (no hidden filter — entry-point exception) |
yes |
General listings must include hidden != true; otherwise case (5) leaks. The lone exception is a track-specific entry-point page that exists because its posts are hidden — currently only /posts/remode/. If a future track exists for the same purpose (gating its posts behind a single entry URL), omit the filter there too. A Public post can also be absent from /posts/ (pushed out by limit: 5) yet still reachable via direct URL and via tag-track pages; do not infer “blocked” from “missing on main listing” — that is the listing-axis policy, not the 5-case publish-state policy.
When a pod post contains both slide images and paper figures:
Posts already aligned to this rule:
_posts/public/2026/2026-03-04-memoryarena.md_posts/public/2026/2026-03-16-honeybee.md_posts/public/2026/2026-03-24-timeomni1.md_posts/public/2026/2026-04-03-modality-gap-robustness.mdheader.teaser is used for cards, listings, search results, and OG preview images.header.teaser is not the same as the single-post hero image.header.image or header.overlay_image in the layout, not header.teaser.image%200.pngimage 0.pngmodality-gap-robustness_posts/public/2026/2026-04-03-modality-gap-robustness.md/assets/pod/2026/20260403-modality-gap-robustness/date: 2026-04-03permalink: /posts/20260403-modality-gap-robustness/header.teaser: /assets/pod/2026/20260403-modality-gap-robustness/slide/Slide11.jpegslide/Slide11.jpegtimeomni1