From c0a23fa60bc6c1f07372f51933a61a4f6acce803 Mon Sep 17 00:00:00 2001 From: Yvette Carlisle Date: Thu, 11 Jun 2026 00:21:41 +0800 Subject: [PATCH] {"schema":"decodex/commit/1","summary":"Remove reset watch and historical plans","authority":"manual"} --- README.md | 1 - dev/skills/README.md | 6 +- dev/skills/rate-limit-reset-watch/SKILL.md | 96 ---- .../rate-limit-reset-watch/agents/openai.yaml | 4 - docs/index.md | 7 +- docs/plans/.gitkeep | 0 .../2026-03-20_decodex-clean-feed-pass.json | 119 ----- ...2026-03-20_decodex-flat-feed-redesign.json | 141 ------ ...26-03-20_decodex-fresh-shell-redesign.json | 119 ----- .../2026-03-20_decodex-layout-tightening.json | 119 ----- .../2026-03-20_decodex-linear-column.json | 239 --------- ...026-03-20_decodex-real-github-signals.json | 112 ----- ...026-03-20_decodex-release-delta-shell.json | 146 ------ ...-20_decodex-tokyo-night-markdown-pass.json | 119 ----- .../2026-03-20_decodex-visual-refresh.json | 147 ------ .../2026-03-21_decodex-116-backfill.json | 153 ------ .../2026-03-21_decodex-brand-assets.json | 86 ---- .../2026-03-21_decodex-header-social-cta.json | 65 --- ...6-03-21_decodex-hourly-github-refresh.json | 170 ------- .../2026-03-21_decodex-iteration-two.json | 189 ------- .../2026-03-21_decodex-pages-deploy.json | 137 ----- ...3-21_decodex-preview-changes-redesign.json | 67 --- ...2026-03-21_decodex-preview-comparator.json | 117 ----- ...03-21_decodex-preview-guided-overview.json | 467 ------------------ .../2026-03-21_decodex-preview-polish.json | 63 --- ...-21_decodex-preview-typography-polish.json | 63 --- ...6-03-21_decodex-project-pages-clarify.json | 83 ---- ...ecodex-release-delta-complete-history.json | 104 ---- .../2026-03-21_decodex-stable-floor.json | 64 --- ...3-21_decodex-tokyo-night-system-theme.json | 116 ----- docs/policy.md | 3 - docs/reference/workspace-layout.md | 5 +- .../run.json | 16 +- docs/spec/index.md | 2 - docs/spec/reset-status.md | 106 ---- site/.astro/content.d.ts | 8 - site/src/components/ResetStatusWidget.astro | 56 --- site/src/components/UtilitySlot.astro | 4 - site/src/content.config.ts | 32 -- site/src/content/reset-status/latest.json | 52 -- site/src/lib/reset-status.ts | 51 -- site/src/pages/index.astro | 11 - site/src/styles/global.css | 91 ---- 43 files changed, 13 insertions(+), 3743 deletions(-) delete mode 100644 dev/skills/rate-limit-reset-watch/SKILL.md delete mode 100644 dev/skills/rate-limit-reset-watch/agents/openai.yaml delete mode 100644 docs/plans/.gitkeep delete mode 100644 docs/plans/2026-03-20_decodex-clean-feed-pass.json delete mode 100644 docs/plans/2026-03-20_decodex-flat-feed-redesign.json delete mode 100644 docs/plans/2026-03-20_decodex-fresh-shell-redesign.json delete mode 100644 docs/plans/2026-03-20_decodex-layout-tightening.json delete mode 100644 docs/plans/2026-03-20_decodex-linear-column.json delete mode 100644 docs/plans/2026-03-20_decodex-real-github-signals.json delete mode 100644 docs/plans/2026-03-20_decodex-release-delta-shell.json delete mode 100644 docs/plans/2026-03-20_decodex-tokyo-night-markdown-pass.json delete mode 100644 docs/plans/2026-03-20_decodex-visual-refresh.json delete mode 100644 docs/plans/2026-03-21_decodex-116-backfill.json delete mode 100644 docs/plans/2026-03-21_decodex-brand-assets.json delete mode 100644 docs/plans/2026-03-21_decodex-header-social-cta.json delete mode 100644 docs/plans/2026-03-21_decodex-hourly-github-refresh.json delete mode 100644 docs/plans/2026-03-21_decodex-iteration-two.json delete mode 100644 docs/plans/2026-03-21_decodex-pages-deploy.json delete mode 100644 docs/plans/2026-03-21_decodex-preview-changes-redesign.json delete mode 100644 docs/plans/2026-03-21_decodex-preview-comparator.json delete mode 100644 docs/plans/2026-03-21_decodex-preview-guided-overview.json delete mode 100644 docs/plans/2026-03-21_decodex-preview-polish.json delete mode 100644 docs/plans/2026-03-21_decodex-preview-typography-polish.json delete mode 100644 docs/plans/2026-03-21_decodex-project-pages-clarify.json delete mode 100644 docs/plans/2026-03-21_decodex-release-delta-complete-history.json delete mode 100644 docs/plans/2026-03-21_decodex-stable-floor.json delete mode 100644 docs/plans/2026-03-21_decodex-tokyo-night-system-theme.json delete mode 100644 docs/spec/reset-status.md delete mode 100644 site/src/components/ResetStatusWidget.astro delete mode 100644 site/src/components/UtilitySlot.astro delete mode 100644 site/src/content/reset-status/latest.json delete mode 100644 site/src/lib/reset-status.ts diff --git a/README.md b/README.md index f7180e91d..290419f77 100644 --- a/README.md +++ b/README.md @@ -334,7 +334,6 @@ The tracked workspace currently keeps: - `docs/decisions/` as the durable design-rationale lane - `docs/research/` as machine-authored research artifacts used by shipped research tooling -- `docs/plans/` as historical saved plan artifacts from the static-site bootstrap - `dev/` as local development helpers outside `dev/skills/`, such as the operator dashboard mock server - `assets/` as generated Decodex App icon source notes, Icon Composer foreground, diff --git a/dev/skills/README.md b/dev/skills/README.md index 554687714..19f83aba8 100644 --- a/dev/skills/README.md +++ b/dev/skills/README.md @@ -23,8 +23,6 @@ content or follow-up work: `decision.worthiness = "publish"` or explicit operator handoffs that name checked Radar artifacts, then write a low-frequency `social_post/v1` publication, block, skip, or failure record for `@decodexspace`. -6. `rate-limit-reset-watch`: review today's `@thsottiaux` X posts with AI semantic - judgment and refresh the homepage `reset_status/v1` artifact. Use only the skills needed for the current artifact. Do not publish a social post just because a signal exists. @@ -63,6 +61,6 @@ release metadata, compare metadata, and caveats create real reader value. Checked-in contracts for this workflow are `upstream_review_queue/v1`, `upstream_review/v1`, `github_change_bundle/v1`, `analysis_draft`, `signal_entry/v1`, `upstream_impact/v1`, `release_delta/v1`, `social_candidate/v1`, `social_post/v1`, and -`reset_status/v1`. The triage, code-analysis, release-analysis, and reset-watch skills -are reasoning passes unless their conclusions are promoted into one of those +their supporting generated artifacts. The triage, code-analysis, and release-analysis +skills are reasoning passes unless their conclusions are promoted into one of those contracts. diff --git a/dev/skills/rate-limit-reset-watch/SKILL.md b/dev/skills/rate-limit-reset-watch/SKILL.md deleted file mode 100644 index 16ca87b32..000000000 --- a/dev/skills/rate-limit-reset-watch/SKILL.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -name: rate-limit-reset-watch -description: Use when checking whether today's @thsottiaux X posts semantically indicate a rate-limit reset, quota reset, message-cap recovery, or reset window, and when writing the Decodex homepage reset_status/v1 artifact under site/src/content/reset-status/. ---- - -# Rate Limit Reset Watch - -Use this repo-local skill to refresh and publish the homepage -`Rate limit reset today?` signal. The job is semantic judgment, not keyword matching, -and the output is public site content, not a monitor-only report. - -## Authority Boundary - -- `docs/spec/reset-status.md` owns the artifact schema, semantic judgment rule, and - homepage publication boundary. -- This skill owns the repo-local agent procedure for collecting evidence, writing the - artifact, validating it, cleaning up Chrome/X tabs, and publishing a changed artifact - when credentials allow. -- The outer automation configuration owns schedule, automation memory location, - notification/inbox behavior, and any run-specific prohibitions or handoff wording. -- Automation memory is run history only. Do not treat it as policy when it conflicts - with the spec, this skill, or the current automation prompt. - -## Inputs - -- Source account: `https://x.com/thsottiaux` -- Artifact: `site/src/content/reset-status/latest.json` -- Spec: `docs/spec/reset-status.md` -- Default timezone for "today": `Asia/Shanghai`, unless the user gives another one. - -## Workflow - -1. Determine the `observed_for_date` in the selected timezone. -2. Collect today's visible `@thsottiaux` candidates from X. - - Prefer `@Chrome` when logged-in X access is needed. - - Use profile results and X search such as `from:thsottiaux since:YYYY-MM-DD until:YYYY-MM-DD`. - - If exact keyword search is useful, use it only as supporting evidence, not as the decision. -3. Read the candidate posts, quotes, and immediate thread context needed to understand them. -4. Decide semantically whether any candidate says rate limits reset, quota windows reset, - message caps recovered, or users should wait for a reset window. -5. Write `site/src/content/reset-status/latest.json` with `schema = "reset_status/v1"`. -6. Close or release Chrome/X tabs opened for search, profile review, or thread context. - Keep a tab only when login, CAPTCHA, or another human-only X state must be handed off. -7. Run the site content/type validation after updating the artifact. -8. If the artifact changed and validation passes, publish the content update through the - repository's Git path so the static homepage can deploy the new answer. Do not stop at - an uncommitted local artifact unless Git authentication, validation, or another - publish blocker prevents a safe push. - -## Publication Rules - -The reset-status artifact is homepage content. A successful automation run that changes -the artifact should leave the repository in a publishable state and, when credentials -allow, push the checked-in content update to the branch that feeds the static site -deployment. - -Do not move the AI semantic judgment into GitHub Actions or another keyword-only -scheduled job. GitHub Actions may build and deploy checked-in content, but the semantic -review remains an agent/browser observation step. - -When publishing is blocked, report the artifact state, validation state, and exact -publish blocker so a later run or human can finish the content update. - -Keep schedule-specific instructions in the outer automation configuration. This skill -should not encode cron cadence, notification routing, automation IDs, or memory-file -paths. - -## Decision Rules - -Return `yes` when the reviewed content semantically points to reset behavior, even if the -post never says the exact phrase `rate limit reset`. - -Return `no` when today's visible posts were reviewable and none are about reset behavior. - -Return `unknown` when X access, search, timeline loading, deleted posts, login state, or -insufficient visible candidates make the judgment unreliable. - -Do not mark `yes` for generic use of words like `reset`, `limit`, `rate`, `quota`, -or `window` unless the surrounding meaning is rate-limit reset behavior. - -Do not mark `yes` for unrelated posts about releases, performance, browser improvements, -model quality, screenshots, or product announcements. - -## Artifact Guidance - -Keep `rationale` short and evidence-based. Summarize reviewed posts instead of copying -long X text into the artifact. - -Use `evidence_posts[].relevance` as: - -- `related`: supports a `yes` judgment -- `not_related`: reviewed but does not support reset -- `uncertain`: could not be interpreted confidently - -If the artifact is `unknown`, explain the blocker in `rationale` and include any partial -candidate summaries that were visible. diff --git a/dev/skills/rate-limit-reset-watch/agents/openai.yaml b/dev/skills/rate-limit-reset-watch/agents/openai.yaml deleted file mode 100644 index 88d5fdd5d..000000000 --- a/dev/skills/rate-limit-reset-watch/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "Rate Limit Reset Watch" - short_description: "Judge whether today contains a semantic rate-limit-reset post." - default_prompt: "Check today’s @thsottiaux X posts and write a reset-status artifact." diff --git a/docs/index.md b/docs/index.md index cec4e98b3..5326cb4be 100644 --- a/docs/index.md +++ b/docs/index.md @@ -23,8 +23,6 @@ The split below is by question type, not by human-versus-agent audience. - `docs/reference/index.md` when the question is "how is it currently organized or implemented?" - `docs/decisions/index.md` when the question is "why was it designed this way?" -- Use `docs/plans/` only when a planning tool or historical execution workflow - explicitly points to a saved plan artifact there. ## Routing matrix @@ -73,8 +71,6 @@ The split below is by question type, not by human-versus-agent audience. - Need repository execution defaults or tracker-state policy -> registered project `WORKFLOW.md` - Need repo task names or automation entrypoints -> `Makefile.toml` -- Need historical saved execution plans from the original static-site bootstrap -> - `docs/plans/` ## Retrieval rules @@ -93,7 +89,6 @@ The split below is by question type, not by human-versus-agent audience. - Start each document with a short routing header that says what the document is for, when to read it, and what it does not cover. - Keep links explicit and stable. -- Treat `docs/research/` and `docs/plans/` as supporting or historical evidence, not as - primary authority lanes. +- Treat `docs/research/` as supporting evidence, not as a primary authority lane. - Treat research output as latent until accepted or promoted through the loop-runtime contract in `docs/spec/loop-runtime.md`. diff --git a/docs/plans/.gitkeep b/docs/plans/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/plans/2026-03-20_decodex-clean-feed-pass.json b/docs/plans/2026-03-20_decodex-clean-feed-pass.json deleted file mode 100644 index 80bb1b5f0..000000000 --- a/docs/plans/2026-03-20_decodex-clean-feed-pass.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-clean-feed-pass-2026-03-20", - "goal": "Reduce homepage clutter by cutting nonessential chrome and moving non-primary signal details behind immediate expansion so the Decodex feed reads closer to the clean changelog pages the user prefers.", - "success_criteria": [ - "The homepage shows fewer competing surfaces before the first signal entry.", - "Each signal entry exposes the required contract fields while moving secondary evidence and source detail behind a cleaner immediate-expansion affordance.", - "The utility slot no longer competes with the top of the feed.", - "The page still builds and checks cleanly, and a fresh screenshot shows a noticeably cleaner feed." - ], - "constraints": [ - "Do not add routes or change the one-page MVP shape.", - "Keep the required signal fields visible on the homepage per the site contract.", - "Keep source references reachable from the card or immediate expansion state.", - "Prefer removing chrome and lowering information density over adding new components." - ], - "defaults": { - "feed_model": "reduced changelog feed", - "filters": [ - "all", - "github", - "try-now", - "high-impact" - ], - "routes": [ - "/" - ] - }, - "tasks": [ - { - "id": "task-01-reduce-homepage-chrome", - "title": "Reduce the homepage chrome", - "status": "done", - "objective": "Remove or demote nonessential introductory surfaces so the feed reaches the first signal faster.", - "inputs": [ - "Current homepage layout", - "The scan-first site contract" - ], - "outputs": [ - "A leaner header and feed toolbar, plus a demoted utility area" - ], - "verification": [ - "The top of the page contains materially less chrome before the first entry." - ], - "depends_on": [] - }, - { - "id": "task-02-reduce-entry-clutter", - "title": "Reduce signal entry clutter", - "status": "done", - "objective": "Keep only the primary reading flow visible in each signal entry and move secondary source/evidence detail behind immediate expansion.", - "inputs": [ - "Task 01 reduced homepage chrome", - "Current signal entry rendering", - "The signal-card rendering contract" - ], - "outputs": [ - "A cleaner signal entry with less always-visible detail" - ], - "verification": [ - "The entry shows title, meta, summary, why-it-matters, and action state without click, while secondary details no longer dominate the initial view." - ], - "depends_on": [ - "task-01-reduce-homepage-chrome" - ] - }, - { - "id": "task-03-verify-and-capture", - "title": "Verify and capture the cleaner feed", - "status": "done", - "objective": "Run the site checks and capture a new screenshot of the cleaner homepage.", - "inputs": [ - "Task 02 reduced signal entry clutter" - ], - "outputs": [ - "Passing build and check evidence", - "A fresh screenshot of the cleaner feed" - ], - "verification": [ - "`npm run build` passes from site/", - "`npm run check` passes from site/", - "The screenshot shows less visible chrome and fewer always-open detail blocks." - ], - "depends_on": [ - "task-02-reduce-entry-clutter" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The immediate-expansion approach still leaves the homepage visually noisy", - "The user wants a dedicated archive or detail route instead of more homepage compression", - "The signal-card contract needs to change to support the cleaner design" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Removed homepage header facts, flattened the hero, and moved the utility slot below the feed so the first signal arrives faster.", - "Collapsed source refs and proof points into an immediate-expansion details block while keeping summary, why-it-matters, and action state visible.", - "`npm run build` passed from site/ on 2026-03-20.", - "`npm run check` passed from site/ on 2026-03-20.", - "Captured /tmp/decodex-homepage-clean-feed.png from the rebuilt local site served at http://127.0.0.1:4411/." - ], - "last_updated": "2026-03-20T05:18:00Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The flat-feed redesign is better than the earlier dashboard version, but the homepage still feels cluttered compared with the cleaner example changelog pages.", - "direction": "Keep the flatter feed structure but remove more top-of-page chrome and hide secondary entry detail behind immediate expansion.", - "lane": "Reuse .workspaces/feat-decodex-github-first for the cleanup pass." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-flat-feed-redesign.json b/docs/plans/2026-03-20_decodex-flat-feed-redesign.json deleted file mode 100644 index 4b457a645..000000000 --- a/docs/plans/2026-03-20_decodex-flat-feed-redesign.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-flat-feed-redesign-2026-03-20", - "goal": "Redesign the Decodex homepage from a nested-card dashboard into a flatter changelog-style feed inspired by GitHub, Linear, and Vercel while preserving the one-page GitHub-first MVP contract.", - "success_criteria": [ - "The homepage reads as a flat changelog feed rather than a dashboard of competing cards.", - "Each signal renders as one coherent entry with clear scanning order: metadata, title, body, action, and footer.", - "The utility area is lightweight and does not compete with the main feed.", - "The resulting page still builds and checks cleanly, and a fresh screenshot shows the flatter feed structure." - ], - "constraints": [ - "Do not add public routes or expand beyond the current one-page MVP.", - "Keep the GitHub-first signal content model and required signal-card fields intact.", - "Use GitHub for list architecture, Linear for rhythm and grouping, and Vercel for actionable entry content, without copying any one site verbatim.", - "Prefer flatter surfaces, fewer nested boxes, and lighter chrome over additional decorative effects." - ], - "defaults": { - "feed_model": "flat changelog entries", - "routes": [ - "/" - ], - "filters": [ - "all", - "github", - "try-now", - "high-impact" - ] - }, - "tasks": [ - { - "id": "task-01-lock-flat-feed-structure", - "title": "Lock the flat-feed structure", - "status": "done", - "objective": "Translate the GitHub, Linear, and Vercel changelog research into a Decodex-specific homepage structure with fewer containers and a clearer entry rhythm.", - "inputs": [ - "Current homepage implementation", - "Site contract", - "Recent changelog research" - ], - "outputs": [ - "A flat-feed layout model embedded in the saved plan and implementation choices" - ], - "verification": [ - "The chosen structure makes clear what belongs to the page chrome versus what belongs to each signal entry." - ], - "depends_on": [] - }, - { - "id": "task-02-flatten-homepage-chrome", - "title": "Flatten the homepage chrome", - "status": "done", - "objective": "Reduce the homepage framing into a simpler header, lighter filter area, and compact utility strip so the feed itself is the dominant surface.", - "inputs": [ - "Task 01 flat-feed structure", - "Current homepage and utility components" - ], - "outputs": [ - "A flatter page shell with less dashboard-like chrome" - ], - "verification": [ - "The homepage no longer has competing hero, sidebar, and feed surfaces." - ], - "depends_on": [ - "task-01-lock-flat-feed-structure" - ] - }, - { - "id": "task-03-rebuild-signal-entry-layout", - "title": "Rebuild the signal entry layout", - "status": "done", - "objective": "Turn each signal from nested sub-cards into a single changelog-style entry with one reading flow and an inline action/evidence footer.", - "inputs": [ - "Task 02 flattened homepage chrome", - "Current signal entry rendering" - ], - "outputs": [ - "A flatter signal entry component and any feed-grouping helpers needed for the homepage" - ], - "verification": [ - "Each signal is visibly one entry rather than a set of stacked mini-cards.", - "The required summary, why-it-matters, and action state remain visible without a click." - ], - "depends_on": [ - "task-02-flatten-homepage-chrome" - ] - }, - { - "id": "task-04-verify-and-capture-redesign", - "title": "Verify and capture the flat-feed redesign", - "status": "done", - "objective": "Run the site checks and capture a fresh screenshot showing the flatter feed structure in the built output.", - "inputs": [ - "Task 03 rebuilt signal entry layout" - ], - "outputs": [ - "Passing build and check evidence", - "A fresh screenshot of the redesigned homepage" - ], - "verification": [ - "`npm run build` passes from site/", - "`npm run check` passes from site/", - "The screenshot clearly shows the page as a flatter changelog feed." - ], - "depends_on": [ - "task-03-rebuild-signal-entry-layout" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The flatter feed model no longer satisfies the required signal-card contract", - "The user wants to prioritize a dedicated archive route as part of the redesign", - "The utility area still needs to behave like a sidebar rather than a compact strip" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Locked the redesign around a flatter changelog-feed model: GitHub-style list architecture, Linear-style rhythm and grouping, and Vercel-style try-now/action copy inside each signal.", - "Flattened the homepage chrome in site/src/pages/index.astro by removing the competing hero/sidebar layout, switching to a single-column feed shell, and turning the utility area into a compact inline status strip.", - "Rebuilt site/src/components/SignalCard.astro into a single changelog-style entry with one reading flow for metadata, title, summary, why-it-matters, action, evidence, and source refs instead of nested sub-cards.", - "Updated feed helpers and shared styles in site/src/lib/signal-feed.ts and site/src/styles/global.css to support month grouping, flatter surfaces, lighter tabs, and simpler feed-oriented spacing.", - "`npm run build` passed from site/ on 2026-03-20 and produced the static output successfully, with the same non-blocking Astro/Vite warning still present.", - "`npm run check` passed from site/ on 2026-03-20 with 0 errors, 0 warnings, and 0 hints.", - "Captured a fresh built-page screenshot at /tmp/decodex-homepage-flat-feed.png after serving site/dist locally on 127.0.0.1:4411." - ], - "last_updated": "2026-03-20T04:21:59Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The homepage still feels like a set of cards inside cards, which makes it harder to scan like the changelog pages the user prefers.", - "direction": "Use GitHub for flat list architecture, Linear for entry rhythm, and Vercel for how-to-try style content within a simpler single-column feed.", - "lane": "Reuse .workspaces/feat-decodex-github-first for the feed redesign." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-fresh-shell-redesign.json b/docs/plans/2026-03-20_decodex-fresh-shell-redesign.json deleted file mode 100644 index ecad9d562..000000000 --- a/docs/plans/2026-03-20_decodex-fresh-shell-redesign.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-fresh-shell-redesign-2026-03-20", - "goal": "Replace the current editorial shell with a new changelog-native homepage model that feels closer to GitHub, Linear, and Vercel: compact masthead, restrained filters, and timeline-style signal entries instead of a large article-like hero.", - "success_criteria": [ - "The homepage no longer opens with a large hero headline that dominates the page.", - "The primary feed uses a fresh layout model, not a patch of the current shell, and reads closer to a product changelog than a blog or newspaper page.", - "Signal entries still surface the required contract fields and action state while fitting the new rail or timeline style.", - "The rebuilt page passes build and check, and a fresh screenshot shows a clearly different visual model." - ], - "constraints": [ - "Stay within the one-page MVP route budget.", - "Do not regress the markdown rendering or source reachability added in earlier passes.", - "Prefer strong structural changes over incremental decoration tweaks.", - "Keep the design clean enough to scale once many signals exist." - ], - "defaults": { - "reference_pages": [ - "GitHub Changelog", - "Linear Changelog", - "Vercel Changelog" - ], - "routes": [ - "/" - ], - "shell_model": "compact masthead with timeline entries" - }, - "tasks": [ - { - "id": "task-01-lock-shell-model", - "title": "Lock a new shell model from research", - "status": "done", - "objective": "Translate the research on GitHub, Linear, and Vercel into a concrete homepage shell model that avoids the current oversized editorial opening.", - "inputs": [ - "Current homepage layout", - "Research findings from GitHub, Linear, and Vercel changelog pages" - ], - "outputs": [ - "A concrete new layout direction for the homepage and signal entry structure" - ], - "verification": [ - "The redesign direction is materially different from the current hero-led shell." - ], - "depends_on": [] - }, - { - "id": "task-02-rebuild-page-shell", - "title": "Rebuild the homepage shell and signal layout", - "status": "done", - "objective": "Implement the new shell model with a compact masthead, restrained filter row, and rail or timeline-style signal entries.", - "inputs": [ - "Task 01 locked shell model", - "Current index, signal card, and global styles" - ], - "outputs": [ - "A redesigned homepage shell and a redesigned signal entry component" - ], - "verification": [ - "The page opens with a compact top area and clearly different signal entry layout.", - "The result no longer reads like a newspaper-style article page." - ], - "depends_on": [ - "task-01-lock-shell-model" - ] - }, - { - "id": "task-03-verify-and-capture", - "title": "Verify and capture the fresh shell redesign", - "status": "done", - "objective": "Run the site checks and capture a new screenshot of the redesigned homepage.", - "inputs": [ - "Task 02 rebuilt homepage shell" - ], - "outputs": [ - "Passing build and check evidence", - "A fresh screenshot of the redesigned shell" - ], - "verification": [ - "`npm run build` passes from site/", - "`npm run check` passes from site/", - "The screenshot shows a clearly different shell model." - ], - "depends_on": [ - "task-02-rebuild-page-shell" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The new shell still feels too editorial after the first implementation pass", - "The timeline or rail entry model cannot carry the required signal fields cleanly", - "The user wants a multi-page archive model instead of a single high-focus homepage" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Research across GitHub, Linear, and Vercel changelog patterns pointed toward compact top chrome and timeline or rail-style entries instead of a large hero-led editorial shell.", - "Rebuilt the homepage around a compact masthead, inline utility chips, and a left-rail signal entry layout that separates date and taxonomy from the main reading column.", - "Kept markdown-aware rendering and source reachability while replacing the previous article-like shell entirely.", - "`npm run build` passed from site/ on 2026-03-20.", - "`npm run check` passed from site/ on 2026-03-20.", - "Captured /tmp/decodex-homepage-fresh-shell.png from the rebuilt local site served at http://127.0.0.1:4411/." - ], - "last_updated": "2026-03-20T06:42:00Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The current homepage still feels like an oversized editorial page and not like the cleaner changelog references the user prefers.", - "direction": "Adopt a fresh changelog-native shell with a compact masthead and rail or timeline-based signal entries.", - "lane": "Reuse .workspaces/feat-decodex-github-first for the full shell redesign." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-layout-tightening.json b/docs/plans/2026-03-20_decodex-layout-tightening.json deleted file mode 100644 index b08418515..000000000 --- a/docs/plans/2026-03-20_decodex-layout-tightening.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-layout-tightening-2026-03-20", - "goal": "Tighten the Decodex homepage layout so the first signal becomes the clear focal point without undoing the recent visual refresh or expanding the one-page MVP.", - "success_criteria": [ - "The homepage header is visibly shorter and less dominant than the current version.", - "The first signal enters the viewport earlier and reads as the primary content focus.", - "The utility rail is still present but materially less competitive with the signal feed.", - "The tightened layout still passes the Astro build and check commands, and a fresh screenshot shows the new balance." - ], - "constraints": [ - "Do not add routes, new sections, or client-side behavior.", - "Keep the current cool visual language and feed/filter contract intact.", - "Make incremental layout changes only; do not redesign the entire page again.", - "Preserve the required signal-card fields and the compact utility-slot role from the site contract." - ], - "defaults": { - "layout_model": "compressed header plus featured first signal", - "routes": [ - "/" - ], - "filters": [ - "all", - "github", - "try-now", - "high-impact" - ] - }, - "tasks": [ - { - "id": "task-01-tighten-header-band", - "title": "Tighten the header band", - "status": "done", - "objective": "Reduce the hero footprint and convert it into a compact positioning-and-status strip rather than the dominant first-screen surface.", - "inputs": [ - "Current homepage hero layout", - "The scan-first homepage contract" - ], - "outputs": [ - "A shorter header with less copy and lighter supporting metrics" - ], - "verification": [ - "The header occupies materially less vertical space on desktop while retaining the positioning line." - ], - "depends_on": [] - }, - { - "id": "task-02-rebalance-feed-and-utility", - "title": "Rebalance the feed and utility rail", - "status": "done", - "objective": "Promote the first signal as the main visual target and demote the utility rail into a smaller supporting status surface.", - "inputs": [ - "Task 01 tightened header", - "Current feed and utility components" - ], - "outputs": [ - "Adjusted layout proportions and utility treatment that favor the main signal feed" - ], - "verification": [ - "The utility rail is visibly smaller and more auxiliary than the first signal." - ], - "depends_on": [ - "task-01-tighten-header-band" - ] - }, - { - "id": "task-03-verify-and-capture", - "title": "Verify and capture the tightened layout", - "status": "done", - "objective": "Run the site checks and capture a fresh built-page screenshot to confirm the layout improvement.", - "inputs": [ - "Task 02 rebalanced homepage" - ], - "outputs": [ - "Passing build and check evidence", - "A fresh screenshot of the tightened layout" - ], - "verification": [ - "`npm run build` passes from site/", - "`npm run check` passes from site/", - "The screenshot shows the first signal entering the viewport earlier than before." - ], - "depends_on": [ - "task-02-rebalance-feed-and-utility" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The smaller-header approach harms the product identity too much", - "The utility rail cannot be demoted without changing the site contract", - "The user wants a different layout model than a featured first-signal page" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Tightened the homepage header in site/src/pages/index.astro by reducing heading scale, shortening supporting copy, compressing the metric tiles, and shrinking the lane-status panel so the hero behaves like a shorter header band.", - "Rebalanced the feed and utility layout in site/src/pages/index.astro and site/src/components/UtilitySlot.astro so the feed enters earlier, the right rail is narrower, and the utility tile reads as auxiliary status instead of a competing content block.", - "Updated spacing and size tokens in site/src/styles/global.css to reduce hero, metric, and utility vertical mass without changing the colder product-terminal visual language.", - "`npm run build` passed from site/ on 2026-03-20 and produced the static output successfully, with the same non-blocking Astro/Vite warning still present.", - "`npm run check` passed from site/ on 2026-03-20 with 0 errors, 0 warnings, and 0 hints.", - "Captured a fresh built-page screenshot at /tmp/decodex-homepage-tightened.png after serving site/dist locally on 127.0.0.1:4411." - ], - "last_updated": "2026-03-20T03:51:27Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The refreshed homepage still gives too much first-screen weight to the header and utility rail, delaying the first signal.", - "direction": "Keep the cold product-terminal styling but compress the header and make the first signal the dominant focal point.", - "lane": "Reuse .workspaces/feat-decodex-github-first for this incremental tightening pass." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-linear-column.json b/docs/plans/2026-03-20_decodex-linear-column.json deleted file mode 100644 index 1ae50d232..000000000 --- a/docs/plans/2026-03-20_decodex-linear-column.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-github-first-foundation-2026-03-20", - "goal": "Convert the Rust-oriented template repository into a GitHub-first Decodex foundation by defining the governing contracts, reshaping the repo for a static site under an isolated site root, and preparing the first GitHub signal workflow.", - "success_criteria": [ - "The repository no longer assumes a Rust-only product surface; the intended site and tooling roots are explicitly defined and created.", - "Normative specs exist for the repo layout, the one-page Decodex site contract, the GitHub change bundle input model, and the published signal entry model.", - "A guide exists for the local manual GitHub analysis workflow, including the boundary between local AI analysis and CI-driven static-site deployment.", - "The saved plan clearly prioritizes the GitHub content lane first, using PRs as the primary semantic source and commits as supporting evidence.", - "The repo is ready for the next execution steps: site scaffolding under `site/`, GitHub bundle tooling under `tools/`, seeded signal content, and GitHub Pages deployment." - ], - "constraints": [ - "Prioritize the GitHub lane first; community notes and widgets remain follow-on work.", - "Use PR-first analysis with commit and diff data as supporting evidence, not as the sole narrative source.", - "Keep AI analysis local and manually triggered through Codex; CI must build and deploy only.", - "Keep the product constrained to one primary page and at most one secondary reading surface.", - "Avoid collisions with the template repo's root Rust layout by isolating the site under `site/` and reusable automation under `tools/`." - ], - "defaults": { - "analysis_workflow": { - "ci_role": "build-and-deploy-only", - "orchestration": "thin-skill-plus-scripts", - "primary_source": "GitHub PR bundle", - "trigger": "local-manual" - }, - "deploy_target": { - "platform": "GitHub Pages", - "trigger": "push-to-default-branch" - }, - "feed_filters": [ - "all", - "github", - "try-now", - "high-impact" - ], - "repo_layout": { - "docs_root": "docs", - "legacy_template_surface": "root Rust scaffold", - "site_root": "site", - "tools_root": "tools" - }, - "signal_lanes": [ - "github" - ] - }, - "tasks": [ - { - "id": "task-01-write-normative-contracts", - "title": "Write the governing contracts for the GitHub-first MVP", - "status": "done", - "objective": "Define the normative docs/spec and docs/guide documents that lock the repo layout, page shape, GitHub change-bundle model, signal-entry model, and local analysis workflow.", - "inputs": [ - "User direction to deliver the GitHub lane first", - "Current docs routers and governance rules", - "Research conclusions about Linear-style feed structure and GitHub-first signal analysis" - ], - "outputs": [ - "Spec documents for repo layout, site contract, GitHub change bundle, and signal entry", - "A guide for the local manual GitHub analysis and publish workflow", - "Updated spec and guide indexes" - ], - "verification": [ - "Each new spec starts with the required routing header and defines explicit field names and invariants", - "The guide links back to the governing specs instead of duplicating contracts", - "The docs indexes route future work to the new documents" - ], - "depends_on": [] - }, - { - "id": "task-02-adjust-repo-layout", - "title": "Adjust the template repo layout for site and tooling work", - "status": "done", - "objective": "Create the top-level structure needed for the static site and GitHub tooling without colliding with the template repo's root Rust scaffold.", - "inputs": [ - "Task 01 governing contracts", - "Current root layout with Rust-oriented template files" - ], - "outputs": [ - "A `site/` root for the future static site", - "A `tools/` root for GitHub analysis scripts and related automation", - "Any small metadata or ignore updates needed to keep the new structure coherent" - ], - "verification": [ - "The new top-level roots exist and match the repo-layout spec", - "No new layout decision conflicts with the root Rust template files" - ], - "depends_on": [ - "task-01-write-normative-contracts" - ] - }, - { - "id": "task-03-scaffold-site-foundation", - "title": "Scaffold the static site foundation under site", - "status": "done", - "objective": "Initialize the site framework under `site/` so the Decodex front end can evolve independently of the template repo's Rust root.", - "inputs": [ - "Task 01 governing contracts", - "Task 02 repo layout" - ], - "outputs": [ - "A buildable site scaffold under `site/`", - "A base route shell aligned to the one-page Decodex contract" - ], - "verification": [ - "The site toolchain installs cleanly", - "A production build succeeds from the isolated site root" - ], - "depends_on": [ - "task-02-adjust-repo-layout" - ] - }, - { - "id": "task-04-build-github-change-bundle", - "title": "Build the GitHub change-bundle and seeded signal workflow", - "status": "done", - "objective": "Implement the first GitHub-first content flow by collecting PR-centered change bundles and rendering seeded signal entries from them.", - "inputs": [ - "Task 01 GitHub bundle and signal-entry specs", - "Task 02 tools root", - "Task 03 site scaffold" - ], - "outputs": [ - "Bundle-building scripts under `tools/`", - "Seed signal data for the GitHub lane", - "Validation hooks for the signal-entry format" - ], - "verification": [ - "A GitHub change bundle can be built with PR-first context and commit evidence", - "At least one seeded signal renders from the bundle-backed content format" - ], - "depends_on": [ - "task-02-adjust-repo-layout", - "task-03-scaffold-site-foundation" - ] - }, - { - "id": "task-05-build-github-homepage-feed", - "title": "Build the first homepage feed for GitHub signals", - "status": "done", - "objective": "Implement the homepage as a compact GitHub-first Decodex feed with lightweight filtering and the required signal-card hierarchy.", - "inputs": [ - "Task 01 site contract", - "Task 04 seeded signal data" - ], - "outputs": [ - "A homepage feed for GitHub signals", - "Signal-card rendering for what changed, why it matters, and how to try" - ], - "verification": [ - "Desktop and mobile layouts preserve scan-first readability", - "The page stays within the one-primary-page constraint" - ], - "depends_on": [ - "task-04-build-github-change-bundle" - ] - }, - { - "id": "task-06-document-local-analysis-and-deploy", - "title": "Document the local analysis loop and Pages deployment boundary", - "status": "done", - "objective": "Document the local Codex analysis loop, the script boundaries, and the GitHub Pages deployment path so the workflow can be repeated without ambiguity.", - "inputs": [ - "Task 01 guide contract", - "Task 04 bundle workflow", - "Task 05 homepage feed" - ], - "outputs": [ - "A guide for local manual GitHub analysis and publishing", - "A clear CI boundary that limits automation to build and deploy" - ], - "verification": [ - "The guide distinguishes local AI analysis from CI deployment", - "The guide references the governing specs for bundle and signal shapes" - ], - "depends_on": [ - "task-04-build-github-change-bundle", - "task-05-build-github-homepage-feed" - ] - }, - { - "id": "task-07-polish-and-validate-github-mvp", - "title": "Polish and validate the GitHub-first MVP", - "status": "done", - "objective": "Run the final validation pass for the GitHub-first Decodex MVP, including docs coherence, site build, and layout quality.", - "inputs": [ - "Task 05 homepage feed", - "Task 06 analysis and deploy guide" - ], - "outputs": [ - "A validated GitHub-first MVP foundation", - "Evidence for docs, build, and layout quality", - "A deferred-work list for post-GitHub lanes" - ], - "verification": [ - "Docs indexes and new specs remain internally consistent", - "The site builds successfully from the isolated site root", - "Repo-native validation commands are updated or extended to cover the new structure" - ], - "depends_on": [ - "task-06-document-local-analysis-and-deploy" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The user changes the GitHub-first delivery priority", - "The isolated `site/` plus `tools/` layout proves incompatible with repo constraints", - "The AI analysis workflow must move into CI or away from local manual execution", - "The one-primary-page constraint is no longer sufficient for the GitHub lane" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Added normative specs for repo layout, site contract, GitHub change bundle, and signal entry.", - "Added a guide for the local GitHub signal workflow and updated the docs routers.", - "Created site/ and tools/ roots to isolate future static-site and GitHub tooling work from the legacy Rust template surface.", - "Scaffolded an isolated Astro + TypeScript + Tailwind site foundation under site/ with a one-page homepage shell, filter bar, utility slot, and signal-card preview.", - "Verified the site foundation with `npm install`, `npm run build`, and `npm run check` from the site root before task-04 wired real content.", - "Added deterministic GitHub tooling under tools/github/ for bundle collection, bundle validation, signal rendering, and signal validation using Python standard library only.", - "Built a real PR-first bundle from openai/codex#15222, rendered a seed signal entry into site/src/content/signals/, and verified the homepage build contains the rendered title from the seeded collection entry.", - "Polished the homepage feed with a real empty-filter state, updated the local workflow guide and README with the concrete script flow, and added `cargo make decodex-checks` as the repo-native MVP validation gate.", - "Validated the final MVP foundation with `cargo make decodex-checks`, standalone bundle and signal validators, placeholder scans, and clean Astro build/check results." - ], - "last_updated": "2026-03-20T02:53:15Z", - "replan_reason": null, - "context_snapshot": { - "delivery_priority": "GitHub lane first", - "layout_direction": "Isolate the new static site under site/ and reusable automation under tools/.", - "repo_state": "Workspace lane now contains the normative docs, isolated site scaffold, deterministic GitHub bundle pipeline, a live homepage feed, and repo-native validation coverage for the GitHub-first MVP." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-real-github-signals.json b/docs/plans/2026-03-20_decodex-real-github-signals.json deleted file mode 100644 index 845723e46..000000000 --- a/docs/plans/2026-03-20_decodex-real-github-signals.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-real-github-signals-2026-03-20", - "goal": "Populate the homepage with several real GitHub-backed Decodex signals built from recent merged openai/codex pull requests instead of relying on a single seed entry.", - "success_criteria": [ - "At least four additional recent PR-backed signal entries are published under site/src/content/signals/.", - "Each new signal is grounded in a validated GitHub change bundle and uses the published signal-entry contract.", - "The selected PRs are user-facing enough to improve homepage density and product believability.", - "The site build and checks pass with the expanded real-data feed." - ], - "constraints": [ - "Use recent merged openai/codex pull requests and primary GitHub evidence only.", - "Prefer capability, behavior-change, and clear try-now entries over internal refactors.", - "Do not invent unverified config flags or speculative try paths.", - "Reuse the deterministic bundle, render, and validation scripts already in the repo." - ], - "defaults": { - "lane": "github", - "repo": "openai/codex", - "target_entry_count": 4 - }, - "tasks": [ - { - "id": "task-01-select-prs", - "title": "Select real PR-backed candidates", - "status": "done", - "objective": "Choose the recent merged PRs that are concrete and user-facing enough to publish as homepage signals.", - "inputs": [ - "Recent merged PR list from openai/codex", - "Validated bundles for candidate PRs" - ], - "outputs": [ - "A shortlist of PRs to publish" - ], - "verification": [ - "The selected PRs all meet at least one editorial gate: capability, behavior change, or clear try-now path." - ], - "depends_on": [] - }, - { - "id": "task-02-draft-and-render-signals", - "title": "Draft and render real signal entries", - "status": "done", - "objective": "Write analysis drafts for the selected PRs, render them to published signal-entry JSON, and validate the result.", - "inputs": [ - "Task 01 selected PRs", - "Bundle data and current signal-entry contract" - ], - "outputs": [ - "Analysis draft JSON files", - "Rendered signal-entry JSON files" - ], - "verification": [ - "Each selected PR has a valid analysis draft and a rendered signal entry that passes validation." - ], - "depends_on": [ - "task-01-select-prs" - ] - }, - { - "id": "task-03-verify-expanded-feed", - "title": "Verify the expanded real-data feed", - "status": "done", - "objective": "Run the site checks against the expanded set of signals and confirm the homepage now carries multiple real entries.", - "inputs": [ - "Task 02 rendered signal entries" - ], - "outputs": [ - "Passing build and validation evidence for the populated feed" - ], - "verification": [ - "`python3 tools/github/validate_signal_entry.py site/src/content/signals` passes", - "`npm run build` passes from site/", - "`npm run check` passes from site/" - ], - "depends_on": [ - "task-02-draft-and-render-signals" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The recent PR shortlist is too internal to reach the target entry count", - "The available evidence is too weak to write confident user-facing summaries", - "The expanded feed shows new layout problems that need a design pass before adding more entries" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Selected PRs #15223, #15195, #15215, #15264, and #15220 from recent merged openai/codex changes because they are capability or behavior-change signals with clear user-facing value.", - "Added five analysis drafts under tools/github/analysis/ and rendered them into five new signal entries under site/src/content/signals/.", - "`python3 tools/github/validate_signal_entry.py site/src/content/signals` passed on 2026-03-20.", - "`npm run build` passed from site/ on 2026-03-20.", - "`npm run check` passed from site/ on 2026-03-20.", - "Captured /tmp/decodex-homepage-real-data.png against the local preview with the expanded real-data feed." - ], - "last_updated": "2026-03-20T06:58:00Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The redesigned homepage still has only one real signal and needs credible density from current GitHub-backed entries.", - "direction": "Publish several recent openai/codex PR-backed signals via the existing local bundle -> analysis -> render -> validate pipeline.", - "lane": "Reuse .workspaces/feat-decodex-github-first for the real-data pass." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-release-delta-shell.json b/docs/plans/2026-03-20_decodex-release-delta-shell.json deleted file mode 100644 index f877f22c7..000000000 --- a/docs/plans/2026-03-20_decodex-release-delta-shell.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-release-delta-shell-2026-03-20", - "goal": "Replace the current homepage shell with a cleaner product-style layout, enlarge the Decodex brand presence, and add a GitHub-backed module that summarizes the latest prerelease versus stable release delta using existing signal analysis.", - "success_criteria": [ - "The homepage uses a new compact shell with a larger Decodex brand treatment and smaller supporting copy instead of the oversized editorial hero.", - "The site renders a release-delta module that shows the latest stable release, latest prerelease, and the tracked signal differences unlocked by the prerelease.", - "Release-delta data is generated from deterministic local tooling plus existing published signals, not manual hardcoded prose.", - "The governing docs/spec surface includes the release-delta contract and workflow updates needed to maintain the feature.", - "Site build and checks pass after the redesign and new data module land." - ], - "constraints": [ - "Keep the site static-site friendly; fetch GitHub data locally into repo content instead of requiring runtime network access.", - "Use official GitHub repository and releases data as the source of truth for stable versus prerelease information.", - "Reuse existing signal entries and commit-backed evidence when summarizing prerelease differences.", - "Do not continue iterating on the oversized hero pattern; rework the shell instead.", - "Leave unrelated repo changes untouched." - ], - "defaults": { - "lane": "github", - "release_tag_prefix": "rust-v", - "repo": "openai/codex" - }, - "tasks": [ - { - "id": "task-01-plan-and-contract", - "title": "Persist plan and define the release-delta contract", - "status": "done", - "objective": "Create the saved execution contract, add the release-delta spec, and document how the feature fits into the existing GitHub-first workflow.", - "inputs": [ - "Current homepage shell and signal-entry contract", - "Current docs/spec and docs/guide indexes" - ], - "outputs": [ - "A validated plan/1 file", - "A normative release-delta spec", - "Updated spec and guide indexes or workflow references" - ], - "verification": [ - "The new plan file validates as plan/1 JSON.", - "docs/spec/index.md routes to the new release-delta contract.", - "The local GitHub workflow or adjacent guide explains how release-delta data is generated." - ], - "depends_on": [] - }, - { - "id": "task-02-release-delta-tooling", - "title": "Add deterministic release-delta data tooling", - "status": "done", - "objective": "Build the local script and site schema needed to fetch the latest stable and prerelease tags, compare them, and map the delta to existing tracked signals.", - "inputs": [ - "Task 01 contract updates", - "Existing GitHub bundle and signal tooling", - "Existing signal content under site/src/content/signals/" - ], - "outputs": [ - "A release-delta builder script", - "A validated release-delta content collection and local JSON artifact" - ], - "verification": [ - "The release-delta JSON validates against the site collection schema.", - "The generated artifact identifies the latest stable and prerelease versions for openai/codex and links them to tracked signals." - ], - "depends_on": [ - "task-01-plan-and-contract" - ] - }, - { - "id": "task-03-homepage-redesign", - "title": "Rebuild the homepage shell around the new hierarchy", - "status": "done", - "objective": "Replace the current editorial-style masthead with a more modern product shell, enlarge the logo treatment, reduce the description weight, and integrate the release-delta module cleanly above the feed.", - "inputs": [ - "Task 02 release-delta data and schema", - "Current site components and styles" - ], - "outputs": [ - "Updated homepage layout and components", - "Reworked styling for the new shell and release-delta module" - ], - "verification": [ - "The homepage renders a larger Decodex brand mark, smaller supporting copy, and a distinct release-delta module without regressing the feed.", - "The feed remains readable with current real GitHub signals." - ], - "depends_on": [ - "task-02-release-delta-tooling" - ] - }, - { - "id": "task-04-verify-and-preview", - "title": "Generate real release data and verify the refreshed site", - "status": "done", - "objective": "Regenerate the live release-delta artifact from GitHub, run the site checks, and refresh the local preview evidence.", - "inputs": [ - "Task 03 homepage redesign", - "Task 02 release-delta tooling" - ], - "outputs": [ - "Current openai/codex release-delta data", - "Passing validation and build evidence", - "An updated local screenshot or preview confirmation" - ], - "verification": [ - "The release-delta builder succeeds for openai/codex.", - "`npm run build` passes from site/.", - "`npm run check` passes from site/." - ], - "depends_on": [ - "task-03-homepage-redesign" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "GitHub release data is missing or does not expose a usable stable versus prerelease pair", - "The release-delta feature needs a different contract than a local content collection", - "The homepage redesign reveals a conflicting information hierarchy that requires a different route or component model" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Added docs/spec/release_delta.md and updated docs/spec/site_contract.md plus docs/spec/index.md so the homepage release-delta module now has a governing contract.", - "Updated docs/guide/local_github_signal_workflow.md to include deterministic release-delta generation after signal publication.", - "Extended site/src/content.config.ts with a releaseDeltas collection and added tools/github/build_release_delta.py plus release-delta validation in tools/github/contracts.py.", - "Generated site/src/content/release-deltas/openai-codex-latest.json from official GitHub releases and compare data, then mapped the prerelease delta back to three published signal entries.", - "Rebuilt site/src/pages/index.astro plus new release-delta and styling components so the homepage now uses a compact product shell with a larger Decodex brand treatment and smaller supporting copy.", - "`npm run build` passed from site/ on 2026-03-20 after the release-delta redesign.", - "`npm run check` passed from site/ on 2026-03-20 after the release-delta redesign.", - "Started a local preview server from site/dist on http://127.0.0.1:4411 and verified it responds with HTTP 200." - ], - "last_updated": "2026-03-20T07:55:00Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The current homepage still reads too much like an editorial page, the Decodex logo is visually underweighted, and the product lacks a clear stable-versus-prerelease summary for adventurous users.", - "direction": "Adopt a cleaner product shell, add a GitHub-backed release-delta module, and keep the feed as the supporting layer beneath that module.", - "lane": "Reuse .workspaces/feat-decodex-github-first." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-tokyo-night-markdown-pass.json b/docs/plans/2026-03-20_decodex-tokyo-night-markdown-pass.json deleted file mode 100644 index 5bf6a9568..000000000 --- a/docs/plans/2026-03-20_decodex-tokyo-night-markdown-pass.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-tokyo-night-markdown-pass-2026-03-20", - "goal": "Refresh the Decodex homepage to a flatter Tokyo Night-inspired palette and render trusted signal copy as markdown so inline code and related formatting show correctly.", - "success_criteria": [ - "The homepage palette reads flatter and more modern, with Tokyo Night-inspired dark surfaces and reduced decorative gradients.", - "Signal title-adjacent copy, why-it-matters, and action text render trusted markdown so backticks become inline code.", - "The feed still preserves the simplified changelog structure from the previous cleanup pass.", - "The site builds and checks cleanly, and a fresh screenshot captures the new palette and markdown rendering." - ], - "constraints": [ - "Keep the one-page MVP structure intact.", - "Do not reintroduce heavy chrome or nested card surfaces.", - "Only render trusted local signal markdown through Astro HTML injection.", - "Prefer a minimal dependency footprint if an additional markdown parser is needed." - ], - "defaults": { - "markdown_scope": [ - "summary", - "why_it_matters", - "how_to_try", - "expected_effect" - ], - "palette": "tokyo-night-flat", - "routes": [ - "/" - ] - }, - "tasks": [ - { - "id": "task-01-shift-palette", - "title": "Shift the homepage palette to a flatter Tokyo Night direction", - "status": "done", - "objective": "Replace the current pale blue gradient surface system with a flatter Tokyo Night-inspired dark palette and simpler borders.", - "inputs": [ - "Current global CSS", - "Tokyo Night palette reference" - ], - "outputs": [ - "A darker, flatter, more modern visual baseline" - ], - "verification": [ - "The rebuilt homepage reads as a darker Tokyo Night-inspired page with less decorative background noise." - ], - "depends_on": [] - }, - { - "id": "task-02-render-markdown", - "title": "Render trusted signal copy as markdown", - "status": "done", - "objective": "Introduce markdown rendering for trusted local signal text so inline code markers and related formatting display correctly in the feed.", - "inputs": [ - "Current signal-card rendering", - "Astro HTML injection guidance" - ], - "outputs": [ - "A shared markdown renderer and markdown-aware signal sections" - ], - "verification": [ - "Backticks in signal copy render as inline code instead of literal characters." - ], - "depends_on": [ - "task-01-shift-palette" - ] - }, - { - "id": "task-03-verify-and-capture", - "title": "Verify and capture the Tokyo Night markdown pass", - "status": "done", - "objective": "Run the site checks and capture a fresh screenshot of the revised homepage.", - "inputs": [ - "Task 02 markdown rendering" - ], - "outputs": [ - "Passing build and check evidence", - "A screenshot of the Tokyo Night markdown feed" - ], - "verification": [ - "`npm run build` passes from site/", - "`npm run check` passes from site/", - "The screenshot shows the darker palette and markdown-rendered inline code." - ], - "depends_on": [ - "task-02-render-markdown" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The darker Tokyo Night palette hurts readability too much", - "Markdown rendering needs to expand beyond trusted local content strings", - "The site needs a light/dark switch instead of a single palette" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Shifted the site to a flatter Tokyo Night-inspired dark palette with reduced background decoration and darker border-only surfaces.", - "Added the `marked` dependency and a shared inline markdown renderer for trusted local signal strings.", - "Rendered signal title, summary, why-it-matters, action text, expected effect, and proof points with markdown-aware inline HTML so backticks become inline code.", - "`npm run build` passed from site/ on 2026-03-20.", - "`npm run check` passed from site/ on 2026-03-20.", - "Captured /tmp/decodex-homepage-tokyo-night.png from the rebuilt local site served at http://127.0.0.1:4411/." - ], - "last_updated": "2026-03-20T06:05:00Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The cleaned feed layout is calmer, but the color system still feels too soft and the signal copy shows literal backticks instead of inline code.", - "direction": "Adopt a flatter Tokyo Night-inspired dark palette and render trusted signal strings as markdown.", - "lane": "Reuse .workspaces/feat-decodex-github-first for the visual and content-rendering pass." - } - } -} diff --git a/docs/plans/2026-03-20_decodex-visual-refresh.json b/docs/plans/2026-03-20_decodex-visual-refresh.json deleted file mode 100644 index 44245d511..000000000 --- a/docs/plans/2026-03-20_decodex-visual-refresh.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-visual-refresh-2026-03-20", - "goal": "Refresh the Decodex homepage from a warm editorial prototype into a colder, more modern product-intelligence terminal while preserving the one-page GitHub-first MVP contract.", - "success_criteria": [ - "The homepage no longer reads as a paper-like editorial page; typography, palette, and surfaces feel closer to a modern product signal terminal.", - "The redesign preserves the one-page route contract, the required filter set, and the visible signal-card fields.", - "Signal cards, filters, and the utility rail have stronger product hierarchy and better scan speed than the previous prototype.", - "The refreshed site still builds and checks cleanly, and a new screenshot confirms the visual shift on the live page." - ], - "constraints": [ - "Do not add new public routes or expand beyond the current one-page MVP.", - "Keep the GitHub-first feed structure and seeded signal content intact while changing presentation.", - "Prefer a modern sans-led system with a cooler palette and harder geometry over the warm editorial aesthetic.", - "Keep the utility rail subordinate to the feed.", - "Do not introduce client-side complexity that changes the static-site model." - ], - "defaults": { - "visual_direction": { - "accent_family": "cool blue-cyan", - "layout_model": "product-intelligence terminal", - "surface_tone": "cool graphite on pale steel", - "typography": "modern sans with mono metadata" - }, - "routes": [ - "/" - ], - "filters": [ - "all", - "github", - "try-now", - "high-impact" - ] - }, - "tasks": [ - { - "id": "task-01-lock-visual-direction", - "title": "Lock the visual direction for the refresh", - "status": "done", - "objective": "Translate the changelog and product-feed research into concrete design constraints for this homepage refresh.", - "inputs": [ - "Current Decodex homepage implementation", - "Prior research conclusions about Linear, Raycast, Vercel, and similar product surfaces", - "The site contract for the one-page MVP" - ], - "outputs": [ - "A concrete visual direction embedded in the saved plan and implementation choices" - ], - "verification": [ - "The chosen direction is explicit enough to guide typography, palette, component geometry, and hierarchy." - ], - "depends_on": [] - }, - { - "id": "task-02-refresh-shared-visual-system", - "title": "Refresh the shared visual system", - "status": "done", - "objective": "Replace the warm editorial base theme with a cooler modern system across the layout shell, background, typography, and shared CSS tokens.", - "inputs": [ - "Task 01 visual direction", - "Current BaseLayout and global styles" - ], - "outputs": [ - "Updated global CSS tokens, typography, and surface system", - "Any shared layout adjustments needed for the new direction" - ], - "verification": [ - "The refreshed visual system applies consistently across the homepage and supporting components." - ], - "depends_on": [ - "task-01-lock-visual-direction" - ] - }, - { - "id": "task-03-rebuild-homepage-components", - "title": "Rebuild the homepage hierarchy and components", - "status": "done", - "objective": "Rework the hero, filter bar, signal cards, utility rail, and empty state so the page reads as a compact product signal terminal.", - "inputs": [ - "Task 02 shared visual system", - "Existing homepage route and components" - ], - "outputs": [ - "A redesigned homepage that still honors the current feed contract and filters" - ], - "verification": [ - "The primary signal feed remains scan-first on desktop and mobile.", - "The utility rail remains visually subordinate to the main feed." - ], - "depends_on": [ - "task-02-refresh-shared-visual-system" - ] - }, - { - "id": "task-04-verify-and-capture-refresh", - "title": "Verify the redesign and capture a live preview", - "status": "done", - "objective": "Run the repo-native checks, rebuild the site, and capture a fresh screenshot that proves the redesign landed in the built output.", - "inputs": [ - "Task 03 redesigned homepage" - ], - "outputs": [ - "Passing build and check evidence", - "A refreshed live screenshot for review" - ], - "verification": [ - "`npm run build` passes from the site root", - "`npm run check` passes from the site root", - "The live screenshot reflects the new visual direction" - ], - "depends_on": [ - "task-03-rebuild-homepage-components" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The one-page contract is no longer sufficient for the visual goals", - "The redesign requires changes to the content model rather than presentation only", - "The user rejects the modern product-terminal direction and wants a different design language" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Locked the redesign direction as a colder product-intelligence terminal, informed by the earlier Linear, Raycast, and Vercel changelog research while preserving the one-page GitHub-first contract.", - "Rebuilt the shared visual system in site/src/styles/global.css with a cool steel-and-graphite palette, new modern sans and mono typography, harder panel geometry, and a darker utility rail treatment.", - "Refreshed the homepage hierarchy and components in site/src/pages/index.astro plus the feed, filter, empty-state, and utility components so the page now reads as a compact signal terminal instead of a warm editorial landing page.", - "`npm run build` passed from site/ on 2026-03-20 and produced the static output successfully, with the previously noted non-blocking Astro/Vite warning still present.", - "`npm run check` passed from site/ on 2026-03-20 with 0 errors, 0 warnings, and 0 hints.", - "Captured a fresh live screenshot of the built site at /tmp/decodex-homepage-refresh.png after serving site/dist locally on 127.0.0.1:4411." - ], - "last_updated": "2026-03-20T03:18:23Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The existing homepage reads as a warm editorial page rather than a modern signal terminal.", - "direction": "Shift toward a Linear x Raycast x Vercel visual language while preserving the current one-page GitHub-first MVP.", - "lane": "Reuse .workspaces/feat-decodex-github-first for the redesign." - } - } -} diff --git a/docs/plans/2026-03-21_decodex-116-backfill.json b/docs/plans/2026-03-21_decodex-116-backfill.json deleted file mode 100644 index 25a505596..000000000 --- a/docs/plans/2026-03-21_decodex-116-backfill.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-116-backfill", - "goal": "Backfill Decodex GitHub signals for the full default comparison range from stable 0.116.0 to the latest tracked preview by running the content-generation loop locally once.", - "success_criteria": [ - "The repo has a deterministic backfill entrypoint that reads the selected stable-to-preview compare set and targets unpublished PRs in that range.", - "A local run covers the missing PR backlog for the current default compare pair, producing bundles, analysis drafts, rendered signals, and a refreshed release-delta artifact.", - "Repo-native verification passes after the backfill run and the resulting coverage can be summarized concretely." - ], - "constraints": [ - "Use the active GitHub-first lane and existing signal/release-delta contracts unless a compatible extension is strictly required.", - "Run the backfill locally with the user's Codex auth rather than depending on GitHub Actions for this one-off catch-up.", - "Preserve existing published signals and regenerate only missing content in the selected compare range." - ], - "defaults": { - "repo": "openai/codex", - "stable_tag_name": "rust-v0.116.0", - "release_delta_path": "site/src/content/release-deltas/openai-codex-latest.json", - "signals_dir": "site/src/content/signals", - "bundles_dir": "tools/github/bundles", - "analysis_dir": "tools/github/analysis" - }, - "tasks": [ - { - "id": "task-1", - "title": "Define the compare-driven backfill contract", - "status": "done", - "objective": "Ground the backfill work in current release-delta evidence and record the need for a compare-driven unpublished-PR runner.", - "inputs": [ - "site/src/content/release-deltas/openai-codex-latest.json", - "site/src/content/signals", - "tools/github/sync_latest_signals.py" - ], - "outputs": [ - "A validated plan/1 contract for the 0.116 backfill pass", - "A clear implementation direction for compare-based backlog replay" - ], - "verification": [ - "python3 /Users/xavier/.codex/skills/plan-writing/scripts/validate_plan_contract.py --path docs/plans/2026-03-21_decodex-116-backfill.json" - ], - "depends_on": [] - }, - { - "id": "task-2", - "title": "Implement the local backfill runner", - "status": "done", - "objective": "Add a deterministic script that reads the chosen compare pair, finds unpublished PRs in that compare set, and runs the existing bundle-analysis-render pipeline for them.", - "inputs": [ - "tools/github/sync_latest_signals.py", - "tools/github/run_codex_analysis.py", - "site/src/content/release-deltas/openai-codex-latest.json" - ], - "outputs": [ - "A local backfill command for 0.116-to-latest unpublished PRs" - ], - "verification": [ - "python3 tools/github/backfill_release_range.py --repo openai/codex --stable-tag rust-v0.116.0 --dry-run" - ], - "depends_on": [ - "task-1" - ] - }, - { - "id": "task-3", - "title": "Run the local 0.116 backfill pass", - "status": "done", - "objective": "Execute the new backfill runner locally against the default 0.116.0 -> latest preview compare until the unpublished backlog for that pair is generated.", - "inputs": [ - "Local Codex auth", - "The new compare-driven backfill runner" - ], - "outputs": [ - "New bundles, analysis drafts, and signal entries for the missing PR backlog" - ], - "verification": [ - "python3 tools/github/backfill_release_range.py --repo openai/codex --stable-tag rust-v0.116.0" - ], - "depends_on": [ - "task-2" - ] - }, - { - "id": "task-4", - "title": "Rebuild artifacts and run repo-native verification", - "status": "done", - "objective": "Refresh the release-delta artifact against the expanded signal set and run the repo-native validation gate.", - "inputs": [ - "Backfilled signal corpus", - "tools/github/build_release_delta.py", - "Makefile.toml" - ], - "outputs": [ - "An updated release-delta artifact and passing verification evidence" - ], - "verification": [ - "cargo make decodex-checks" - ], - "depends_on": [ - "task-3" - ] - }, - { - "id": "task-5", - "title": "Summarize the backfill coverage", - "status": "done", - "objective": "Measure how much of the 0.116.0 -> latest preview compare is now represented in published signals and record any remaining gap.", - "inputs": [ - "Updated signal corpus", - "Updated release-delta artifact" - ], - "outputs": [ - "Concrete coverage counts and any residual missing PR list" - ], - "verification": [ - "python3 -c \"import json, pathlib, re; rd=json.loads(pathlib.Path('site/src/content/release-deltas/openai-codex-latest.json').read_text()); print(len(rd['tracked_signal_slugs']))\"" - ], - "depends_on": [ - "task-4" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The compare-driven backfill runner cannot finish because the default compare contains too many PRs for one local pass", - "Codex analysis needs a skip/non-publish mode to avoid flooding the feed with clearly low-value PRs", - "The default release-delta pair changes while the backfill is running" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "python3 tools/github/backfill_release_range.py --repo openai/codex --stable-tag rust-v0.116.0 --dry-run", - "CODEX_HOME= python3 tools/github/backfill_release_range.py --repo openai/codex --stable-tag rust-v0.116.0 --model gpt-5.3-codex-spark", - "cargo make decodex-checks" - ], - "last_updated": "2026-03-21T04:28:20Z", - "replan_reason": null, - "context_snapshot": { - "lane": "feat/decodex-github-first", - "default_compare": "rust-v0.116.0 -> rust-v0.117.0-alpha.5", - "compare_pr_count": 58, - "published_pr_count_in_compare": 58, - "missing_pr_count_in_compare": 0, - "signal_count": 59 - } - } -} diff --git a/docs/plans/2026-03-21_decodex-brand-assets.json b/docs/plans/2026-03-21_decodex-brand-assets.json deleted file mode 100644 index 8544e8419..000000000 --- a/docs/plans/2026-03-21_decodex-brand-assets.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-brand-assets", - "goal": "Process the provided local images into usable Decodex brand assets, wire one into the site favicon, and replace the text wordmark in the header with the supplied logo image.", - "success_criteria": [ - "The favicon uses a processed version of the provided icon image.", - "The header wordmark is replaced by a processed version of the provided Decodex logo image.", - "The processed assets avoid obvious white-box artifacts in the current Tokyo Night and light themes.", - "Site build and check pass after the asset integration." - ], - "constraints": [ - "Use the provided local files as the source assets.", - "Keep asset processing external to repo dependencies; do not add runtime packages to the site project just to process the PNG files." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-process-assets", - "title": "Process icon and logo images into site assets", - "status": "done", - "objective": "Create cropped, background-cleaned logo and icon files from the provided PNGs and store them under the site public assets path.", - "inputs": [ - "/Users/xavier/Downloads/grok-image-04bb254e-b6ff-4330-a12a-a5e076e24531.png", - "/Users/xavier/Downloads/grok-image-1da33251-9bd3-438b-bfed-752eed3c1260.png" - ], - "outputs": [ - "Processed favicon asset under site/public/", - "Processed logo asset under site/public/" - ], - "verification": [ - "File inspection of generated asset sizes" - ], - "depends_on": [] - }, - { - "id": "task-02-wire-assets", - "title": "Wire brand assets into layout and header", - "status": "done", - "objective": "Update the layout and header to use the processed favicon and header logo while preserving the current overall topbar hierarchy.", - "inputs": [ - "site/src/layouts/BaseLayout.astro", - "site/src/pages/index.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "Site favicon link tags and image-based header wordmark." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-01-process-assets" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The provided images cannot be cleaned enough for dark mode without manual redesign.", - "Replacing the wordmark with the supplied logo breaks the header layout beyond a small CSS pass." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Backed up the original provided images under assets/icon-source.png and assets/logo-source.png with simple stable names.", - "Generated processed site assets under site/public/assets as logo.png, icon.png, logo.ico, and logo-touch.png and wired them into the header wordmark and favicon links.", - "After user feedback, rebuilt the assets with stronger background removal and increased the rendered wordmark height so the header logo is closer to the original Decodex wordmark weight.", - "Verification passed: npm run build --prefix site, npm run check --prefix site, and cargo make decodex-checks." - ], - "last_updated": "2026-03-21T20:41:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "favicon and header logo asset processing", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-header-social-cta.json b/docs/plans/2026-03-21_decodex-header-social-cta.json deleted file mode 100644 index 40b13f58e..000000000 --- a/docs/plans/2026-03-21_decodex-header-social-cta.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-header-social-cta", - "goal": "Add a lightweight X follow call-to-action beside the header description so the site can point readers to YvetteCipher without disrupting the existing top-of-page hierarchy.", - "success_criteria": [ - "The header description gains a right-side X follow CTA on wider screens and stacks cleanly on smaller screens.", - "The CTA copy clearly asks readers to follow YvetteCipher and explains that it helps cover Decodex operating costs and supports creator incentives.", - "The Decodex wordmark and existing header structure remain visually stable.", - "Site build and check pass after the header update." - ], - "constraints": [ - "Do not change the Decodex wordmark size or styling in this pass.", - "Keep the CTA within the description row instead of introducing a new standalone hero card or header module." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-add-social-cta", - "title": "Add X follow CTA beside the header description", - "status": "done", - "objective": "Update the header markup and styles so the description row can carry a subtle X follow link and support copy for YvetteCipher.", - "inputs": [ - "site/src/pages/index.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "Header description row with a responsive X follow CTA." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "Adding the CTA makes the topbar feel crowded enough that the entire header layout needs a structural redesign.", - "The CTA copy cannot fit cleanly without collapsing the current desktop hierarchy." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Added a responsive header CTA that links to https://x.com/YvetteCipher and keeps the ask compact as a two-line @YvetteCipher on X block with an ops-and-creator-support message.", - "Kept the existing wordmark and topbar structure intact by placing the CTA in a shared description row that aligns right on desktop and stacks on mobile.", - "Verification passed: npm run build --prefix site and npm run check --prefix site." - ], - "last_updated": "2026-03-21T20:28:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "header description right-side X CTA", - "lane": "feat-decodex-github-first", - "handle": "YvetteCipher" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-hourly-github-refresh.json b/docs/plans/2026-03-21_decodex-hourly-github-refresh.json deleted file mode 100644 index 030e646f4..000000000 --- a/docs/plans/2026-03-21_decodex-hourly-github-refresh.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-hourly-github-refresh", - "goal": "Enable Decodex to refresh the latest GitHub-backed signals every hour from GitHub Actions using Codex with injected auth.json while preserving deterministic rendering and repo-native validation.", - "success_criteria": [ - "The repo has a deterministic sync path that discovers unpublished GitHub changes, builds bundles, runs Codex analysis drafts, renders signal entries, and rebuilds the release delta artifact.", - "GitHub Actions can run the refresh hourly on a Linux runner, install Codex, inject a CI auth.json secret, and only commit changes after repo-native validation passes.", - "Docs and specs reflect the new CI boundary, required secrets, and operational assumptions for hourly refreshes." - ], - "constraints": [ - "Keep the site static; CI should update content artifacts in-repo rather than introduce a server runtime.", - "Preserve existing signal-entry and release-delta contracts unless a compatible extension is required.", - "Do not leak auth.json contents in logs, committed files, or generated artifacts.", - "Use the existing GitHub-first lane and repo-native validation gate (`cargo make decodex-checks`)." - ], - "defaults": { - "analysis_dir": "tools/github/analysis", - "bundles_dir": "tools/github/bundles", - "codex_auth_secret_name": "CODEX_AUTH_JSON", - "release_delta_path": "site/src/content/release-deltas/openai-codex-latest.json", - "repo": "openai/codex", - "schedule": "hourly", - "signals_dir": "site/src/content/signals" - }, - "tasks": [ - { - "id": "task-1", - "title": "Define the hourly refresh contract", - "status": "done", - "objective": "Capture the new CI execution boundary, the Codex auth assumption, and the script/workflow surface needed for hourly GitHub refreshes.", - "inputs": [ - "docs/guide/local_github_signal_workflow.md", - "docs/spec/github_change_bundle.md", - "docs/spec/signal_entry.md", - "docs/spec/release_delta.md", - ".github/workflows/refresh-reset-status.yml", - "Official Codex GitHub Action and non-interactive documentation" - ], - "outputs": [ - "A validated plan/1 contract", - "A concrete task graph covering tooling, workflow, and docs updates" - ], - "verification": [ - "python3 /Users/xavier/.codex/skills/plan-writing/scripts/validate_plan_contract.py --path docs/plans/2026-03-21_decodex-hourly-github-refresh.json" - ], - "depends_on": [] - }, - { - "id": "task-2", - "title": "Implement the GitHub signal sync tooling", - "status": "done", - "objective": "Add deterministic scripts that discover new candidate PRs, invoke Codex analysis in CI-safe form, render signal entries, and regenerate release delta artifacts.", - "inputs": [ - "tools/github/build_change_bundle.py", - "tools/github/render_signal_entry.py", - "tools/github/build_release_delta.py", - "skills/decodex-github-signal/SKILL.md" - ], - "outputs": [ - "New or updated tooling under tools/github/", - "Validated signal/release-delta artifacts generated by the automated sync path" - ], - "verification": [ - "python3 tools/github/validate_signal_entry.py site/src/content/signals", - "python3 tools/github/build_release_delta.py --repo openai/codex --signals-dir site/src/content/signals --out site/src/content/release-deltas/openai-codex-latest.json" - ], - "depends_on": [ - "task-1" - ] - }, - { - "id": "task-3", - "title": "Add hourly GitHub Actions automation", - "status": "done", - "objective": "Create an hourly workflow that installs Codex, writes auth.json into CODEX_HOME, runs the sync tooling, validates the repo, and commits content updates only when artifacts changed.", - "inputs": [ - ".github/workflows/refresh-reset-status.yml", - "Official Codex GitHub Action and non-interactive docs", - "Repo-native validation gate from Makefile.toml" - ], - "outputs": [ - "A new hourly GitHub refresh workflow", - "Safe auth.json handling in CI" - ], - "verification": [ - "cargo make decodex-checks", - "Workflow YAML review for schedule, permissions, and secret handling" - ], - "depends_on": [ - "task-2" - ] - }, - { - "id": "task-4", - "title": "Update documentation for the new CI boundary", - "status": "done", - "objective": "Revise the workflow guide, repo README, and any governing specs so the repo clearly documents local vs CI responsibilities, required secrets, and hourly refresh operations.", - "inputs": [ - "README.md", - "docs/guide/local_github_signal_workflow.md", - "docs/spec/release_delta.md", - "docs/spec/github_change_bundle.md" - ], - "outputs": [ - "Updated docs that replace the old MVP no-CI-analysis boundary", - "Operational guidance for CODEX_AUTH_JSON in GitHub Actions" - ], - "verification": [ - "rg -n \"Do not run AI analysis in CI for the MVP|CODEX_AUTH_JSON|hourly\" README.md docs .github/workflows tools/github" - ], - "depends_on": [ - "task-3" - ] - }, - { - "id": "task-5", - "title": "Run final validation and capture execution evidence", - "status": "done", - "objective": "Run repo-native checks and confirm the new sync path and workflow content are internally consistent before closeout.", - "inputs": [ - "Updated tools/github scripts", - "Updated workflow YAML", - "Updated docs" - ], - "outputs": [ - "Passing local verification evidence", - "Execution evidence recorded in the saved plan state" - ], - "verification": [ - "cargo make decodex-checks" - ], - "depends_on": [ - "task-4" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "Codex auth.json injection is not sufficient for headless codex exec in CI", - "The workflow requires a different installation path than the current official action/docs support", - "Signal discovery requires changing the published signal or release-delta contracts" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Official Codex docs confirmed that the GitHub Action installs the CLI and that non-interactive/CI flows can rely on a trusted-runner auth model; local probing also proved `codex exec` succeeds with only a temporary `CODEX_HOME/auth.json`.", - "Added `tools/github/run_codex_analysis.py`, `tools/github/sync_latest_signals.py`, and `tools/github/analysis_draft.schema.json` so the automated path now discovers recent merged PRs, runs Codex with a schema-bound JSON response, renders signals, and refreshes release-delta artifacts.", - "A temp-auth end-to-end sync run completed successfully with `--max-new-prs 1`, generating and publishing `openai-codex-pr-15203` plus an updated release-delta artifact.", - "Added `.github/workflows/refresh-github-signals.yml` with hourly scheduling, Codex installation via `npm install -g @openai/codex@0.116.0`, secret-backed `CODEX_AUTH_JSON` injection, robust path-scoped change detection, and gated commit/push behavior.", - "Updated README, GitHub tooling docs, workflow guide, and governing specs to replace the old no-CI-analysis MVP boundary with the new trusted-runner hourly refresh boundary.", - "Final verification passed: `cargo make decodex-checks`, plus a YAML parse check for `.github/workflows/refresh-github-signals.yml`." - ], - "last_updated": "2026-03-21T03:58:00Z", - "replan_reason": null, - "context_snapshot": { - "auth_probe": "Both `codex login status` and schema-bound `codex exec` succeeded with only a temporary CODEX_HOME/auth.json.", - "current_workflow_gap": "Closed by refresh-github-signals.yml plus the new sync tooling.", - "lane": "feat/decodex-github-first", - "official_guidance": "Official Codex docs cover GitHub Action, non-interactive mode, and trusted-runner auth.json reuse.", - "new_signal_created": "site/src/content/signals/openai-codex-pr-15203.json" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-iteration-two.json b/docs/plans/2026-03-21_decodex-iteration-two.json deleted file mode 100644 index 0c0c8e3cb..000000000 --- a/docs/plans/2026-03-21_decodex-iteration-two.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-iteration-two", - "goal": "Capture the second Decodex product iteration as one cohesive plan covering the GitHub-first homepage polish, reset status integration, release preview refinement, source clarity, runtime filter UX, and the repo-local GitHub signal skill.", - "success_criteria": [ - "The homepage presents a cleaner GitHub-first signal feed with working runtime filters, clearer targeted-entry highlighting, and improved header/status handling.", - "The reset status pipeline exists as a static-site widget backed by deterministic refresh tooling and a scheduled workflow.", - "The release preview module is more concise and useful, with richer preview summaries and clearer version-comparison cards.", - "Signal source evidence is clearer through titled PR/commit timeline items instead of generic link labels.", - "The local Codex GitHub analysis workflow exists as a formal repo-local skill." - ], - "constraints": [ - "Preserve the existing GitHub-first static-site architecture.", - "Keep AI analysis local and deterministic build/deploy logic in scripts/CI.", - "Treat this plan as the compressed record for the current 2026-03-21 iteration; earlier committed plan history remains untouched." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-reset-status-widget", - "title": "Integrate reset-status data and widget flow", - "status": "completed", - "objective": "Add the reset-status content contract, deterministic builders/validators, scheduled refresh workflow, and homepage widget integration.", - "inputs": [ - "docs/spec/reset_status.md", - "tools/status/", - ".github/workflows/refresh-reset-status.yml", - "site/src/content/reset-status/", - "site/src/lib/reset-status.ts", - "site/src/components/ResetStatusWidget.astro" - ], - "outputs": [ - "Static reset-status data pipeline and homepage widget." - ], - "verification": [ - "cargo make decodex-checks" - ], - "depends_on": [] - }, - { - "id": "task-02-theme-and-header-polish", - "title": "Add system and manual theme support and polish header utilities", - "status": "completed", - "objective": "Add Tokyo Night light/dark theming with system-following and manual override, then refine topbar placement for theme controls, signal summary, and reset status.", - "inputs": [ - "site/src/layouts/BaseLayout.astro", - "site/src/components/ThemeToggle.astro", - "site/src/components/SignalSummaryTile.astro", - "site/src/components/ResetStatusWidget.astro", - "site/src/pages/index.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "Working theme controls and a more coherent header/status area." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-01-reset-status-widget" - ] - }, - { - "id": "task-03-release-preview-refine", - "title": "Refine the release preview module", - "status": "completed", - "objective": "Make the stable-vs-preview section more useful by improving copy, cards, title, and preview summaries without duplicating the full feed below.", - "inputs": [ - "docs/spec/release_delta.md", - "site/src/content/release-deltas/openai-codex-latest.json", - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "A tighter preview-comparison module with clearer cards and richer preview summaries." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-02-theme-and-header-polish" - ] - }, - { - "id": "task-04-source-timeline-clarity", - "title": "Clarify signal source evidence", - "status": "completed", - "objective": "Replace generic repo/PR/Commit N link lists with titled source timeline items derived from PR and commit metadata, then backfill existing signals.", - "inputs": [ - "docs/spec/signal_entry.md", - "tools/github/contracts.py", - "tools/github/render_signal_entry.py", - "site/src/content.config.ts", - "site/src/lib/signal-feed.ts", - "site/src/components/SignalCard.astro", - "site/src/content/signals/" - ], - "outputs": [ - "Titled source timelines in signal cards and updated signal JSON payloads." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-03-release-preview-refine" - ] - }, - { - "id": "task-05-runtime-filter-and-target-ux", - "title": "Upgrade runtime filter and direct-link UX", - "status": "completed", - "objective": "Enhance filters to update at runtime with active state and light transitions while preserving static fallback, and highlight hash-targeted signal cards.", - "inputs": [ - "site/src/components/FilterBar.astro", - "site/src/components/EmptyFeedState.astro", - "site/src/components/SignalCard.astro", - "site/src/pages/index.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "Client-enhanced filters and targeted-signal highlighting." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-04-source-timeline-clarity" - ] - }, - { - "id": "task-06-formalize-github-signal-skill", - "title": "Formalize the local GitHub signal workflow as a repo-local skill", - "status": "completed", - "objective": "Add a repo-local skill entrypoint for the GitHub signal drafting workflow and wire repo docs to that skill surface.", - "inputs": [ - "skills/decodex-github-signal/", - "docs/guide/local_github_signal_workflow.md", - "docs/spec/repo_layout.md", - "README.md" - ], - "outputs": [ - "A repo-local Decodex GitHub signal skill plus updated documentation." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-05-runtime-filter-and-target-ux" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The homepage shifts from progressive enhancement into a broader client-app architecture.", - "The release preview module expands into a full multi-version compare system with new data requirements.", - "The GitHub signal workflow moves from local/editorial operation into fully automated CI analysis." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Reset-status tooling, content, homepage widget, and scheduled refresh workflow were added.", - "Theme support now includes system-following Tokyo Night light/dark plus manual override and header integration.", - "The release preview module was rewritten to be shorter, clearer, and more directly informative for impatient readers.", - "Signal source links are now rendered as titled PR/commit timelines backed by updated signal-entry schema and regenerated signal JSON.", - "Homepage filters now enhance to runtime filtering with active state and light transitions, and hash-targeted signal cards visibly highlight.", - "The local Codex GitHub analysis loop is now formalized as a repo-local skill under skills/decodex-github-signal/." - ], - "last_updated": "2026-03-21T17:05:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "compressed second iteration record", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-pages-deploy.json b/docs/plans/2026-03-21_decodex-pages-deploy.json deleted file mode 100644 index 2eb729b82..000000000 --- a/docs/plans/2026-03-21_decodex-pages-deploy.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-pages-deploy", - "goal": "Deploy the Decodex Astro site to GitHub Pages from Actions and document the required repository settings and DNS steps for the `decodex.space` custom domain.", - "success_criteria": [ - "The repo has a GitHub Actions workflow that builds `site/` and deploys the resulting static artifact to GitHub Pages on pushes to `main`.", - "The deployment docs explain the required GitHub Pages settings, the limitation around custom-workflow CNAME handling, and the DNS records needed for `decodex.space`.", - "Local verification confirms the site still builds and the workflow YAML is structurally valid." - ], - "constraints": [ - "Keep deployment on GitHub Pages Actions; do not introduce another hosting provider.", - "Preserve the existing hourly content-refresh workflow as a producer of commits into `main` rather than coupling it directly to Pages deploy.", - "Do not rely on a checked-in `CNAME` file for the custom domain when using a custom Pages workflow if the platform ignores it." - ], - "defaults": { - "branch": "main", - "site_dir": "site", - "pages_domain": "decodex.space", - "deploy_workflow": ".github/workflows/deploy-pages.yml" - }, - "tasks": [ - { - "id": "task-1", - "title": "Capture the Pages deployment contract", - "status": "done", - "objective": "Ground the Pages deployment and custom-domain approach in current repo state and current GitHub Pages workflow behavior.", - "inputs": [ - ".github/workflows/release.yml", - "site/package.json", - "Official GitHub Pages custom workflow docs" - ], - "outputs": [ - "A validated plan/1 contract for Pages deployment", - "A clear separation between content refresh and Pages publish responsibilities" - ], - "verification": [ - "python3 /Users/xavier/.codex/skills/plan-writing/scripts/validate_plan_contract.py --path docs/plans/2026-03-21_decodex-pages-deploy.json" - ], - "depends_on": [] - }, - { - "id": "task-2", - "title": "Add the GitHub Pages deployment workflow", - "status": "done", - "objective": "Create a Pages workflow that checks out `main`, installs site dependencies, builds the Astro site, uploads the artifact, and deploys it to GitHub Pages.", - "inputs": [ - "site/package.json", - ".github/workflows/release.yml" - ], - "outputs": [ - ".github/workflows/deploy-pages.yml" - ], - "verification": [ - "python3 -c \"import yaml, pathlib; yaml.safe_load(pathlib.Path('.github/workflows/deploy-pages.yml').read_text())\"" - ], - "depends_on": [ - "task-1" - ] - }, - { - "id": "task-3", - "title": "Document the custom domain and Pages settings", - "status": "done", - "objective": "Explain the repository settings, Pages source selection, and DNS records needed to serve the site from `decodex.space`.", - "inputs": [ - "README.md", - "docs/guide/local_github_signal_workflow.md", - "Official GitHub Pages docs" - ], - "outputs": [ - "Updated deployment documentation with explicit manual setup steps for GitHub Pages and decodex.space" - ], - "verification": [ - "rg -n \"decodex.space|GitHub Pages|custom domain|CNAME\" README.md docs .github/workflows" - ], - "depends_on": [ - "task-2" - ] - }, - { - "id": "task-4", - "title": "Run verification and capture remaining manual steps", - "status": "done", - "objective": "Run the repo-native validation surface, confirm the site still builds, and summarize which Pages settings and DNS records still require manual admin access.", - "inputs": [ - "Updated workflow", - "Updated docs" - ], - "outputs": [ - "Passing local verification evidence", - "A concise list of manual GitHub/DNS follow-ups" - ], - "verification": [ - "cargo make decodex-checks" - ], - "depends_on": [ - "task-3" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "GitHub Pages deployment requires a different artifact layout than Astro's current `site/dist` output", - "The custom-domain path requires repository settings or API access not available from this lane", - "Existing workflows conflict with the Pages deployment trigger model" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "The repo had no GitHub Pages workflow; only the template Rust release workflow existed while Astro already built static output to `site/dist`.", - "Added `.github/workflows/deploy-pages.yml` to build the Astro site on pushes to `main`, upload `site/dist`, and deploy with `actions/deploy-pages`.", - "Set `site: \"https://decodex.space\"` in `site/astro.config.mjs` so Astro knows the production site URL.", - "Added `docs/guide/github_pages_deploy.md` plus README and guide-index updates that document the GitHub Pages settings, `decodex.space` custom-domain steps, and the DNS records for apex plus `www`.", - "YAML parsing passed for both deployment workflows, and `cargo make decodex-checks` passed after the Pages changes." - ], - "last_updated": "2026-03-21T04:01:22Z", - "replan_reason": null, - "context_snapshot": { - "lane": "feat/decodex-github-first", - "current_release_workflow": "The template Rust release workflow remains, and Pages deployment is now handled separately by deploy-pages.yml.", - "site_output": "Astro builds static output to site/dist and the new Pages workflow uploads that directory as the artifact.", - "custom_domain_target": "decodex.space", - "remaining_manual_steps": [ - "Set Pages source to GitHub Actions in repository settings", - "Set decodex.space as the custom domain in Settings -> Pages", - "Create the decodex.space DNS records at the domain provider" - ] - } - } -} diff --git a/docs/plans/2026-03-21_decodex-preview-changes-redesign.json b/docs/plans/2026-03-21_decodex-preview-changes-redesign.json deleted file mode 100644 index bee8524a6..000000000 --- a/docs/plans/2026-03-21_decodex-preview-changes-redesign.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-preview-changes-redesign", - "goal": "Redesign the Preview changes module so version selection feels integrated into the module itself, the compare facts stop looking like three standalone cards, and the section better matches the cleaner GitHub/Linear/Vercel changelog aesthetic.", - "success_criteria": [ - "Stable and preview selection are visually integrated into the module headline or lead row instead of appearing as detached standalone controls.", - "The compare facts are presented without three separate cards, using a cleaner flat summary treatment that fits the Tokyo Night theme.", - "The module remains readable and compact while preserving the current bounded compare functionality.", - "Site build and check pass after the redesign." - ], - "constraints": [ - "Do not change the bounded compare data model from the previous plan unless implementation proves it impossible to style cleanly.", - "Keep the module subordinate to the main feed and avoid adding new heavy UI chrome.", - "Preserve the current client-side compare switching behavior." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-redesign-preview-module", - "title": "Redesign Preview changes layout and styling", - "status": "done", - "objective": "Refactor the module markup and CSS so the version selectors read as part of the content hierarchy and the compare facts use a flatter, more editorial summary rail instead of discrete cards.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "A redesigned Preview changes module with integrated version selection and a flatter compare summary layout." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The integrated selector treatment makes the bounded compare interactions unclear or inaccessible.", - "The flat summary rail cannot accommodate required compare facts without reducing clarity." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Research inputs: GitHub changelog groups and filters emphasize reduced chrome and direct categorization, while Linear's redesign notes stress hierarchy, balance, density, and clearer meta presentation.", - "Current local module already supports bounded stable/preview switching, so this pass can focus on layout and styling rather than data architecture.", - "Preview changes now integrates stable and preview selection into a single lead sentence instead of detached selector blocks.", - "The old three-card compare summary was replaced with a flat summary rail that better matches the Tokyo Night homepage treatment.", - "Verification passed: npm run build --prefix site and npm run check --prefix site." - ], - "last_updated": "2026-03-21T19:30:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "preview changes visual redesign", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-preview-comparator.json b/docs/plans/2026-03-21_decodex-preview-comparator.json deleted file mode 100644 index f521359b5..000000000 --- a/docs/plans/2026-03-21_decodex-preview-comparator.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-preview-comparator", - "goal": "Upgrade the Preview changes module from a single latest-compare summary into a compact version comparator that lets readers switch stable and preview versions without displacing the main signal feed.", - "success_criteria": [ - "The release-delta artifact supports a bounded set of stable and preview release options plus precomputed compare entries.", - "The Preview changes module lets the reader switch stable and preview versions client-side and immediately updates summary metrics and highlighted tracked signals.", - "The module remains compact and scan-first: the top section gives fast compare facts while featured preview items stay readable without forcing the user into the full feed.", - "Specs and repo docs describe the new bounded comparator behavior and artifact shape.", - "Repo-native checks pass after the change." - ], - "constraints": [ - "Keep the homepage static-first and avoid turning the module into a heavy client application.", - "Preserve the main feed as the primary analysis surface; the comparator stays a compact summary module.", - "Bound the amount of precomputed compare data so release-delta generation remains reasonable.", - "Reuse existing published signals as the evidence-backed highlight set for compare entries." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-expand-release-delta-contract", - "title": "Expand the release-delta artifact and spec for bounded version comparison", - "status": "done", - "objective": "Extend the release-delta schema, generator, and docs so the artifact can ship a limited stable/preview release set and precomputed compare entries instead of only one latest pair.", - "inputs": [ - "docs/spec/release_delta.md", - "site/src/content.config.ts", - "site/src/lib/release-delta.ts", - "tools/github/build_release_delta.py", - "tools/github/contracts.py", - "site/src/content/release-deltas/openai-codex-latest.json" - ], - "outputs": [ - "A validated release_delta/v1 artifact that includes release options and compare entries for the homepage comparator." - ], - "verification": [ - "python3 tools/github/build_release_delta.py --repo openai/codex --signals-dir site/src/content/signals --out site/src/content/release-deltas/openai-codex-latest.json", - "cargo make decodex-checks" - ], - "depends_on": [] - }, - { - "id": "task-02-build-preview-comparator-ui", - "title": "Turn Preview changes into a compact version comparator", - "status": "done", - "objective": "Replace the one-pair release summary with a compact comparator that exposes stable and preview selection, updates metrics client-side, and keeps featured preview items readable for impatient readers.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "site/src/pages/index.astro", - "site/src/content/release-deltas/openai-codex-latest.json", - "site/src/lib/release-delta.ts" - ], - "outputs": [ - "A homepage Preview changes module with bounded client-side stable/preview switching and refreshed card styling." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-01-expand-release-delta-contract" - ] - }, - { - "id": "task-03-sync-docs-and-close-state", - "title": "Sync docs and close the iteration cleanly", - "status": "done", - "objective": "Update docs and plan state so the new comparator behavior is discoverable and the plan captures the implementation evidence.", - "inputs": [ - "docs/spec/release_delta.md", - "site/src/content/release-deltas/README.md", - "docs/plans/2026-03-21_decodex-preview-comparator.json" - ], - "outputs": [ - "Updated docs plus a done state with implementation evidence." - ], - "verification": [ - "cargo make decodex-checks" - ], - "depends_on": [ - "task-02-build-preview-comparator-ui" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The compare matrix becomes too large for a bounded static artifact and needs a different data strategy.", - "The homepage module needs server-backed live compare queries instead of precomputed local data.", - "The release-delta module needs to support multiple repos or channels beyond the current Codex lane." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "release_delta/v1 now carries bounded stable and preview release options plus 12 precomputed compare entries while preserving a default top-level pair.", - "Preview changes now renders as a compact version comparator with stable and preview selectors, pre-rendered compare panels, and lightweight client-side switching.", - "The current openai/codex release-delta artifact now tracks 3 stable options, 6 preview options, and defaults to rust-v0.116.0 -> rust-v0.117.0-alpha.5.", - "Docs now describe the bounded comparator model in docs/spec/release_delta.md and site/src/content/release-deltas/README.md.", - "Verification passed: npm run build --prefix site, npm run check --prefix site, cargo make decodex-checks." - ], - "last_updated": "2026-03-21T19:12:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "preview changes comparator", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-preview-guided-overview.json b/docs/plans/2026-03-21_decodex-preview-guided-overview.json deleted file mode 100644 index 276091eb5..000000000 --- a/docs/plans/2026-03-21_decodex-preview-guided-overview.json +++ /dev/null @@ -1,467 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-preview-guided-overview", - "goal": "Refocus the Decodex homepage around a guided Preview changes overview that surfaces the most worth-trying prerelease highlights first, adds concise start-here guidance, removes low-value header stats so the remaining status and changelog hierarchy feel intentional, introduces a manually curated prerelease config.toml panel with direct upstream references, and keeps the latest upstream prerelease comparison plus highlight selection current enough to validate the Decodex GitHub signal workflow.", - "success_criteria": [ - "The top of the Preview changes module leads with a concise overview of what is worth trying in the selected preview pair instead of presenting compare metadata as the primary content.", - "The module includes a compact guided start-here section with actionable try paths and expected outcomes derived from tracked signals.", - "Version switching remains available, but compare context is visually subordinate to the overview and guided sections.", - "The implementation remains static-first and passes the site build and check commands.", - "Low-value homepage summary stats are removed, and the remaining reset-status widget still fits the header cleanly.", - "The Preview changes module includes a manually curated prerelease config.toml panel that clearly distinguishes Xavier's recommended profile from direct upstream references for each toggle.", - "The latest openai/codex prerelease comparison in the homepage release-delta artifact is refreshed to include rust-v0.117.0-alpha.6.", - "The decodex-github-signal workflow is exercised against the new stable->alpha.6 compare range so newly surfaced PRs are either published as validated signals or explicitly screened out with repo-local analysis artifacts." - ], - "constraints": [ - "Keep the work scoped to the existing Preview changes module, the homepage header status area, supporting styles, and generated config-reference helpers.", - "Do not change the release_delta/v1 schema for this iteration.", - "Preserve existing client-side stable and preview switching behavior.", - "Keep the full changelog/feed below the module unchanged." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex" - }, - "tasks": [ - { - "id": "task-01", - "title": "Define guided-overview treatment for Preview changes", - "status": "done", - "objective": "Translate the product direction into a concrete module structure that prioritizes overview, highlights, and start-here guidance ahead of compare metadata.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-changes-redesign.json", - "docs/plans/2026-03-21_decodex-preview-comparator.json" - ], - "outputs": [ - "A settled module structure for guided overview, highlight cards, start-here entries, and subordinate compare context." - ], - "verification": [ - "Implementation structure matches the saved plan before style polish begins." - ], - "depends_on": [] - }, - { - "id": "task-02", - "title": "Implement guided overview in ReleaseDeltaPanel", - "status": "done", - "objective": "Update the module logic and markup so the selected comparison shows worth-trying highlights first, a concise tutorial-oriented start-here section second, and compare metadata last.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/lib/release-delta.ts" - ], - "outputs": [ - "A ReleaseDeltaPanel implementation that foregrounds recommended preview highlights and tutorial-style try guidance." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-01" - ] - }, - { - "id": "task-03", - "title": "Polish styles and close with verification evidence", - "status": "done", - "objective": "Adjust Preview changes styling to support the new hierarchy and capture verification evidence in the saved plan state.", - "inputs": [ - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "Updated module styling plus a done-state plan with verification evidence." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-02" - ] - }, - { - "id": "task-04", - "title": "Simplify homepage header status surfaces", - "status": "done", - "objective": "Remove the low-value signal summary tile, fold summary facts into the Preview changes rail, and refit the remaining reset-status widget so the header works as a single-status layout.", - "inputs": [ - "site/src/pages/index.astro", - "site/src/components/SignalSummaryTile.astro", - "site/src/components/ResetStatusWidget.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A cleaner homepage header without the old summary tile, plus a reset-status treatment that reads correctly as the only status element." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-03" - ] - }, - { - "id": "task-05", - "title": "Trim low-value helper copy", - "status": "done", - "objective": "Remove explanatory sentences that repeat obvious meaning without improving navigation or decision-making in the Preview changes module.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A tighter Preview changes module with less low-signal helper copy." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-04" - ] - }, - { - "id": "task-06", - "title": "Replace fixed top-N preview logic with a flat worth-trying system", - "status": "done", - "objective": "Stop hard-capping the overview to three ranked highlights and instead show all signals that satisfy a clear worth-trying rubric documented in the repo skill.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "skills/decodex-github-signal/SKILL.md", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A flat overview list of all worth-trying items plus an authoring rubric that tells AI how to decide whether a signal deserves that treatment." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-05" - ] - }, - { - "id": "task-07", - "title": "Recompose the Preview changes block as one coherent module", - "status": "done", - "objective": "Give the preview area a proper dynamic hero and a cleaner internal layout so the section reads as one designed block rather than a heading followed by loosely stacked subpanels.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A more cohesive Preview changes section with dynamic hero context, aligned top summary treatment, and better internal hierarchy." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-06" - ] - }, - { - "id": "task-08", - "title": "Merge worth-trying and how-to into single decision cards", - "status": "done", - "objective": "Replace the duplicated two-panel treatment with one primary preview panel where each worth-trying item contains its own value, try path, and expected outcome in the same reading unit.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A single worth-trying panel whose cards close the loop on what changed, why it matters, how to try it, and what users should notice." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-07" - ] - }, - { - "id": "task-09", - "title": "Rebalance the homepage header as two primary cards", - "status": "done", - "objective": "Turn the topbar into a balanced two-card layout by upgrading the brand side into a fuller product-intro block while keeping the reset-status widget visually strong as a peer card.", - "inputs": [ - "site/src/pages/index.astro", - "site/src/components/ResetStatusWidget.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A balanced homepage header where the brand area no longer feels empty and the reset-status card keeps its prominence." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-08" - ] - }, - { - "id": "task-10", - "title": "Flatten the Preview changes visual hierarchy", - "status": "done", - "objective": "Reduce box-in-box visual clutter by keeping one outer Preview changes container and using spacing, dividers, and typography instead of nested bordered panels for the inner sections.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A flatter Preview changes module with a single outer frame, lighter internal sectioning, and fewer nested boxes." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-09" - ] - }, - { - "id": "task-11", - "title": "Remove redundant Full delta section from Preview changes", - "status": "done", - "objective": "Keep Preview changes focused on version context plus highlights, and let the main feed below remain the only full-information surface.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "site/src/pages/index.astro", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A slimmer Preview changes module that ends after worth-trying highlights and hands off to the full signal feed below." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-10" - ] - }, - { - "id": "task-12", - "title": "Refine highlight-selection rubric for Preview changes", - "status": "done", - "objective": "Define a stricter, more explicit rule for what counts as a homepage highlight so the middle section reflects meaningful, user-relevant trial candidates instead of any signal with a try path.", - "inputs": [ - "skills/decodex-github-signal/SKILL.md", - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/content/signals/*.json", - "docs/spec/signal_entry.md", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A refined editorial rubric in the skill plus aligned frontend filtering logic for homepage highlights." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-11" - ] - }, - { - "id": "task-13", - "title": "Simplify highlight rubric into an editor-friendly checklist", - "status": "done", - "objective": "Replace the heavier highlight-selection phrasing with a simpler gate-plus-amplifier checklist that is easier for AI authoring and human review to apply consistently.", - "inputs": [ - "skills/decodex-github-signal/SKILL.md", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A simpler homepage-highlight rule that avoids numeric scoring while preserving clear inclusion and exclusion boundaries." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-12" - ] - }, - { - "id": "task-14", - "title": "Integrate upstream config schema into Decodex flag handling", - "status": "done", - "objective": "Use Codex's upstream config schema as a canonical source for feature toggles so Decodex can normalize flag-backed signals toward `$CODEX_HOME/config.toml` instead of only reflecting raw PR-extracted flags.", - "inputs": [ - "https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/config.schema.json", - "docs/spec/signal_entry.md", - "tools/github/render_signal_entry.py", - "site/src/components/SignalCard.astro", - "site/src/styles/global.css", - "docs/plans/2026-03-21_decodex-preview-guided-overview.json" - ], - "outputs": [ - "A synced local feature-toggle catalog plus canonical config-flag normalization and user-facing config.toml rendering." - ], - "verification": [ - "python3 tools/config/sync_codex_config_schema.py", - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-13" - ] - }, - { - "id": "task-15", - "title": "Add a manually curated prerelease config.toml panel with direct upstream refs", - "status": "done", - "objective": "Render Xavier's hand-picked prerelease config profile inside Preview changes, clarify that it is not stable-safe or AI-generated, and link each toggle directly to upstream config sources rather than Decodex signals.", - "inputs": [ - "site/src/content.config.ts", - "site/src/content/recommended-configs/openai-codex-prerelease.json", - "site/src/generated/codex-config-features.json", - "site/src/lib/config-flags.ts", - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css", - "tools/config/sync_codex_config_schema.py", - "https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/config.schema.json", - "https://developers.openai.com/codex/config-reference" - ], - "outputs": [ - "A manual prerelease config panel with copyable TOML, direct upstream refs for each toggle, and no signal-derived evidence dependencies." - ], - "verification": [ - "python3 tools/config/sync_codex_config_schema.py", - "python3 /Users/xavier/.codex/skills/plan-writing/scripts/validate_plan_contract.py --path docs/plans/2026-03-21_decodex-preview-guided-overview.json", - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-14" - ] - }, - { - "id": "task-16", - "title": "Refresh release-delta data to include the latest upstream prerelease", - "status": "done", - "objective": "Regenerate the bounded homepage release-delta artifact so the latest upstream prerelease pair is reflected in Decodex and remains comparable against the tracked stable release.", - "inputs": [ - "site/src/content/release-deltas/openai-codex-latest.json", - "tools/github/build_release_delta.py", - "https://api.github.com/repos/openai/codex/releases" - ], - "outputs": [ - "An updated openai-codex-latest release-delta artifact with the latest prerelease in the preview option set and compare matrix." - ], - "verification": [ - "python3 tools/github/build_release_delta.py --repo openai/codex --signals-dir site/src/content/signals --out site/src/content/release-deltas/openai-codex-latest.json", - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-15" - ] - }, - { - "id": "task-17", - "title": "Refresh latest unpublished GitHub signals for the current prerelease window", - "status": "done", - "objective": "Use the repo-standard GitHub sync workflow to analyze recent unpublished PRs, run the local decodex-github-signal editorial workflow, and publish new evidence-backed signals so the latest prerelease window has fresh highlight candidates.", - "inputs": [ - "tools/github/backfill_release_range.py", - "tools/github/bundles", - "tools/github/analysis", - "site/src/content/signals", - "skills/decodex-github-signal/SKILL.md", - "docs/spec/github_change_bundle.md", - "docs/spec/signal_entry.md", - "docs/guide/local_github_signal_workflow.md" - ], - "outputs": [ - "New or intentionally screened signal artifacts for recent unpublished PRs, plus an updated release-delta file that reflects any newly published signals." - ], - "verification": [ - "python3 tools/github/sync_latest_signals.py --repo openai/codex --search-limit 30 --max-new-prs 5", - "python3 tools/github/validate_signal_entry.py site/src/content/signals", - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-16" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The existing signal fields are insufficient to express a useful start-here tutorial layer without changing content schema.", - "The guided-overview treatment makes version switching or focus/all state ambiguous enough to require a structural interaction redesign.", - "The homepage simplification needs broader topbar or feed-structure changes beyond the current Preview and status surfaces.", - "The curated prerelease config panel cannot stay grounded in direct upstream references without a new generated metadata shape or content contract." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Settled guided-overview structure: overview highlights first, start-here try paths second, compare metadata third, full delta last.", - "ReleaseDeltaPanel now leads with worth-trying highlights and guided try cards while preserving stable/preview switching and full-delta toggling.", - "The version pair selector, compare counts, freshness, and compare link were collapsed into one top summary rail with tightened spacing and redundant compare-prose removed from the overview body.", - "The homepage signal summary tile and its dead wiring were removed because the counts were not useful user guidance.", - "The homepage reset widget was refit for the single-status header layout by switching to the inline treatment and then increasing its typography so it remained legible.", - "Low-value helper prose in the Start here section was removed so the module relies on titles and step cards instead of obvious filler copy.", - "The Preview changes intro was reduced to a single direct headline so the top of the module gets to the point immediately.", - "The overview no longer hard-caps itself at three ranked highlights; it now shows all signals that satisfy a flat worth-trying rule based on clear try path, observable effect, non-weak confidence, and real user-facing value.", - "The decodex-github-signal skill now documents the worth-trying rubric so future AI-authored signals apply the same editorial standard instead of depending on UI-only heuristics.", - "The section was recomposed into a dynamic hero plus a two-column worth-trying/how-to system so the summary rail, try surface, and instructional surface now read as one coherent module.", - "The hero summary rail no longer draws its own divider line, and the repeated version headline/context above the from-to selector were removed so the top block stops restating the same comparison twice.", - "The duplicated Worth trying and How to try panels were merged into one primary card list, so each signal now contains its why, try path, expected outcome, and evidence link in the same reading unit.", - "The homepage header was rebalanced into two peer cards: a fuller brand card with concise promise chips on the left and a stronger stack-style reset-status card on the right.", - "The header rebalance was then tightened by removing the low-value promise chips and switching the reset-status card back to a stronger inline layout so the question and answer stay in one compact reading line.", - "The preferred header treatment was restored by bringing the promise chips back into the brand card and grouping them with the reset-status widget in one shared signal row instead of keeping reset as a separate block.", - "The topbar layout was restored to a left-right composition while keeping reset embedded inside the left brand card, so the earlier fuller structure is back without giving reset its own isolated block.", - "The Preview changes module was flattened so the outer section keeps the only strong frame while hero, worth-trying, and try/outcome detail areas now rely on spacing and divider lines instead of nested bordered panels.", - "The redundant Full delta area was removed so Preview changes now stops after version context plus worth-trying highlights and hands off directly to the full signal feed below.", - "The decodex-github-signal skill now separates publication, try_now, and homepage-highlight decisions so the middle Preview changes section no longer treats every signal with a try path as a highlight.", - "The frontend highlight gate now requires a concrete try path, concrete expected effect, confirmed confidence, and either try_now or a medium/high behavior change, which excludes low-impact capability details from the homepage highlights while keeping them in the full feed.", - "The homepage-highlight rubric was simplified again into a gate-plus-amplifier checklist so AI authoring does not depend on a fiddly score: pass the hard gates, then require at least one clear workflow/value amplifier.", - "Decodex now syncs an upstream Codex config-feature catalog from config.schema.json, uses it to canonicalize schema-backed toggles into `features. = true`, and renders those toggles as `$CODEX_HOME/config.toml` hints instead of only raw `--enable ...` flags.", - "The new prerelease config.toml panel is driven by a manual recommended-config content source, explicitly states that Xavier hand-picked the profile, and no longer carries any signal-derived evidence fields.", - "The upstream config sync now enriches each feature with direct-source links and any official config-reference note that is actually exposed on the current docs page, while flags without a dedicated official note fall back to schema plus upstream code search rather than Decodex signals.", - "Per-flag config copy was simplified into direct toggle descriptions plus direct refs (`schema`, `config reference`, `upstream search`) so the panel stays grounded in the most direct upstream sources instead of indirect release evidence.", - "The prerelease config section no longer uses a left-column TOML block; it now renders one row per feature with a dedicated explanation and refs column, while the copy button still exports the full TOML for `$CODEX_HOME/config.toml`.", - "The per-row refs column now keeps only unique value (`upstream search` and any official note); shared links like `config.schema.json` and the top-level config reference remain in the section header instead of repeating on every row.", - "Verification passed repeatedly during this iteration, including npm ci --prefix site, npm run build --prefix site, and npm run check --prefix site.", - "The prerelease config features table now supports a default-expanded collapse/expand interaction with a smooth animated table-shell transition, so the panel can compress without losing the copy action or per-flag detail layout.", - "The plain collapse button was replaced with a clickable Features divider rail that carries the collapse/expand interaction through line glow and chevron motion, making the control feel like part of the table boundary instead of a separate utility button.", - "The prerelease config table header spacing was tightened after the divider interaction pass so Feature / Why this is on / Ref sits closer to both the divider and the first data row instead of floating in extra vertical padding.", - "The refs/copy utility row was separated slightly from the curator sentence without changing its relationship to the divider or table, so the action line reads as its own toolbar instead of attaching to the prose above.", - "The collapsible config divider now uses a brighter link-toned shimmer in light theme only, so the always-on flow line stays visible on light backgrounds without overwriting the darker theme treatment.", - "The release-delta artifact was regenerated from the latest upstream releases; this refreshed the compare matrix to include rust-v0.117.0-alpha.6 and also surfaced that upstream had already published rust-v0.117.0-alpha.7 as the newest default prerelease.", - "The latest-content sync was rerun against the public GitHub API after the routed `GITHUB_PAT_Y` proved invalid, producing eight new Decodex signals (PRs 15409, 15414, 15376, 15348, 15390, 15443, 15279, and 15259) plus matching bundle/analysis artifacts without borrowing another identity's token.", - "After the public-API sync completed, signal validation passed, the release-delta artifact was refreshed anonymously, and `cargo make decodex-checks` completed successfully; the refreshed release matrix now sees rust-v0.117.0-alpha.9 as the latest upstream prerelease.", - "A follow-up public-API sync on 2026-03-26 published five more signals (PRs 14847, 15759, 15659, 15802, and 15785), refreshed the release-delta artifact to rust-v0.117.0-alpha.19, and again kept the highlight rubric conservative: four entries gained concrete try paths while the tracing-span change stayed a low-impact behavior note." - ], - "last_updated": "2026-03-26T07:39:00+08:00", - "replan_reason": null, - "context_snapshot": { - "branch": "main", - "module": "Preview changes + homepage header + prerelease config panel", - "approach": "guided preview overview above full changelog with simplified header status surfaces and a manual prerelease config panel backed by direct upstream refs" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-preview-polish.json b/docs/plans/2026-03-21_decodex-preview-polish.json deleted file mode 100644 index c0e508338..000000000 --- a/docs/plans/2026-03-21_decodex-preview-polish.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-preview-polish", - "goal": "Polish the redesigned Preview changes module by removing the inline selector arrow chrome and making in-page Full signal jumps scroll smoothly instead of snapping.", - "success_criteria": [ - "Inline stable/preview selectors no longer show the decorative dropdown arrow treatment.", - "Clicking Full signal animates to the target card smoothly instead of snapping abruptly.", - "Site build and check still pass." - ], - "constraints": [ - "Do not change the current preview comparator information architecture.", - "Keep the polish limited to styling and in-page scroll behavior." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-preview-polish", - "title": "Polish selector chrome and in-page scrolling", - "status": "done", - "objective": "Adjust CSS so the inline version selectors feel cleaner in the Tokyo Night layout and enable smooth scrolling for in-page signal links.", - "inputs": [ - "site/src/styles/global.css", - "site/src/components/ReleaseDeltaPanel.astro" - ], - "outputs": [ - "Cleaner inline selectors and smooth in-page Full signal navigation." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The scroll behavior needs JavaScript control beyond CSS smooth scrolling.", - "Removing the selector arrow makes the control ambiguous or inaccessible." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Removed the decorative dropdown arrow treatment from the inline stable/preview selectors so they read as cleaner text-like controls.", - "Enabled smooth in-page scrolling via CSS so Full signal navigation animates to target cards instead of snapping abruptly.", - "Verification passed: npm run build --prefix site and npm run check --prefix site." - ], - "last_updated": "2026-03-21T19:43:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "preview module polish", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-preview-typography-polish.json b/docs/plans/2026-03-21_decodex-preview-typography-polish.json deleted file mode 100644 index e3a1d3d8c..000000000 --- a/docs/plans/2026-03-21_decodex-preview-typography-polish.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-preview-typography-polish", - "goal": "Improve the headline hierarchy and top-of-page typography so Preview changes reads like a real section title and the surrounding top content feels more intentional, without changing the Decodex logo or the page structure.", - "success_criteria": [ - "Preview changes has stronger title weight and clearer supporting copy hierarchy.", - "The top-of-page supporting copy and status summary text sizes feel more balanced against the unchanged logo.", - "The redesign remains restrained and does not reintroduce a heavy hero.", - "Site build and check pass after the typography adjustments." - ], - "constraints": [ - "Do not change the Decodex wordmark size or styling in this pass.", - "Do not change the information architecture of the top area or the Preview changes module." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-typography-polish", - "title": "Polish Preview changes and top content typography", - "status": "done", - "objective": "Tune the typography and spacing for the Preview changes headline, chooser, and the top-page supporting text so the hierarchy feels cleaner and more premium.", - "inputs": [ - "site/src/styles/global.css" - ], - "outputs": [ - "Updated typography and spacing for the preview section and top status area." - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "Typography-only adjustments prove insufficient and the layout itself needs another structural pass.", - "Making the preview section more prominent starts to compete with the main feed too strongly." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Raised the Preview changes title and chooser typography so the module reads more like a first-class section instead of secondary copy.", - "Increased supporting text and status summary typography in the top area without changing the Decodex wordmark itself.", - "Verification passed: npm run build --prefix site and npm run check --prefix site." - ], - "last_updated": "2026-03-21T20:06:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "top hierarchy and preview typography", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-project-pages-clarify.json b/docs/plans/2026-03-21_decodex-project-pages-clarify.json deleted file mode 100644 index a4d1995df..000000000 --- a/docs/plans/2026-03-21_decodex-project-pages-clarify.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-project-pages-clarify", - "goal": "Clarify that decodex.space is served as the repository's project Pages site, not the organization root site, and align the deployment guide with GitHub's custom-domain rules.", - "success_criteria": [ - "The deployment guide explicitly describes Decodex as a repository-scoped project Pages site.", - "The guide distinguishes between repo-level custom-domain ownership and the underlying GitHub Pages DNS targets.", - "The preferred DNS path avoids unnecessary references to the organization root site when apex-only hosting is sufficient." - ], - "constraints": [ - "Do not change the actual deploy workflow unless the official docs require it.", - "Keep decodex.space as the production URL.", - "Base the clarification on current official GitHub Pages documentation." - ], - "defaults": { - "guide_path": "docs/guide/github_pages_deploy.md", - "workflow_path": ".github/workflows/deploy-pages.yml", - "astro_config_path": "site/astro.config.mjs" - }, - "tasks": [ - { - "id": "task-1", - "title": "Confirm the official GitHub Pages model for project sites and custom domains", - "status": "done", - "objective": "Verify whether repo Pages plus a custom domain still relies on the owner or organization github.io target under the hood.", - "inputs": [ - "GitHub Docs: What is GitHub Pages?", - "GitHub Docs: About custom domains and GitHub Pages", - "GitHub Docs: Managing a custom domain for your GitHub Pages site" - ], - "outputs": [ - "A precise statement of what can and cannot be made repo-specific" - ], - "verification": [ - "Official docs reviewed" - ], - "depends_on": [] - }, - { - "id": "task-2", - "title": "Revise the repo deployment guide", - "status": "done", - "objective": "Update the runbook so it describes Decodex as a project Pages site and recommends the least confusing DNS setup.", - "inputs": [ - "docs/guide/github_pages_deploy.md", - "Official GitHub Pages docs" - ], - "outputs": [ - "A corrected deployment guide" - ], - "verification": [ - "Guide text matches the official Pages model" - ], - "depends_on": [ - "task-1" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "Official Pages guidance requires a workflow or config change rather than a docs clarification" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "GitHub Docs review for project Pages and custom-domain behavior" - ], - "last_updated": "2026-03-21T04:38:00Z", - "replan_reason": null, - "context_snapshot": { - "site_url": "https://decodex.space", - "pages_type": "project site", - "default_project_url": "https://hack-ink.github.io/decodex" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-release-delta-complete-history.json b/docs/plans/2026-03-21_decodex-release-delta-complete-history.json deleted file mode 100644 index 95366614c..000000000 --- a/docs/plans/2026-03-21_decodex-release-delta-complete-history.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-release-delta-complete-history", - "goal": "Remove the artificial release-delta truncation so Decodex exposes the full preview history and all tracked preview changes from the supported 0.116.0 floor onward.", - "success_criteria": [ - "The release-delta artifact includes all preview options at or above the current supported floor instead of a capped subset.", - "The comparator precomputes all valid stable-to-preview pairs from the supported floor instead of a capped subset.", - "The homepage Preview changes module renders the full tracked signal list for the selected compare pair instead of truncating to three entries.", - "The rebuilt artifact and homepage pass repo-native verification." - ], - "constraints": [ - "Keep the supported stable floor at rust-v0.116.0.", - "Do not remove the existing release-delta module; fix completeness first.", - "Preserve static-site behavior and precomputed compare switching." - ], - "defaults": { - "repo": "openai/codex", - "release_delta_path": "site/src/content/release-deltas/openai-codex-latest.json" - }, - "tasks": [ - { - "id": "task-1", - "title": "Remove generator-side release and compare caps", - "status": "done", - "objective": "Update the release-delta builder and spec so the comparator includes the full supported preview history from the 0.116.0 floor onward.", - "inputs": [ - "tools/github/build_release_delta.py", - "docs/spec/release_delta.md" - ], - "outputs": [ - "An updated generator and spec with complete supported compare coverage" - ], - "verification": [ - "python3 tools/github/build_release_delta.py --repo openai/codex --signals-dir site/src/content/signals --out site/src/content/release-deltas/openai-codex-latest.json" - ], - "depends_on": [] - }, - { - "id": "task-2", - "title": "Render the full tracked preview list in the homepage module", - "status": "done", - "objective": "Remove the three-item UI truncation so Preview changes shows every tracked signal for the selected compare pair.", - "inputs": [ - "site/src/components/ReleaseDeltaPanel.astro", - "site/src/styles/global.css" - ], - "outputs": [ - "A complete Preview changes list for the selected version pair" - ], - "verification": [ - "npm run build --prefix site", - "npm run check --prefix site" - ], - "depends_on": [ - "task-1" - ] - }, - { - "id": "task-3", - "title": "Rebuild artifacts and verify final coverage", - "status": "done", - "objective": "Regenerate the release-delta artifact, confirm the full compare set is exposed, and run repo-native checks.", - "inputs": [ - "Updated generator", - "Updated release-delta UI" - ], - "outputs": [ - "A rebuilt complete-history artifact with passing verification" - ], - "verification": [ - "cargo make decodex-checks" - ], - "depends_on": [ - "task-2" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The full tracked list is too large to render acceptably and needs a different complete-but-denser UI contract" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "python3 tools/github/build_release_delta.py --repo openai/codex --signals-dir site/src/content/signals --out site/src/content/release-deltas/openai-codex-latest.json", - "cargo make decodex-checks" - ], - "last_updated": "2026-03-21T04:37:00Z", - "replan_reason": null, - "context_snapshot": { - "stable_floor": "rust-v0.116.0", - "preview_option_count": 3, - "compare_count": 3, - "active_pair_tracked_signal_count": 58 - } - } -} diff --git a/docs/plans/2026-03-21_decodex-stable-floor.json b/docs/plans/2026-03-21_decodex-stable-floor.json deleted file mode 100644 index 61f37ac04..000000000 --- a/docs/plans/2026-03-21_decodex-stable-floor.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "2026-03-21_decodex-stable-floor", - "goal": "Limit the homepage preview comparator so stable-version support starts at 0.116.0 and older stable releases are not exposed in the UI or generated compare matrix.", - "success_criteria": [ - "The release-delta builder excludes stable releases older than rust-v0.116.0 by default.", - "The generated artifact no longer exposes stable options older than 0.116.0.", - "Site build and repo-native checks still pass after regenerating the artifact." - ], - "constraints": [ - "Keep the current bounded compare model and UI structure.", - "Apply the floor as a deterministic generation rule rather than a front-end-only filter." - ], - "defaults": { - "workdir": "/Users/xavier/code/trusted/y/hack-ink/decodex/.workspaces/feat-decodex-github-first" - }, - "tasks": [ - { - "id": "task-01-apply-stable-floor", - "title": "Apply a stable-version floor to the comparator data", - "status": "done", - "objective": "Add a minimum stable release boundary to release-delta generation, rebuild the artifact, and verify the homepage still works with the narrowed option set.", - "inputs": [ - "tools/github/build_release_delta.py", - "site/src/content/release-deltas/openai-codex-latest.json", - "docs/spec/release_delta.md" - ], - "outputs": [ - "A release-delta artifact whose stable options start at rust-v0.116.0." - ], - "verification": [ - "python3 tools/github/build_release_delta.py --repo openai/codex --signals-dir site/src/content/signals --out site/src/content/release-deltas/openai-codex-latest.json", - "cargo make decodex-checks" - ], - "depends_on": [] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The comparator later needs broader historical support than 0.116.0 onward.", - "Version-floor semantics need to vary by repo or release channel." - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "build_release_delta.py now applies a minimum stable tag floor of rust-v0.116.0 by default during option selection.", - "The regenerated release-delta artifact now exposes only stable option 0.116.0, with preview options unchanged and comparison entries reduced to 3 bounded pairs.", - "Verification passed: cargo make decodex-checks." - ], - "last_updated": "2026-03-21T19:54:00+08:00", - "replan_reason": null, - "context_snapshot": { - "focus": "stable version floor", - "lane": "feat-decodex-github-first" - } - } -} diff --git a/docs/plans/2026-03-21_decodex-tokyo-night-system-theme.json b/docs/plans/2026-03-21_decodex-tokyo-night-system-theme.json deleted file mode 100644 index 1e1019eb4..000000000 --- a/docs/plans/2026-03-21_decodex-tokyo-night-system-theme.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "spec": { - "schema": "plan/1", - "plan_id": "decodex-tokyo-night-system-theme-2026-03-21", - "goal": "Add automatic system-following theme support so Decodex uses Tokyo Night Light in light mode and Tokyo Night in dark mode without introducing a manual theme switcher.", - "success_criteria": [ - "The site exposes two coherent theme token sets named Tokyo Night Light and Tokyo Night.", - "Theme selection follows the system color scheme automatically via CSS rather than a manual toggle.", - "The homepage shell, release-delta module, feed, code treatments, and badges all remain legible in both light and dark modes.", - "The implementation removes or absorbs remaining hardcoded light-only color values that would break the dark theme.", - "The site still passes build and Astro checks after the theme work." - ], - "constraints": [ - "Do not add a manual theme picker or client-side theme persistence for this pass.", - "Keep the change within the existing GitHub-first lane and current one-page site structure.", - "Prefer CSS variables and media queries over component-specific theme branching.", - "Leave unrelated repo changes untouched." - ], - "defaults": { - "dark_theme": "Tokyo Night", - "light_theme": "Tokyo Night Light", - "mode": "system" - }, - "tasks": [ - { - "id": "task-01-theme-plan", - "title": "Persist the theme plan and inventory hardcoded colors", - "status": "done", - "objective": "Save the execution contract and identify the remaining hardcoded color points that must move under shared theme tokens.", - "inputs": [ - "Current site CSS and layout files" - ], - "outputs": [ - "A validated plan/1 file", - "An inventory of theme-sensitive color surfaces" - ], - "verification": [ - "The plan file validates as plan/1 JSON.", - "The implementation surface is reduced to the shared theme token layer plus any documented hardcoded exceptions." - ], - "depends_on": [] - }, - { - "id": "task-02-theme-implementation", - "title": "Implement Tokyo Night Light and Tokyo Night tokens", - "status": "done", - "objective": "Refactor the site styles so the page uses shared theme tokens and automatically switches between light and dark Tokyo Night palettes.", - "inputs": [ - "Task 01 inventory", - "Current site shell and component CSS" - ], - "outputs": [ - "Updated global theme variables", - "Adjusted component styling for both modes" - ], - "verification": [ - "Light and dark theme surfaces both derive from CSS variables.", - "No hardcoded light-only accent values remain in the theme-sensitive shell paths." - ], - "depends_on": [ - "task-01-theme-plan" - ] - }, - { - "id": "task-03-verify-theme", - "title": "Verify the themed site and refresh preview", - "status": "done", - "objective": "Run site checks after the theme work and confirm the preview server serves the updated themed output.", - "inputs": [ - "Task 02 themed site" - ], - "outputs": [ - "Passing build and check evidence", - "A refreshed local preview on the existing local port or an equivalent reachable port" - ], - "verification": [ - "`npm run build` passes from site/.", - "`npm run check` passes from site/.", - "The local preview responds successfully after the rebuild." - ], - "depends_on": [ - "task-02-theme-implementation" - ] - } - ], - "replan_policy": { - "owner": "plan-writing", - "triggers": [ - "The dark theme exposes additional component-level color assumptions that cannot be solved cleanly through shared tokens alone", - "A manual theme override becomes a product requirement instead of automatic system following" - ] - } - }, - "state": { - "phase": "done", - "current_task_id": null, - "next_task_id": null, - "blockers": [], - "evidence": [ - "Inventoried the remaining hardcoded theme-sensitive colors in site/src/styles/global.css: the root palette, success accent borders, and markdown link underline color.", - "Refactored the root palette into a Tokyo Night Light default plus a prefers-color-scheme dark override for Tokyo Night.", - "Updated BaseLayout.astro to expose matching light and dark theme-color meta tags for browser chrome.", - "`npm run build` passed from site/ on 2026-03-21 after the theme token changes.", - "`npm run check` passed from site/ on 2026-03-21 after the theme token changes.", - "Restarted the local preview server on http://127.0.0.1:4411 and verified it responds with HTTP 200.", - "Confirmed the rebuilt index.html now emits light and dark theme-color meta tags and serves the refreshed static output." - ], - "last_updated": "2026-03-21T01:24:00Z", - "replan_reason": null, - "context_snapshot": { - "current_problem": "The site is locked to a light palette, so night-time usage looks harsh and does not match the cleaner product shell now in place.", - "direction": "Introduce a system-following dual-theme token layer using Tokyo Night Light and Tokyo Night without adding UI complexity.", - "lane": "Reuse .workspaces/feat-decodex-github-first." - } - } -} diff --git a/docs/policy.md b/docs/policy.md index 08ea11953..ac76b28b5 100644 --- a/docs/policy.md +++ b/docs/policy.md @@ -37,9 +37,6 @@ This repository standardizes on four primary documentation lanes: shipped research tooling. - `docs/research/` is not a primary documentation lane and is not authoritative for runtime behavior, repository policy, or operator procedures. -- `docs/plans/` is allowed for historical saved plan artifacts from the original - static-site bootstrap. It is not a primary documentation lane and is not authoritative - for runtime behavior, repository policy, or operator procedures. - If a research result becomes durable repository guidance, promote it into `spec`, `runbook`, `reference`, or `decisions` and link back to the originating artifact only as supporting evidence. diff --git a/docs/reference/workspace-layout.md b/docs/reference/workspace-layout.md index 47d854fde..a304a2703 100644 --- a/docs/reference/workspace-layout.md +++ b/docs/reference/workspace-layout.md @@ -31,7 +31,6 @@ should not be treated as repository source. | `docs/reference/` | Current repository and artifact surface maps. | | `docs/decisions/` | Durable rationale for repository-level design choices. | | `docs/research/` | Machine-authored research run artifacts used by shipped research tooling. | -| `docs/plans/` | Historical saved plan artifacts from the static-site bootstrap. These are not primary authority. | | `dev/` | Local development helpers outside `dev/skills/`, such as the operator dashboard mock server. | | `assets/` | Shared static assets that are not owned by the Astro app's generated output. Decodex App icons live under `assets/app-icon/{source,composer,generated}/`; menu bar template assets live under `assets/tray-icon/{source,generated}/`; `scripts/assets/render_decodex_app_icons.swift` regenerates the icon set. | | `.github/` | CI, release, Pages deployment, and content-refresh workflows. | @@ -161,8 +160,8 @@ tracker routing, and policy. - Reusable agent-facing Decodex usage instructions live under `plugins/decodex/`. - `docs/runbook/`, `docs/reference/`, and `docs/decisions/` must not override runtime or workflow authority. -- `docs/research/` and `docs/plans/` are supporting evidence only. They do not become - policy until their conclusions are promoted into governing docs. +- `docs/research/` is supporting evidence only. It does not become policy until its + conclusions are promoted into governing docs. ## Local-only and generated directories diff --git a/docs/research/2026-04-01_plan-linear-decoupled-design/run.json b/docs/research/2026-04-01_plan-linear-decoupled-design/run.json index eb1259fa7..79e3d8838 100644 --- a/docs/research/2026-04-01_plan-linear-decoupled-design/run.json +++ b/docs/research/2026-04-01_plan-linear-decoupled-design/run.json @@ -1,7 +1,7 @@ { "schema": "research-run/2", "run_id": "2026-04-01_plan-linear-decoupled-design", - "question": "How should the plan plugin keep its old docs/plans strengths after moving storage to Linear while staying decoupled from decodex and from overly specific Linear transport details?", + "question": "How should the plan plugin keep its old legacy saved-plan strengths after moving storage to Linear while staying decoupled from decodex and from overly specific Linear transport details?", "success_criteria": [ "Identify the clean boundary between decodex, the routed Linear issue, and the plan plugin's machine authority surfaces.", "Compare at least two viable plan-plugin architecture options for the Linear-backed design.", @@ -9,7 +9,7 @@ ], "constraints": [ "Keep decodex plan-agnostic and dependent only on generic issue briefing plus normal tracker and PR surfaces.", - "Assume the canonical plan storage remains in Linear rather than reverting to repository-local docs/plans authority.", + "Assume the canonical plan storage remains in Linear rather than reverting to repository-local saved-plan authority.", "Use bounded repository-local evidence from decodex and the repo-local plan plugin only." ], "stop_rule": "Stop once the bounded pass can recommend one design shape for the Linear-backed plan plugin and name the smallest contract corrections needed to make it reliable.", @@ -79,7 +79,7 @@ }, { "id": "T2", - "summary": "The current direct use of routed issue exports is pragmatic and keeps the plugin thin, but it also couples execution more tightly to Linear export shape than the old docs/plans model needed.", + "summary": "The current direct use of routed issue exports is pragmatic and keeps the plugin thin, but it also couples execution more tightly to Linear export shape than the old saved-plan model needed.", "supporting_evidence_ids": [ "E3", "E4" @@ -120,7 +120,7 @@ { "id": "E8", "kind": "inference", - "summary": "Keeping execution bound directly to issue.documents content and linked-document enumeration preserves current behavior but does not recover the old docs/plans-style transport decoupling." + "summary": "Keeping execution bound directly to issue.documents content and linked-document enumeration preserves current behavior but does not recover the old saved-plan transport decoupling." } ] }, @@ -130,7 +130,7 @@ "tradeoffs": [ { "id": "T4", - "summary": "A thin Linear ingress adapter preserves the successful old docs/plans semantics after the move to Linear, but only if the adapter owns raw export validation and the core stops depending on full routed issue exports.", + "summary": "A thin Linear ingress adapter preserves the successful old saved-plan semantics after the move to Linear, but only if the adapter owns raw export validation and the core stops depending on full routed issue exports.", "supporting_evidence_ids": [ "E4", "E6", @@ -215,7 +215,7 @@ "tradeoffs": [ { "id": "T6", - "summary": "A staged design preserves the successful move from docs/plans to Linear while avoiding a premature promise of a transport-agnostic core before runtime ownership and canonical selection semantics are cleaned up.", + "summary": "A staged design preserves the successful move from legacy saved-plan storage to Linear while avoiding a premature promise of a transport-agnostic core before runtime ownership and canonical selection semantics are cleaned up.", "supporting_evidence_ids": [ "E9", "E10", @@ -303,7 +303,7 @@ "tradeoffs": [ { "id": "T8", - "summary": "Moving task progress and task-status ownership out of spec and into runtime-owned state restores the old docs/plans-style separation between stable intent and execution state, but it requires a schema revision to tracked-plan rather than a wording-only fix.", + "summary": "Moving task progress and task-status ownership out of spec and into runtime-owned state restores the old saved-plan separation between stable intent and execution state, but it requires a schema revision to tracked-plan rather than a wording-only fix.", "supporting_evidence_ids": [ "E9", "E13", @@ -417,7 +417,7 @@ }, { "id": "T12", - "summary": "Adding an explicit plan revision or lineage contract is more verbose than timestamp selection, but it restores deterministic authority after replans and preserves one of the old docs/plans strengths: clear canonical ownership.", + "summary": "Adding an explicit plan revision or lineage contract is more verbose than timestamp selection, but it restores deterministic authority after replans and preserves one of the old saved-plan strengths: clear canonical ownership.", "supporting_evidence_ids": [ "E17", "E21" diff --git a/docs/spec/index.md b/docs/spec/index.md index 1a8cd82ad..8b87a3f07 100644 --- a/docs/spec/index.md +++ b/docs/spec/index.md @@ -86,8 +86,6 @@ Then keep the body explicit: publication, block, skip, and failure records for `@decodexspace`. - [`site-contract.md`](./site-contract.md) defines the static-site page budget, homepage obligations, and card rendering contract. -- [`reset-status.md`](./reset-status.md) defines the reset-status artifact consumed by - the static site. - [`linear-execution-ledger.md`](./linear-execution-ledger.md) defines the versioned Linear comment event-ledger schema for low-frequency Decodex lane transitions. - [`agent-evidence.md`](./agent-evidence.md) defines the local agent-readable evidence diff --git a/docs/spec/reset-status.md b/docs/spec/reset-status.md deleted file mode 100644 index 31bb0cdd7..000000000 --- a/docs/spec/reset-status.md +++ /dev/null @@ -1,106 +0,0 @@ -# Reset Status - -Purpose: Define the artifact and homepage behavior for the reset-status widget. - -Status: normative - -Read this when: -- You are changing the homepage reset-status widget. -- You are changing how Decodex decides whether "Rate limit reset today?" is `Yes`, - `No`, or `Unknown`. -- You are producing or reviewing the reset-status artifact. - -Not this document: -- The general social publishing workflow. -- The Codex upstream signal-entry contract. - -Defines: -- The X account used as the reset-status source. -- The `reset_status/v1` artifact consumed by the static site. -- The AI semantic judgment rule for reset status. -- The publication boundary for when changed reset-status content reaches the homepage. - -## Source - -The reset-status source is the X account: - -- account: `@thsottiaux` -- profile URL: `https://x.com/thsottiaux` - -The static site must not fetch X, OpenAI Status, or another live API from the browser for -this widget. The site reads the latest checked-in reset-status artifact under: - -- `site/src/content/reset-status/*.json` - -## Artifact - -The artifact schema is: - -- `schema`: must be `reset_status/v1` -- `question`: must be the rendered question, currently `Rate limit reset today?` -- `answer`: one of `yes`, `no`, or `unknown` -- `confidence`: one of `confirmed`, `likely`, or `weak` -- `observed_for_date`: the date being judged, formatted as `YYYY-MM-DD` -- `timezone`: the timezone used to interpret "today" -- `generated_at`: generation timestamp -- `source_account`: the X handle that was reviewed -- `source_url`: the reviewed profile URL -- `search_url`: optional X search URL used during review -- `judgment_mode`: must be `ai_semantic_review` -- `rationale`: short explanation for the decision -- `evidence_posts`: reviewed candidate posts or summaries, each marked as `related`, - `not_related`, or `uncertain` - -## Judgment Rule - -The reset answer is an AI semantic judgment over today's visible `@thsottiaux` posts. -It must not be a keyword-only check. - -Set `answer` to `yes` when at least one reviewed post, quote, or directly linked context -semantically says that rate limits reset, message caps recovered, quota windows reset, or -users should wait for a reset window. The exact phrase `rate limit reset` is not required. - -Set `answer` to `no` when today's reviewed posts are sufficiently visible and none of -them semantically indicates a rate-limit reset event. - -Set `answer` to `unknown` when X access, search, login state, timeline loading, or post -visibility prevents a useful judgment. - -## Review Rule - -The reviewer must collect today's candidate posts first, then make the semantic decision. -Good evidence can come from X profile results, X search results, quoted context, or visible -thread context. - -Chrome/X tabs used for search, profile review, or thread context are temporary -observation resources. Close or release them after writing the artifact. Keep a tab -open only when the run must hand off a login, CAPTCHA, or other human-only X state to -the operator. - -Do not mark `yes` from generic words such as `reset`, `limit`, `fast`, `quota`, or -`rate` unless the surrounding context is about rate-limit reset behavior. - -Do not mark `yes` from unrelated release, browser, performance, or product-quality posts. - -## Homepage Rule - -The homepage renders the checked-in artifact directly: - -- `yes` renders `Yes` in the positive tone -- `no` renders `No` in the neutral tone -- `unknown` renders `Unknown` in the muted tone - -The widget links to the artifact's `search_url` when present, otherwise to `source_url`. - -## Publication Rule - -The reset-status artifact becomes homepage content only after it is checked into the Git -branch that feeds the static-site deployment and that deployment renders it. A local -artifact edit alone is not a homepage update. - -This spec defines the content and homepage contract. It does not define the automation -schedule, browser observation procedure, commit mechanics, notification format, or memory -retention policy. - -GitHub Actions may deploy checked-in content, but Actions must not become the source of -the X-reading AI semantic decision. diff --git a/site/.astro/content.d.ts b/site/.astro/content.d.ts index 21aec426e..f9cb16f91 100644 --- a/site/.astro/content.d.ts +++ b/site/.astro/content.d.ts @@ -128,14 +128,6 @@ declare module 'astro:content' { rendered?: RenderedContent; filePath?: string; }>; -"resetStatus": Record; - rendered?: RenderedContent; - filePath?: string; -}>; "signals": Record - { - variant === "stack" ? ( - <> - {question} - - - {answer} - - - ) : ( - <> - {question} - - - {answer} - - - ) - } - diff --git a/site/src/components/UtilitySlot.astro b/site/src/components/UtilitySlot.astro deleted file mode 100644 index 9d1f55ce7..000000000 --- a/site/src/components/UtilitySlot.astro +++ /dev/null @@ -1,4 +0,0 @@ -
- GitHub-first lane - Reset widget pending -
diff --git a/site/src/content.config.ts b/site/src/content.config.ts index e43c8b7fc..a236591f6 100644 --- a/site/src/content.config.ts +++ b/site/src/content.config.ts @@ -159,29 +159,6 @@ const releaseDeltaSchema = z }); }); -const resetStatusEvidencePostSchema = z.object({ - published_at_label: z.string().min(1).optional(), - relevance: z.enum(["related", "not_related", "uncertain"]), - summary: z.string().min(1), - url: z.string().regex(/^https:\/\//, "post url must be an https URL").optional(), -}); - -const resetStatusSchema = z.object({ - schema: z.literal("reset_status/v1"), - question: z.string().min(1), - answer: z.enum(["yes", "no", "unknown"]), - confidence: z.enum(["confirmed", "likely", "weak"]), - observed_for_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "observed_for_date must be YYYY-MM-DD"), - timezone: z.string().min(1), - generated_at: z.string().min(1), - source_account: z.string().min(1), - source_url: z.string().regex(/^https:\/\//, "source_url must be an https URL"), - search_url: z.string().regex(/^https:\/\//, "search_url must be an https URL").optional(), - judgment_mode: z.literal("ai_semantic_review"), - rationale: z.string().min(1), - evidence_posts: z.array(resetStatusEvidencePostSchema).default([]), -}); - const signals = defineCollection({ loader: glob({ pattern: "**/*.json", @@ -198,16 +175,7 @@ const releaseDeltas = defineCollection({ schema: releaseDeltaSchema, }); -const resetStatus = defineCollection({ - loader: glob({ - pattern: "**/*.json", - base: "./src/content/reset-status", - }), - schema: resetStatusSchema, -}); - export const collections = { signals, releaseDeltas, - resetStatus, }; diff --git a/site/src/content/reset-status/latest.json b/site/src/content/reset-status/latest.json deleted file mode 100644 index 8776f0698..000000000 --- a/site/src/content/reset-status/latest.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "schema": "reset_status/v1", - "question": "Rate limit reset today?", - "answer": "no", - "confidence": "likely", - "observed_for_date": "2026-06-10", - "timezone": "Asia/Shanghai", - "generated_at": "2026-06-10T08:25:45Z", - "source_account": "@thsottiaux", - "source_url": "https://x.com/thsottiaux", - "search_url": "https://x.com/search?q=from%3Athsottiaux%20since%3A2026-06-09%20until%3A2026-06-11&src=typed_query&f=live", - "judgment_mode": "ai_semantic_review", - "rationale": "Logged-in Chrome/X search and profile review were reachable for the 2026-06-10 Asia/Shanghai watch date. A refreshed widened Latest search at 2026-06-10 16:23 +08 and strict date search showed three same-day @thsottiaux candidates, all about model naming, model-roadmap sentiment, or the Codex App. Thread context included other users requesting limit resets, but no source-account post announced or implied a rate-limit reset, quota recovery, message-cap recovery, or reset window.", - "evidence_posts": [ - { - "published_at_label": "2026-06-10 16:23 +08 observation", - "url": "https://x.com/search?q=from%3Athsottiaux%20since%3A2026-06-09%20until%3A2026-06-11&src=typed_query&f=live", - "relevance": "not_related", - "summary": "Logged-in Chrome/X Latest search for @thsottiaux posts across the widened UTC coverage window loaded and was refreshed. The newest visible source-account results inside the 2026-06-10 Asia/Shanghai window were three posts at 12:45-12:56 +08; none announced a reset, quota recovery, message-cap recovery, or reset window." - }, - { - "published_at_label": "2026-06-10 16:25 +08 observation", - "url": "https://x.com/search?q=from%3Athsottiaux%20since%3A2026-06-10%20until%3A2026-06-11&src=typed_query&f=live", - "relevance": "not_related", - "summary": "Strict X Latest search for @thsottiaux posts with since:2026-06-10 until:2026-06-11 returned the same three source-account candidates visible in today's +08 window. They were about model naming/royalty jokes, confidence in model roadmap direction, and the Codex App, not limit reset behavior." - }, - { - "published_at_label": "2026-06-10 12:56 +08 (X datetime 2026-06-10T04:56:03Z)", - "url": "https://x.com/thsottiaux/status/2064572276180484475", - "relevance": "not_related", - "summary": "Source-account post said the author would like to claim royalty fees and quoted an older GPT-5.4-Pro naming joke. Replies included other users asking for a reset button or limit reset, but the @thsottiaux post itself did not indicate reset, quota recovery, message-cap recovery, or a reset window." - }, - { - "published_at_label": "2026-06-10 12:55 +08 (X datetime 2026-06-10T04:55:25Z)", - "url": "https://x.com/thsottiaux/status/2064572118264913923", - "relevance": "not_related", - "summary": "Source-account reply said the author felt pretty good about things in a thread about model roadmap/release sentiment. The immediate thread context discussed model competition and user hopes, not a reset-window announcement or quota/message-cap recovery." - }, - { - "published_at_label": "2026-06-10 12:45 +08 (X datetime 2026-06-10T04:45:42Z)", - "url": "https://x.com/thsottiaux/status/2064569673367404624", - "relevance": "not_related", - "summary": "Source-account reply said the author cannot live without the Codex App and that it is built for everyone. Replies included complaints or requests about Codex limits, but no source-account reset, quota recovery, message-cap recovery, or reset-window signal." - }, - { - "published_at_label": "2026-06-10 16:25 +08 profile review", - "url": "https://x.com/thsottiaux", - "relevance": "not_related", - "summary": "Profile review showed the latest visible profile post as the 12:56 +08 model-naming/royalty joke, followed by prior 2026-06-09 Codex workflow posts. The profile view did not show a same-day source-account reset announcement." - } - ] -} diff --git a/site/src/lib/reset-status.ts b/site/src/lib/reset-status.ts deleted file mode 100644 index 96e533465..000000000 --- a/site/src/lib/reset-status.ts +++ /dev/null @@ -1,51 +0,0 @@ -export const RESET_STATUS_QUESTION = "Rate limit reset today?"; -export const RESET_STATUS_SOURCE_ACCOUNT = "@thsottiaux"; -export const RESET_STATUS_SOURCE_URL = "https://x.com/thsottiaux"; - -export type ResetStatusAnswer = "yes" | "no" | "unknown"; -export type ResetStatusConfidence = "confirmed" | "likely" | "weak"; - -export type ResetStatusEvidencePost = { - published_at_label?: string; - relevance: "related" | "not_related" | "uncertain"; - summary: string; - url?: string; -}; - -export type ResetStatusData = { - answer: ResetStatusAnswer; - confidence: ResetStatusConfidence; - evidence_posts: ResetStatusEvidencePost[]; - generated_at: string; - judgment_mode: "ai_semantic_review"; - observed_for_date: string; - question: string; - rationale: string; - schema: "reset_status/v1"; - search_url?: string; - source_account: string; - source_url: string; - timezone: string; -}; - -export function resetStatusAnswerLabel(answer: ResetStatusAnswer): string { - switch (answer) { - case "yes": - return "Yes"; - case "no": - return "No"; - case "unknown": - return "Unknown"; - } -} - -export function resetStatusTone(answer: ResetStatusAnswer): "muted" | "neutral" | "positive" { - switch (answer) { - case "yes": - return "positive"; - case "no": - return "neutral"; - case "unknown": - return "muted"; - } -} diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro index db42990f2..fc0b265be 100644 --- a/site/src/pages/index.astro +++ b/site/src/pages/index.astro @@ -3,7 +3,6 @@ import { getCollection } from "astro:content"; import AppcastDownloadWidget from "@/components/AppcastDownloadWidget.astro"; import EmptyFeedState from "@/components/EmptyFeedState.astro"; import FilterBar from "@/components/FilterBar.astro"; -import ResetStatusWidget from "@/components/ResetStatusWidget.astro"; import SignalCard from "@/components/SignalCard.astro"; import SignalSymphony from "@/components/SignalSymphony.astro"; import ThemeToggle from "@/components/ThemeToggle.astro"; @@ -14,7 +13,6 @@ import { type ReleaseDeltaData, } from "@/lib/release-delta"; import { renderMarkdownInline } from "@/lib/render-markdown"; -import { type ResetStatusData } from "@/lib/reset-status"; import { FILTERS, formatPublishedAt, @@ -35,7 +33,6 @@ const primaryXUrl = "https://x.com/hackink"; const signalBotXUrl = "https://x.com/decodexspace"; const collectionEntries = await getCollection("signals"); const releaseDeltaEntries = await getCollection("releaseDeltas"); -const resetStatusEntries = await getCollection("resetStatus"); const allSignals: SignalCardData[] = sortSignals( collectionEntries.map((entry) => ({ id: entry.id, @@ -47,10 +44,6 @@ const releaseDelta: ReleaseDeltaData | null = releaseDeltaEntries .map((entry) => entry.data as ReleaseDeltaData) .find((entry) => entry.repo === "openai/codex") ?? null; -const resetStatus: ResetStatusData | null = - resetStatusEntries - .map((entry) => entry.data as ResetStatusData) - .sort((left, right) => right.generated_at.localeCompare(left.generated_at))[0] ?? null; const previewSignal: SignalCardData = { id: "preview-shell", @@ -559,10 +552,6 @@ const interactionRuntimeScript = `(function () { ) : null } -
- Rate limit reset - -
diff --git a/site/src/styles/global.css b/site/src/styles/global.css index d73a3e86c..601a38d83 100644 --- a/site/src/styles/global.css +++ b/site/src/styles/global.css @@ -765,78 +765,6 @@ code { font-size: 0.78rem; } -.reset-inline { - display: inline-flex; - flex-wrap: wrap; - align-items: center; - gap: 0.45rem 0.7rem; - max-width: 100%; - color: var(--stage-soft); - font-size: 0.92rem; - line-height: 1.25; - transition: - color 180ms ease, - transform 180ms ease; -} - -.reset-inline:hover, -.reset-inline:focus-visible { - transform: translateY(-0.04rem); -} - -.reset-inline__question { - color: var(--stage-ink); - font-weight: 760; -} - -.reset-inline:hover .reset-inline__question, -.reset-inline:focus-visible .reset-inline__question { - color: var(--accent-strong); -} - -.reset-inline__answer { - display: inline-flex; - align-items: center; - gap: 0.35rem; - color: var(--stage-soft); - font-weight: 760; -} - -.reset-inline__dot { - width: 0.48rem; - height: 0.48rem; - border-radius: 50%; - background: var(--stage-muted); - box-shadow: 0 0 0 0.18rem rgba(119, 131, 151, 0.18); - transition: - background-color 180ms ease, - box-shadow 180ms ease, - transform 180ms ease; -} - -.reset-inline:hover .reset-inline__dot, -.reset-inline:focus-visible .reset-inline__dot { - transform: scale(1.12); -} - -.reset-inline--positive .reset-inline__answer { - color: var(--success); -} - -.reset-inline--positive .reset-inline__dot { - background: var(--success); - box-shadow: 0 0 0 0.18rem color-mix(in srgb, var(--success) 18%, transparent); -} - -.reset-inline--neutral .reset-inline__answer { - color: var(--stage-soft); -} - -.reset-inline--neutral .reset-inline__dot { - background: var(--stage-muted); - box-shadow: 0 0 0 0.18rem rgba(119, 131, 151, 0.18); -} - .utility-strip { position: relative; z-index: 20; @@ -903,10 +831,6 @@ code { z-index: 3; } -.utility-row--reset { - min-width: 0; -} - .utility-row--download:hover, .utility-row--download:focus-within, .utility-row--download:has(.appcast-download[data-appcast-open="true"]) { @@ -976,8 +900,6 @@ code { } .utility-row .appcast-download__title, -.utility-row .reset-inline__question, -.utility-row .reset-inline__answer, .utility-row--window strong { color: var(--stage-ink); font-size: 0.92rem; @@ -992,19 +914,6 @@ code { white-space: nowrap; } -.utility-row--reset .reset-inline { - justify-content: flex-end; -} - -.utility-row--reset .reset-inline__question { - display: none; -} - -.utility-row--reset .reset-inline__answer { - font-size: 0.92rem; - font-weight: 820; -} - .utility-row--window a { display: flex; align-items: baseline;