Skip to content

docs: honest science rewrite, Marketplace-first README, CONTRIBUTING.md - #17

Merged
crypticpy merged 3 commits into
mainfrom
docs/readme-2.0
Aug 18, 2026
Merged

docs: honest science rewrite, Marketplace-first README, CONTRIBUTING.md#17
crypticpy merged 3 commits into
mainfrom
docs/readme-2.0

Conversation

@crypticpy

@crypticpy crypticpy commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Summary

Plan step 6 of docs/plans/2026-08-18-audit-remediation.md — make the README say what the palette actually does, in the order a Marketplace visitor reads it, and move contributor docs out.

README

  • "The Science" rewritten. Dominant wavelength (576–611 nm, true of every hex) is separated from spectral content: the neutrals still light the blue subpixel (~23–27 % of their light vs 33 % for white; 2.0.0 cut the bright neutrals' blue drive from 37–48 % to 32–39 % of full). The old rod-impact table is replaced by the CIE 1951 scotopic V′(λ) curve (peak 507 nm). Benefits are stated as what they are — low text luminance (halation), no blue defocus / chromatic aberration, lower melanopic stimulus, comfort — and "protects dark adaptation" is retracted (reading is cone vision; the neutrals stimulate rods at ~85 % of white per unit luminance; red-only variants stay on the roadmap). Halation is attributed to dim text, not to #0C0A09 vs #000000. Numbers were recomputed from the 2.0.0 palette (scratch script, tristimulus approximation — labelled indicative).
  • Marketplace-first ordering: pitch → variants table → science → install → settings → display → palette → variants → terminal → extensions → language support → accessibility → FAQ → contributing. Hero-image slot reserved for PR 7.
  • Accessibility: WCAG + APCA side by side with the verifier's floors; new CVD section (protan/deutan checks, 10 role pairs, all four variants incl. Roman on colour alone); "Keywords use weight 450 (lighter bold)" corrected — theme bold is 700, 450 is editor.fontWeight for body text.
  • Settings: "editor.fontVariations": true so a variable font really renders 450; Display: melanopic / OS warm-shift advice (Night Shift stacks with the palette).
  • FAQ: "Why no blue or cyan?" rewritten; new "Does it protect my night vision?" (no) and "Is it colour-blind safe?".
  • All verifier-owned tables (<!-- verify:… -->) untouched and re-rendered; npm run verify reports README current.

Elsewhere

  • CONTRIBUTING.md (new): layout, build commands, the verifier contract (every hard-fail check and threshold), palette-change / scope-addition / new-variant procedures, PR expectations. The README "Building the Themes (Contributors)" section moves there.
  • package.json description drops the dark-adaptation claim.
  • CHANGELOG 2.0.0 "Changed — Docs".

Test plan

  • npm run check (incl. README-table drift check) green, npm test 26/26
  • Every relative anchor in README resolves (#what-it-does-not-do, #display-recommendations, #theme-variants, CHANGELOG.md#future-plans)
  • vsce ls unchanged (CONTRIBUTING.md is excluded by the *.md rule)

🤖 Generated with Claude Code

Summary by Sourcery

Rewrite the project documentation to present the theme accurately to users and provide a dedicated guide for contributors.

New Features:

  • Add a Marketplace-first README with installation, variant guidance, display recommendations, accessibility information, and expanded FAQs.
  • Add contributor documentation covering project layout, build and verification workflows, palette and variant changes, and pull request requirements.

Bug Fixes:

  • Correct the project's science claims by distinguishing dominant wavelength from spectral content and retracting unsupported dark-adaptation and halation claims.
  • Correct documentation of font weights, variable-font settings, colour-vision accessibility, and terminal colour behavior.

Enhancements:

  • Reframe the theme's benefits around low luminance, reduced blue defocus, lower melanopic stimulation, and user comfort.
  • Update the package description and 2.0.0 changelog to reflect the revised positioning and documentation.

Documentation:

  • Reorganize and substantially rewrite the README for Marketplace visitors while preserving verifier-generated tables.

Tests:

  • Document and retain the verifier, table-drift, palette, and packaging validation expectations.

README: "The Science" now separates dominant wavelength (576–611 nm, true of
every hex) from spectral content (neutrals still light the blue subpixel,
~23–27 % of their light vs 33 % for white); replaces the rod-impact table
with the CIE 1951 V′(λ) curve; states the real benefits (low text luminance,
no blue defocus, lower melanopic stimulus, comfort) and retracts the
dark-adaptation-protection claim (red-only variants remain on the roadmap).
Marketplace-first ordering, WCAG+APCA side by side, CVD section, bold-weight
wording fixed (theme bold is 700; 450 is editor.fontWeight), fontVariations
in recommended settings, melanopic/Night Shift advice, FAQ rewritten.
Contributor docs move to CONTRIBUTING.md and grow into a verifier contract
and change procedures. package.json description drops the adaptation claim.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Reviewer's Guide

Rewrites and reorders the README to be Marketplace-first and scientifically precise about what the palette actually does, updates all related descriptions and accessibility sections, and moves contributor/build documentation into a new CONTRIBUTING.md while keeping the verifier-owned tables in sync.

Flow diagram for the contributor palette-change and verification pipeline

flowchart TD
  C[Edit palette in themes/_src/variants name.yaml or base.yaml]
  B[npm run build:themes]
  V[npm run verify]
  R[node scripts/verify-palette.mjs --write-readme]
  T[npm test]
  P[npx @vscode/vsce package]
  G[Commit regenerated themes/*.json and README tables]

  C --> B --> V
  V -->|all checks pass| R
  R --> T --> P --> G
Loading

File-Level Changes

Change Details Files
Rewrite README introduction, science section, and overall structure to focus on Marketplace users and accurate vision-science claims, while preserving verifier-owned tables.
  • Replace marketing tagline and philosophy section with a concrete pitch describing dominant wavelength constraints, low-luminance design, and build-verifier guarantees.
  • Add a frontloaded variants table and reorganise sections into a Marketplace-first flow (pitch, variants, science, install, settings, display, palette, terminal, extensions, accessibility, FAQ, contributing).
  • Rewrite "The Science" to distinguish dominant wavelength from spectral content, introduce a rod-sensitivity (CIE 1951 scotopic V′(λ)) table, and explain benefits in terms of luminance, chromatic aberration, and melanopic stimulus, explicitly retracting dark-adaptation protection claims.
  • Add "What it does not do" subsection clarifying that the theme does not preserve dark adaptation and that background hue does not materially affect halation.
  • Clarify lightness spacing (L* ladder) narrative without changing the verifier-owned ladder table.
  • Insert detailed installation instructions (Marketplace, VSIX, source) earlier in the file and add a hero-image placeholder comment tied to the publishing pipeline.
README.md
Update settings, display, and FAQ content to match the new scientific framing and correct font-weight/accessibility guidance.
  • Expand recommended settings to include editor.fontVariations and explain how body (450) vs bold (700) weights interact with the theme.
  • Rewrite display recommendations to focus on brightness ranges, OS-level warm shifts, and their interaction with the palette, framing them in terms of melanopic stimulus rather than dark adaptation.
  • Update FAQ entries (e.g., "Why no blue or cyan?", "Does it protect my night vision?", astigmatism guidance) to align with the corrected science and emphasise comfort, chromatic aberration reduction, and contrast behaviour.
  • Add an explicit colour-vision-safety FAQ entry summarising the CVD checks enforced by the verifier.
README.md
Extend accessibility documentation with APCA details, explicit verifier thresholds, and new colour-vision-deficiency and astigmatism guidance.
  • Augment the contrast section to explain both WCAG ratios and APCA Lc values, including the verifier-enforced floors for different roles.
  • Add a new colour-vision-deficiency subsection describing protan/deutan simulation, required ΔE2000 separations, and how Alone Roman maintains separability without italics.
  • Refine astigmatism guidance, emphasising low text luminance, lack of blue, body vs bold weights, and variant choices (Soft/Roman).
  • Clarify the role of italics as a channel for meaning and how to disable or avoid them via Alone Roman or user overrides.
README.md
Restructure theme-variant, terminal-theme, and language-support documentation to align with the new ordering and to better describe variant roles and coverage.
  • Move and expand the Theme Variants section to explain the mesopic positioning of the main variant and the intent of Soft, Focused, and Roman, including specific palette differences for Roman.
  • Relocate and streamline the Terminal Themes section, clarifying that blue/cyan slots are warm hues, preserving CVD separations, and keeping the ANSI table under verifier control.
  • Update language-support descriptions to highlight semantic-token integration for Python (Pylance) and Rust (rust-analyzer) and add coverage for diffs/logs.
  • Tighten references to samples/ and other supporting assets to match the new layout.
README.md
Move contributor and build documentation out of README into a dedicated CONTRIBUTING.md and treat the verifier as the contract for palette changes.
  • Remove the "Building the Themes (Contributors)" section from README and replace it with a short Contributing section linking to CONTRIBUTING.md while retaining the note about verifier-owned README tables.
  • Add a new CONTRIBUTING.md that documents repository layout, theme generation pipeline, verifier responsibilities and thresholds, palette-change and new-variant workflows, and PR expectations.
  • Document how to run build, verify, check, tests, and README table regeneration, including guidance on when and how to adjust verifier policy in tandem with palette changes.
  • Explain constraints for adding scopes or variants so that all variants remain in structural parity and verifier checks stay green.
README.md
CONTRIBUTING.md
Align package and changelog documentation with the new scientific positioning and contributor guide.
  • Update package.json description to drop dark-adaptation claims and instead emphasise warm, low-luminance, no-blue/cyan design, verified contrast (APCA) and CVD safety, and the four variants.
  • Add a new "Changed — Docs" entry in CHANGELOG.md summarising the README science rewrite, Marketplace-first reordering, accessibility updates, FAQ changes, and addition of CONTRIBUTING.md.
  • Ensure references to future red-only variants (for true dark-adaptation use cases) live under CHANGELOG future plans rather than in current marketing copy.
package.json
CHANGELOG.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • In the Recommended Settings snippet, "editor.minimap.enabled": true under the "Reduce visual noise" section reads like a copy/paste oversight; if the intent is to reduce clutter, consider setting this to false or clarifying why the minimap is enabled there.
  • The README has become quite long and dense, especially around the science and verifier details; consider moving some of the more technical explanations (e.g., exact rod/melanopic ratios, verifier policy details) into a separate docs/ page and linking it, so the Marketplace-facing README stays focused on user-facing behavior and setup.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In the Recommended Settings snippet, `"editor.minimap.enabled": true` under the "Reduce visual noise" section reads like a copy/paste oversight; if the intent is to reduce clutter, consider setting this to `false` or clarifying why the minimap is enabled there.
- The README has become quite long and dense, especially around the science and verifier details; consider moving some of the more technical explanations (e.g., exact rod/melanopic ratios, verifier policy details) into a separate `docs/` page and linking it, so the Marketplace-facing README stays focused on user-facing behavior and setup.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

…ourcery on PR #17)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@crypticpy

Copy link
Copy Markdown
Owner Author

Re Sourcery review:

  • Minimap under "Reduce visual noise": intentional (minimap on, renderCharacters: false → a dim outline of the file, no glyph noise); clarified the comment in b41e858.
  • README length: leaving the science in the README. For this theme the science is the user-facing pitch — it's the reason someone picks it over another warm dark theme — and the honesty rewrite is the point of the PR (the old README made claims the palette can't back). The verifier-policy prose is one paragraph under the ladder and one under the contrast table; the exhaustive version already lives in CONTRIBUTING.md. Will revisit splitting a docs/science.md out once screenshots land and we can judge the Marketplace page as a whole.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a0b0c9432e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread README.md Outdated
The ultimate expression of vision science in a coding theme. Protect your eyes as your sessions extend for hours. Your eyes won't hate you.
<!-- hero: images/hero.png — added with the release pipeline (see docs/PUBLISHING.md) -->

Alone is a warm, low-luminance dark theme for people who code in dark rooms for hours. Every colour in it — syntax, UI chrome, terminal — has a dominant wavelength between 576 and 611 nm: gold, amber, olive, terracotta, dusty rose. There is no blue, no cyan, no purple, and no white text. Foregrounds sit well below the brightness of a typical dark theme, contrast is tuned with APCA rather than maxed out, and a verifier script fails the build if any of that drifts.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Advertise the verified 575 nm lower bound

The shipped Alone Roman string colour #9C8B4A has a dominant wavelength of 575 nm according to the repository's own dominantWavelength implementation, and SCAN_MIN_NM intentionally accepts 575. Thus the claim that every colour is between 576 and 611 nm is already false for one advertised variant; change the lower bound to 575 or adjust the colour and verifier threshold.

Useful? React with 👍 / 👎.

Comment thread README.md Outdated

- **`themes/_src/base.yaml`** — the structural skeleton. Every key the variants share (shape, scopes, font styles, and any hex that happens to be identical across all variants) lives here as a literal. Every leaf that varies across variants is written as `${token.name}`.
- **`themes/_src/variants/<name>.yaml`** — per-variant bindings: `display`, `filename`, a `verify` block (which wavelength band the variant should pass and whether it's the "standard" used for the L\* ladder / README WCAG checks), and a `tokens:` block supplying the hex/alpha values for that variant's `${token.name}` references — plus the two font-style tokens `style.italic` (`italic` or `""`) and `style.semanticItalic` (`true`/`false`) that Alone Roman binds to "off".
Every meaning-carrying colour pair is checked under simulated protanopia and deuteranopia in all four variants (ΔE2000 ≥ 5 or a font-style difference), and the terminal's sixteen ANSI slots stay ≥ ΔE2000 10 apart. Tritanopia is not a concern for a palette with no blue axis.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Limit accessibility claims to the checks actually enforced

For tritanopic users or terminal programs that emit bright ANSI colours, this answer promises guarantees the verifier does not provide: cvdRows computes pass/fail only from protan/deutan results, while the ANSI check slices the palette to the first eight normal slots. The current palette also violates the stated thresholds outside those checks—for example Types/Functions are about ΔE2000 4.5 under the existing tritan simulation, and Blue/BrightBlue are about 6.7—so either enforce tritan and all 16 slots or qualify this safety claim.

Useful? React with 👍 / 👎.

Comment thread CONTRIBUTING.md Outdated
- **APCA floors** — identifiers ≥ 60, syntax ≥ 40, Special/Strings ≥ 37, punctuation ≥ 28, comments ≥ 22 (Alone Soft carries its own floors in its variant file).
- **CVD** — the role pairs in `scripts/lib/theme-roles.mjs` must stay ΔE2000 ≥ 5 apart after protan and deutan simulation, or differ in font style. Alone Roman has no italic cue, so its pairs must pass on colour alone.
- **ANSI** — the eight normal terminal slots pairwise ΔE2000 ≥ 10.
- **Wavelength** — every hex in every variant must have a dominant wavelength inside the variant's declared band (or be a neutral).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Describe the whole-theme wavelength scan accurately

When a contributor adds the planned red-only or red-amber variant, an out-of-band UI colour can still pass despite this contract: bandCheck is applied only to the ten LADDER_ROLES, while the scan over every hex merely requires dominant wavelength ≥575 nm. For example, an amber cursor in a red-only variant is outside that declared band but passes the whole-theme scan, so the guide should state the narrower scope or the verifier should apply the declared band to every chromatic hex.

Useful? React with 👍 / 👎.

…al ANSI slots)

Addresses Codex review on PR #17: Alone Roman's string hex is 575 nm; tritan
is not enforced; the ANSI bound covers slots 0-7; the whole-theme scan is
a >=575 nm floor, not the declared band.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@crypticpy
crypticpy merged commit 890b7df into main Aug 18, 2026
3 checks passed
@crypticpy
crypticpy deleted the docs/readme-2.0 branch August 18, 2026 07:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant