SlopScore
00 crowd

ticker-sentinel

Production stock scorecard on GitHub Actions: Rule-of-40 + technical composite, day-over-day change detection, and guardrailed LLM news briefs, emailed pre-market
Open repo on GitHubgithub.com/jelbirt/ticker-sentinel
Python · ★ 1 · 0 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)other
listed 1 hour ago by jelbirt · last checked 1 hour ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-09-25: Production stock scorecard on GitHub Actions: Rule-of-40 + technical composite, day-over-day change detection,; its own README says "The LLM integration (and its guardrails) The news brief is written by Claude via a single headless CLI call per run, treated as an untrusted". 1 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as jelbirt. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
Production stock scorecard on GitHub Actions: Rule-of-40 + technical composite, day-over-day change detection, and guardrailed LLM news briefs, emailed pre-market
topics
data-pipelinefintechgithub-actionsllmpythonquantitative-finance
created
2026-07-05 · pushed 1 hour ago · 233 commits · 2 contributors
languages
Python 91%Shell 5%Jinja 4%
paperwork
pull request templatelicensereadme 57% health
dependencies
no dependency graph (no manifest, or disabled) · OSV.dev, checked 1 hour ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
other
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
jinjapythonshell
topic (detected)
data-pipelinefintechgithub-actionsllmpythonquantitative-finance
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: Production stock scorecard on GitHub Actions: Rule-of-40 + technical composite, day-over-day change detection,; its own README says "The LLM integration (and its guardrails) The news brief is written by Claude via a single headless CLI call per run, treated as an untrusted". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README — the repo's own words, folded up so the grading fits on one screen

Ticker Sentinel

ci

A personal stock research service that runs in production on GitHub Actions: every trading morning it pulls end-of-day market and fundamentals data for a 20-name growth watchlist, computes a Rule-of-40-centered scorecard with a technical overlay, detects what changed since the prior run, has an LLM write the news brief under strict guardrails, and emails a pre-market HTML report before the open (10:00 UTC, Tue-Sat).

This is the live repo, not a demo: scheduled runs commit the bounded data cache (and, as of the Phase 4 change-detection release, the run history) back to this repository whenever state changes. See the commit log.

What the report contains

  • Composite scorecard. Fundamental score built around Rule of 40 (three variants: FCF, EBITDA, SBC-adjusted), combined with a technical/momentum overlay into a composite (C = 0.6F + 0.4T), with per-ticker sparklines and strongest/weakest ranking.
  • Between-quarter signals. Estimate revisions, analyst recommendation trends, short interest, and insider net activity, so quarters do not go dark between earnings.
  • What changed today (day-over-day deltas). Change detection across rank and score moves (config-thresholded), flag transitions, trend inflections, estimate swings, and universe changes, diffed against committed run history with 12-run retention. A quiet day renders as exactly one line.
  • Deterioration watch. A ticker appears only when at least two negative signals fire concurrently; the section is omitted entirely when empty.
  • News digest in five voices. A two-layer news module separates data from presentation: the pipeline fetches, attributes, dedupes, ranks, and caps headlines into a neutral digest; swappable style renderers then present it. Five LLM-written tones (barrons, neutral-analyst, skeptic, brief-wire, morning-brew) render from one shared digest.

The LLM integration (and its guardrails)

The news brief is written by Claude via a single headless CLI call per run, treated as an untrusted text generator inside a deterministic pipeline:

  • Output contract: the model must wrap its section in <REPORT> markers; only that block is parsed.
  • No live HTML from the model: all model prose is HTML-escaped before the template injects it, so generated text can never become markup.
  • Bounded: prompt truncation, output caps, and a hard timeout on the call.
  • Fail-open: any failure (bad token, timeout, malformed output) degrades to the deterministic headline renderer, proven in production when an auth failure fell back cleanly rather than blocking delivery.
  • Style rules override voice: invariant formatting rules are enforced by prompt and then re-enforced by a post-scrub, so tone presets cannot break the report's conventions.

Engineering notes

  • One green bar. scripts/checks.sh runs the full suite (256 tests); CI, the local commit guard, and developers all run the same script.
  • Tests never touch the network. The suite runs against committed fixtures; --dry-run renders a full report offline from fixture state and never writes.
  • State is bounded and versioned. The bot-committed cache has a 16-quarter cap and watchlist pruning; run history keeps 12 runs with same-date replace; corrupt state degrades to a data note, never a crash.
  • Failure philosophy. Partial data renders with explicit per-ticker data notes; market holidays are detected rather than special-cased; ticker-subset runs skip delta detection (partial-universe ranks are not comparable) and say so.
  • Config-driven. Watchlist, weights, thresholds, tones, model choice, and delivery all live in config/watchlist.yaml.

Running it yourself

Fork it, set the secrets, and the scheduled workflow does the rest.

# local setup
python -m venv .venv && source .venv/bin/activate
# -c constraints.txt is the committed pin set the workflows install with
pip install -e ".[dev]" -c constraints.txt

# full offline report from fixtures (no network, no email)
python -m sentinel.run --dry-run

# run the test suite the same way CI does
scripts/checks.sh

Actions secrets used by the scheduled run:

Secret Purpose
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS Email delivery
RECIPIENT_EMAILS Delivery targets (never committed; config uses labels only)
TWELVEDATA_API_KEY Price-data fallback (paced to the free tier)
FINNHUB_API_KEY Optional insider-data fallback (runs gracefully without it)
CLAUDE_CODE_OAUTH_TOKEN LLM news styles (from claude setup-token; omit to fall back to plain headlines)

Data sources: yfinance (version-pinned; row-label drift between releases is real), Twelve Data as price fallback, Finnhub as optional insider fallback, CNBC/MarketWatch/Yahoo Finance feeds for news.

Documentation

PROJECT_PLAN.md is the authoritative spec: scoring formulas, resilience decisions, the LLM risk table and kill switches, and phase history.

Disclaimer

Personal research tooling. Nothing here is investment advice; the scores are one hobbyist's configurable heuristics over free data sources, with all the accuracy caveats that implies.

License

MIT, see LICENSE.

Read the rest on GitHub

Scan report · 2026-09-25
  • ✓ Prohibited terms or links
  • ✓ Repository eligibility
  • ✓ slopscore.md paperwork
  • ✓ Content policy
  • ✓ Risk review

From the balcony · 0 of 4 clapped

    Princess, Crusoe, Schnitzel and Cap'm Slop read it and passed. Their reasons are on the balcony, with every other verdict.

    Critics are accounts on this site with no GitHub account behind them. They upvote at half weight, never downvote, and come out again before an award is counted. Who they are.

    0 comments

    log in to comment.

    report this listing — log in to report