Skip to content

feat(execution-history): color actors by identity - #78

Merged
aryasaatvik merged 1 commit into
devfrom
feat/execution-history-actor-colors
Aug 23, 2026
Merged

feat(execution-history): color actors by identity#78
aryasaatvik merged 1 commit into
devfrom
feat/execution-history-actor-colors

Conversation

@aryasaatvik

Copy link
Copy Markdown
Owner

Summary

Execution history colors actors from a hash of actorId, not actorKind. Machines that all present as service-token (phoenix, agni, blaze, cursor) get distinct, stable hues in the filter rail, runs table, and detail drawer.

Palette

actorTone(run.actorId)

// was actorTone(run.actorKind) → every service token painted violet

FNV-1a of the stable id indexes an 8-slot palette that avoids status (emerald/sky/amber/red) and trigger (violet/cyan/slate). Missing ids stay muted. actorKind remains a drawer suffix, not a hue. Collisions are accepted once cardinality exceeds the palette.

Tests

  • bunx --bun vitest run src/react/status.test.ts in @executor-js/plugin-execution-history (determinism, muted fallback, palette membership)
  • oxlint --deny-warnings on the five owned files
  • Live check on executor.arya.sh needs this commit in the selfhost worktree plus a host deploy — not done here

Hash actorId into a stable palette so machines that share a credential
class stay distinguishable in the filter rail, table, and detail drawer.
@aryasaatvik
aryasaatvik merged commit 3b857e1 into dev Aug 23, 2026
3 of 36 checks passed
@aryasaatvik
aryasaatvik deleted the feat/execution-history-actor-colors branch August 23, 2026 02:18
@greptile-apps

greptile-apps Bot commented Aug 23, 2026

Copy link
Copy Markdown

Greptile Summary

The PR changes execution-history actor coloring from credential-kind-based tones to deterministic identity-based tones.

  • Hashes stable actor IDs into an eight-color palette while retaining a muted fallback for missing IDs.
  • Applies identity colors consistently to the filter rail, run table, and detail drawer.
  • Adds focused tests for fallback behavior, determinism, palette membership, and color distribution.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete correctness, security, build, or repository-rule issues identified.

All execution-history views derive actor colors from the same persisted actorId, missing identities retain the muted presentation, and the new tests follow the package's established test configuration.

Important Files Changed

Filename Overview
packages/plugins/execution-history/src/react/status.ts Introduces deterministic FNV-1a actor-ID hashing, an eight-slot actor palette, and a muted missing-ID fallback.
packages/plugins/execution-history/src/react/status.test.ts Adds package-conventional Effect Vitest coverage for actor-tone determinism, fallback behavior, and palette selection.
packages/plugins/execution-history/src/react/filter-rail.tsx Colors actor facet dots and labels using the facet's stable actorId.
packages/plugins/execution-history/src/react/run-row.tsx Changes run-row actor coloring from actorKind to actorId.
packages/plugins/execution-history/src/react/detail-drawer.tsx Adds an identity-colored actor dot and text treatment while preserving wrapping for long labels.

Reviews (1): Last reviewed commit: "feat(execution-history): color actors by..." | Re-trigger Greptile

aryasaatvik added a commit that referenced this pull request Aug 23, 2026
## Summary

Execution history colors actors from a hash of `actorId`, not
`actorKind`. Machines that all present as `service-token` (phoenix,
agni, blaze, cursor) get distinct, stable hues in the filter rail, runs
table, and detail drawer.

## Palette

```ts
actorTone(run.actorId)

// was actorTone(run.actorKind) → every service token painted violet
```

FNV-1a of the stable id indexes an 8-slot palette that avoids status
(emerald/sky/amber/red) and trigger (violet/cyan/slate). Missing ids
stay muted. `actorKind` remains a drawer suffix, not a hue. Collisions
are accepted once cardinality exceeds the palette.

## Tests

- `bunx --bun vitest run src/react/status.test.ts` in
`@executor-js/plugin-execution-history` (determinism, muted fallback,
palette membership)
- `oxlint --deny-warnings` on the five owned files
- Live check on executor.arya.sh needs this commit in the selfhost
worktree plus a host deploy — not done here
aryasaatvik added a commit that referenced this pull request Aug 27, 2026
## Summary

Execution history colors actors from a hash of `actorId`, not
`actorKind`. Machines that all present as `service-token` (phoenix,
agni, blaze, cursor) get distinct, stable hues in the filter rail, runs
table, and detail drawer.

## Palette

```ts
actorTone(run.actorId)

// was actorTone(run.actorKind) → every service token painted violet
```

FNV-1a of the stable id indexes an 8-slot palette that avoids status
(emerald/sky/amber/red) and trigger (violet/cyan/slate). Missing ids
stay muted. `actorKind` remains a drawer suffix, not a hue. Collisions
are accepted once cardinality exceeds the palette.

## Tests

- `bunx --bun vitest run src/react/status.test.ts` in
`@executor-js/plugin-execution-history` (determinism, muted fallback,
palette membership)
- `oxlint --deny-warnings` on the five owned files
- Live check on executor.arya.sh needs this commit in the selfhost
worktree plus a host deploy — not done here
aryasaatvik added a commit that referenced this pull request Aug 28, 2026
## Summary

Execution history colors actors from a hash of `actorId`, not
`actorKind`. Machines that all present as `service-token` (phoenix,
agni, blaze, cursor) get distinct, stable hues in the filter rail, runs
table, and detail drawer.

## Palette

```ts
actorTone(run.actorId)

// was actorTone(run.actorKind) → every service token painted violet
```

FNV-1a of the stable id indexes an 8-slot palette that avoids status
(emerald/sky/amber/red) and trigger (violet/cyan/slate). Missing ids
stay muted. `actorKind` remains a drawer suffix, not a hue. Collisions
are accepted once cardinality exceeds the palette.

## Tests

- `bunx --bun vitest run src/react/status.test.ts` in
`@executor-js/plugin-execution-history` (determinism, muted fallback,
palette membership)
- `oxlint --deny-warnings` on the five owned files
- Live check on executor.arya.sh needs this commit in the selfhost
worktree plus a host deploy — not done here
aryasaatvik added a commit that referenced this pull request Aug 29, 2026
## Summary

Execution history colors actors from a hash of `actorId`, not
`actorKind`. Machines that all present as `service-token` (phoenix,
agni, blaze, cursor) get distinct, stable hues in the filter rail, runs
table, and detail drawer.

## Palette

```ts
actorTone(run.actorId)

// was actorTone(run.actorKind) → every service token painted violet
```

FNV-1a of the stable id indexes an 8-slot palette that avoids status
(emerald/sky/amber/red) and trigger (violet/cyan/slate). Missing ids
stay muted. `actorKind` remains a drawer suffix, not a hue. Collisions
are accepted once cardinality exceeds the palette.

## Tests

- `bunx --bun vitest run src/react/status.test.ts` in
`@executor-js/plugin-execution-history` (determinism, muted fallback,
palette membership)
- `oxlint --deny-warnings` on the five owned files
- Live check on executor.arya.sh needs this commit in the selfhost
worktree plus a host deploy — not done here
aryasaatvik added a commit that referenced this pull request Aug 29, 2026
## Summary

Execution history colors actors from a hash of `actorId`, not
`actorKind`. Machines that all present as `service-token` (phoenix,
agni, blaze, cursor) get distinct, stable hues in the filter rail, runs
table, and detail drawer.

## Palette

```ts
actorTone(run.actorId)

// was actorTone(run.actorKind) → every service token painted violet
```

FNV-1a of the stable id indexes an 8-slot palette that avoids status
(emerald/sky/amber/red) and trigger (violet/cyan/slate). Missing ids
stay muted. `actorKind` remains a drawer suffix, not a hue. Collisions
are accepted once cardinality exceeds the palette.

## Tests

- `bunx --bun vitest run src/react/status.test.ts` in
`@executor-js/plugin-execution-history` (determinism, muted fallback,
palette membership)
- `oxlint --deny-warnings` on the five owned files
- Live check on executor.arya.sh needs this commit in the selfhost
worktree plus a host deploy — not done here
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