Skip to content

let-fate-decide: improved 12-card spread (100+ bits of entropy)#166

Open
tob-scott-a wants to merge 4 commits into
mainfrom
let-fate-decide-100b-entropy
Open

let-fate-decide: improved 12-card spread (100+ bits of entropy)#166
tob-scott-a wants to merge 4 commits into
mainfrom
let-fate-decide-100b-entropy

Conversation

@tob-scott-a
Copy link
Copy Markdown
Contributor

Summary

Expands let-fate-decide from the previous 4-card draw into a default 12 Houses of the Zodiac Tarot spread.

Each house now receives:

  • 1 Major Arcana card
  • 2 Minor Arcana cards
  • independent reversal state for all 36 cards

The previous 4-card behavior is still available via the explicit legacy path:

uv run --no-config {baseDir}/scripts/draw_cards.py --legacy

Passing a count also keeps legacy behavior:

uv run --no-config {baseDir}/scripts/draw_cards.py 4

Changes

  • Makes the 12-house spread the default draw output.
  • Adds houses/ reference files describing each zodiac house across:
    • building new projects
    • vulnerability discovery
    • correctness verification
    • technical workflow lenses
  • Adds references/TECHNICAL_CONTEXT_LENSES.md for translating readings into audit, evidence, domain, failure-class, and stakeholder lenses.
  • Updates SKILL.md, README, interpretation guide, and draw agent instructions.
  • Preserves old 4-card behavior with --legacy.
  • Tightens security/correctness framing: Tarot may guide discovery and hypothesis generation, but never replaces evidence or acts as decision authority.
  • Improves several card descriptions that previously encouraged overconfident or under-verified action.
  • Normalizes numbered Pentacles rank metadata.
  • Bumps let-fate-decide to 1.2.0.

Entropy

The default spread reports a conservative unordered-card entropy budget of 107.25 bits:

  • Major Arcana selection: log2(C(22,12)) = 19.30
  • Minor Arcana selection: log2(C(56,24)) = 51.95
  • Reversal bits: 36

The actual ordered assignment of cards to houses contains more entropy.

Validation

  • uv run --no-config plugins/let-fate-decide/skills/let-fate-decide/scripts/test_draw_cards.py
  • uv run --with ruff --no-project ruff check plugins/let-fate-decide/skills/let-fate-decide/scripts
  • python3 .github/scripts/validate_codex_skills.py
  • git diff --check -- plugins/let-fate-decide

Also reviewed with Claude for content quality and accidental disclosure of internal workflow details; no blocking findings remained.

(This was authored by Codex.)

@tob-scott-a tob-scott-a requested a review from dguido as a code owner May 15, 2026 17:30
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

- Compute ENTROPY_BITS from math.log2(math.comb(...)) so the dict cannot
  silently drift if the spread shape changes; test now verifies the formula
  and asserts the 100-bit floor.
- Remove the ambiguous draw() wrapper (list-or-dict return); callers use
  explicit draw_zodiac_spread() / draw_cards() instead.
- Extract _build_house_record() helper to bring draw_zodiac_spread() under
  the 50-line guideline.
- Require --legacy explicitly for the positional count CLI; remove the
  implicit legacy flip when a bare integer was passed.
- Generalize the rank-format test to all four minor suits.
- Document test_reviewed_cards_avoid_unsafe_shortcuts as an exact-string
  regression guard rather than a semantic check.
- SKILL.md: reframe example session as an explicit house-level fragment
  and note the draw agent's bullet output format.
- README.md: correct the deck-shuffle description (two independent decks,
  not one 78-card shuffle); compute entropy text from formulas.
- marketplace.json + plugin.json: sync description to mention the 12
  Houses spread and the 100+ bit entropy budget.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@tob-scott-a
Copy link
Copy Markdown
Contributor Author

@claude review

Comment thread plugins/let-fate-decide/skills/let-fate-decide/SKILL.md Outdated
…aces

PR review flagged the SKILL.md frontmatter said "Draws a 12 Houses..." while
plugin.json, marketplace.json, and agents/draw.md all say "Draws the 12
Houses...". SPREAD_NAME is a single fixed spread, so "the" is correct.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR review flagged inconsistent naming in the entropy_bits dict: major_arcana
(deck-named) vs minor_shuffle (operation-named). The value is also
log2(C(56,24)), an unordered selection — not log2(56!), a full shuffle — and
every prose consumer (SKILL.md, README.md, the entropy_note f-string) already
calls it "Minor Arcana selection". Rename for parallel structure.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread plugins/let-fate-decide/agents/draw.md
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