feat(aterm): take the glare off the creature so faint text reads #1421

Merged
coilyco-ops merged 1 commit from aos/claude/zc49-creature-glare into main 2026-08-29 20:48:48 +00:00
Owner

Kai asked for a text shadow or outline. kitty has neither, and its one
contrast helper is blind to a background image, so the plate is where the
legibility has to come from.

Why not the option that looks like the answer

text_fg_override_threshold is built for exactly this complaint, and it
does not work here: override_foreground_color in kitty's own cell shader
takes under from compute_background, the cell's background color,
rather than the composited pixels. Over a creature it computes the same
contrast it would over an empty window, so it fires identically whether
the art is there or not. Read rather than assumed, and recorded so the
next agent does not go looking.

What was actually wrong

Measured, not guessed. Bright text was never in trouble: 15.80:1 over the
empty window, 8.41:1 over the creature's worst pixel. The faint card rows
were, dropping 6.54:1 to 3.48:1, under the 4.5:1 line, and every role sat
in the same 3.35 to 3.54 band, so one setting covers the roster.

The glare is in the bright fills, and the dark linework is what makes a
creature read at a glance. So a pixel past creatureGlareKnee gives up to
creatureGlareDepth of its alpha on a smoothstep, the outlines keep all
of theirs, and only alpha moves rather than any color the roster owns.

Frontend now measures 4.77:1 worst case from the shipped code path, which
matched the prototype exactly. All seven clear 4.5:1. Five roles hold
their median luminance to four decimal places, so the creature is as
present as it was; science drops 0.0466 to 0.0332 because Evie is a glass
vessel and mostly highlight, which leaves her still the brightest of the
seven rather than dimmed below them.

The doc split, which the cap forced and the content wanted

The paragraph put docs/aterm.md at 8002 against the 8000 cap, the wall
#1341 recorded. docs/*.md was at 38 of 40, so a slot was free and the
creature is its own subsystem across three paragraphs. It moves to
docs/aterm-creature.md behind a pointer, mirroring the aterm-bundles
split. aterm.md drops to 5455, so the next aterm surprise has somewhere to
land rather than compressing Kai's prose again.

Verification

  • go test ./... green, with new coverage that the linework keeps its
    alpha, white loses the full depth, the fade is monotonic across all 256
    levels so a gradient cannot band, and only alpha moves.
  • just aterm-contract green against the live roster.
  • pre-commit run --all-files green, all caps respected.
  • Re-measured from the plate the real binary wrote, not the prototype.
  • Rendered every role at 0.80 tint before and after; Evie checked visually
    since she moves most.

Co-authored-by: Kai Siren coilysiren@gmail.com
Co-authored-by: Claude noreply@anthropic.com
Agent-Role: frontend

Kai asked for a text shadow or outline. kitty has neither, and its one contrast helper is blind to a background image, so the plate is where the legibility has to come from. ## Why not the option that looks like the answer `text_fg_override_threshold` is built for exactly this complaint, and it does not work here: `override_foreground_color` in kitty's own cell shader takes `under` from `compute_background`, the cell's background color, rather than the composited pixels. Over a creature it computes the same contrast it would over an empty window, so it fires identically whether the art is there or not. Read rather than assumed, and recorded so the next agent does not go looking. ## What was actually wrong Measured, not guessed. Bright text was never in trouble: 15.80:1 over the empty window, 8.41:1 over the creature's worst pixel. The faint card rows were, dropping 6.54:1 to 3.48:1, under the 4.5:1 line, and every role sat in the same 3.35 to 3.54 band, so one setting covers the roster. The glare is in the bright fills, and the dark linework is what makes a creature read at a glance. So a pixel past `creatureGlareKnee` gives up to `creatureGlareDepth` of its alpha on a smoothstep, the outlines keep all of theirs, and only alpha moves rather than any color the roster owns. Frontend now measures 4.77:1 worst case from the shipped code path, which matched the prototype exactly. All seven clear 4.5:1. Five roles hold their median luminance to four decimal places, so the creature is as present as it was; science drops 0.0466 to 0.0332 because Evie is a glass vessel and mostly highlight, which leaves her still the brightest of the seven rather than dimmed below them. ## The doc split, which the cap forced and the content wanted The paragraph put `docs/aterm.md` at 8002 against the 8000 cap, the wall #1341 recorded. `docs/*.md` was at 38 of 40, so a slot was free and the creature is its own subsystem across three paragraphs. It moves to `docs/aterm-creature.md` behind a pointer, mirroring the aterm-bundles split. aterm.md drops to 5455, so the next aterm surprise has somewhere to land rather than compressing Kai's prose again. ## Verification - `go test ./...` green, with new coverage that the linework keeps its alpha, white loses the full depth, the fade is monotonic across all 256 levels so a gradient cannot band, and only alpha moves. - `just aterm-contract` green against the live roster. - `pre-commit run --all-files` green, all caps respected. - Re-measured from the plate the real binary wrote, not the prototype. - Rendered every role at 0.80 tint before and after; Evie checked visually since she moves most. Co-authored-by: Kai Siren <coilysiren@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Agent-Role: frontend
feat(aterm): take the glare off the creature so faint text reads
All checks were successful
ci / aos-cli-tests (pull_request) Successful in 33s
ci / gate (pull_request) Successful in 55s
0eed90f891
Kai asked for a text shadow or outline. kitty has neither, and its one
contrast helper is blind to a background image, so the plate is where the
legibility has to come from.

## Why not the option that looks like the answer

`text_fg_override_threshold` is built for exactly this complaint, and it
does not work here: `override_foreground_color` in kitty's own cell shader
takes `under` from `compute_background`, the cell's background color,
rather than the composited pixels. Over a creature it computes the same
contrast it would over an empty window, so it fires identically whether
the art is there or not. Read rather than assumed, and recorded so the
next agent does not go looking.

## What was actually wrong

Measured, not guessed. Bright text was never in trouble: 15.80:1 over the
empty window, 8.41:1 over the creature's worst pixel. The faint card rows
were, dropping 6.54:1 to 3.48:1, under the 4.5:1 line, and every role sat
in the same 3.35 to 3.54 band, so one setting covers the roster.

The glare is in the bright fills, and the dark linework is what makes a
creature read at a glance. So a pixel past `creatureGlareKnee` gives up to
`creatureGlareDepth` of its alpha on a smoothstep, the outlines keep all
of theirs, and only alpha moves rather than any color the roster owns.

Frontend now measures 4.77:1 worst case from the shipped code path, which
matched the prototype exactly. All seven clear 4.5:1. Five roles hold
their median luminance to four decimal places, so the creature is as
present as it was; science drops 0.0466 to 0.0332 because Evie is a glass
vessel and mostly highlight, which leaves her still the brightest of the
seven rather than dimmed below them.

## The doc split, which the cap forced and the content wanted

The paragraph put `docs/aterm.md` at 8002 against the 8000 cap, the wall
#1341 recorded. `docs/*.md` was at 38 of 40, so a slot was free and the
creature is its own subsystem across three paragraphs. It moves to
`docs/aterm-creature.md` behind a pointer, mirroring the aterm-bundles
split. aterm.md drops to 5455, so the next aterm surprise has somewhere to
land rather than compressing Kai's prose again.

## Verification

- `go test ./...` green, with new coverage that the linework keeps its
  alpha, white loses the full depth, the fade is monotonic across all 256
  levels so a gradient cannot band, and only alpha moves.
- `just aterm-contract` green against the live roster.
- `pre-commit run --all-files` green, all caps respected.
- Re-measured from the plate the real binary wrote, not the prototype.
- Rendered every role at 0.80 tint before and after; Evie checked visually
  since she moves most.

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: frontend
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os!1421
No description provided.