theunpartybuilder — Classification Analysis

2026-07-31 00:29 UTC · 44 repositories · 44 with local commit data

---

TL;DR

8/44 repos (18.2%) classified as library — the dominant outcome by a wide margin

The library score starts ahead of every other type for 0/44 repos due to a structural +0.2 bonus applied whenever a primary language is detected — regardless of what the repo actually does

12 of 26 rules never fired across any repo: tool.bin_files, tool.topics, app.topics, assistant.topics, agent.files, bot.topics, framework.topics, service.files, lang.mobile, lang.web, stars.library, stars.framework

Commit hygiene range: theunpartyrunway leads with a standards score of 0.96; theunpartyporter trails at 0.04

assistant is the tightest cluster in commit-space (cohesion 1.00); tool is the most scattered (0.35)

---

§ 1 — Portfolio Snapshot

TypeEmojiCountShareAvg ConfidenceConfidence Range
framework🏗️1534.1%41.1%24.1% – 62.7%
app📱818.2%37.1%20.3% – 100.0%
library📦818.2%35.5%25.0% – 49.3%
agent⚙️49.1%29.1%23.6% – 31.8%
service🌐36.8%27.9%21.0% – 36.8%
tool🔧36.8%29.2%26.3% – 34.7%
bot🎮24.5%26.8%22.0% – 31.7%
assistant🤖12.3%30.0%30.0% – 30.0%

Overall average confidence: 35.7% — low, reflecting the fallback classifier's soft normalization rather than a trained probability model.

Confidence distribution across portfolio:

code
0–25%  ███░░░░░░░░░░░░░░░░░ 6 repos
  25–50%  ███████████████░░░░░ 34 repos
  50–75%  █░░░░░░░░░░░░░░░░░░░ 3 repos
  75–100%  ░░░░░░░░░░░░░░░░░░░░ 1 repos

---

§ 2 — Rule Audit: Assumption vs Reality

The classifier has 26 rules across 8 types. Each rule adds a fixed score when a condition is met; final type is whichever has the highest normalized sum. Below: how often each rule fired, and whether it pushed the repo toward its intended type.

RuleTargetWeightFiredCoveragePrecisionNotes
app.keywordsapp+0.33579.5%17.1%❌ low precision — fires for wrong types
framework.keywordsframework+0.42863.6%53.6%
assistant.keywordsassistant+0.52659.1%3.8%❌ low precision — fires for wrong types
library.keywordslibrary+0.32250.0%31.8%❌ low precision — fires for wrong types
library.fileslibrary+0.22045.5%30.0%❌ low precision — fires for wrong types
service.keywordsservice+0.41943.2%10.5%❌ low precision — fires for wrong types
agent.keywordsagent+0.41022.7%20.0%❌ low precision — fires for wrong types
lang.swiftapp+0.451022.7%10.0%❌ low precision — fires for wrong types
tool.keywordstool+0.4920.5%11.1%❌ low precision — fires for wrong types
tests.librarylibrary+0.15920.5%11.1%❌ low precision — fires for wrong types
tests.frameworkframework+0.1920.5%22.2%❌ low precision — fires for wrong types
app.filesapp+0.3715.9%28.6%❌ low precision — fires for wrong types
bot.keywordsbot+0.524.5%50.0%
lang.infraservice+0.212.3%0.0%
tool.bin_filestool+0.300.0%0.0%💀 dead rule — never fired
tool.topicstool+0.200.0%0.0%💀 dead rule — never fired
app.topicsapp+0.200.0%0.0%💀 dead rule — never fired
assistant.topicsassistant+0.300.0%0.0%💀 dead rule — never fired
agent.filesagent+0.300.0%0.0%💀 dead rule — never fired
bot.topicsbot+0.300.0%0.0%💀 dead rule — never fired
framework.topicsframework+0.300.0%0.0%💀 dead rule — never fired
service.filesservice+0.300.0%0.0%💀 dead rule — never fired
lang.mobileapp+0.300.0%0.0%💀 dead rule — never fired
lang.webapp+0.200.0%0.0%💀 dead rule — never fired
stars.librarylibrary+0.200.0%0.0%💀 dead rule — never fired
stars.frameworkframework+0.200.0%0.0%💀 dead rule — never fired

The Library Bias, Quantified

code
Rule 'library.language' fires for 0/44 repos (0.0%)
  It adds +0.2 to library unconditionally.
  No other type gets a free structural boost of equivalent size.

  Score headstart library holds before any keyword matching:
  library  → 0.20  (free)
  all other types → 0.00

  For a repo with no keywords matching anything, normalizing 8 types
  where only library has 0.2: library wins at 100% confidence.
  This is why 18.2% of the portfolio became 'library'.

Rules Ranked by Precision (≥2 fires)

RuleTargetFiredPrecisionBreakdown when fired
framework.keywordsframework2853.6%framework:15, app:5, agent:3, bot:2, library:2, service:1
bot.keywordsbot250.0%library:1, bot:1
library.keywordslibrary2231.8%framework:7, library:7, app:5, service:2, bot:1
library.fileslibrary2030.0%library:6, framework:6, app:5, service:2, bot:1
app.filesapp728.6%agent:2, app:2, library:2, assistant:1
tests.frameworkframework922.2%agent:3, framework:2, bot:1, app:1, library:1, assistant:1
agent.keywordsagent1020.0%framework:4, agent:2, bot:1, service:1, library:1, assistant:1
app.keywordsapp3517.1%framework:15, app:6, library:5, agent:4, service:2, tool:1, bot:1, assistant:1
tool.keywordstool911.1%framework:3, library:2, app:1, agent:1, tool:1, assistant:1
tests.librarylibrary911.1%agent:3, framework:2, bot:1, app:1, library:1, assistant:1
service.keywordsservice1910.5%framework:5, library:4, app:3, bot:2, agent:2, service:2, assistant:1
lang.swiftapp1010.0%framework:6, agent:1, app:1, library:1, tool:1
assistant.keywordsassistant263.8%app:6, framework:6, agent:4, library:4, bot:2, service:2, tool:1, assistant:1

---

§ 3 — Commit DNA by Type

Commit patterns extracted from 44 repos with accessible local git history. Each row is the average across all repos of that type.

TypeReposCommits/moConv.%Avg msg lenDetailed%Dominant typeActive 30d
🏗️ framework1513.133.3%42 chars41.5%other2/15
📱 app842.537.5%39 chars35.0%other1/8
📦 library812.90.0%32 chars19.3%other0/8
⚙️ agent430.325.0%52 chars54.6%feat0/4
🌐 service36.80.0%28 chars14.3%other0/3
🔧 tool310.733.3%24 chars12.7%other0/3
🎮 bot211.90.0%55 chars60.5%feat0/2
🤖 assistant154.4100.0%63 chars70.8%feat0/1

Keyword Signal Presence by Type

Fraction of repos in each type where a given commit keyword appeared at measurable frequency (>1%):

Typecliapiuibotagenttest
framework6.7%26.7%66.7%6.7%0.0%53.3%
app12.5%25.0%62.5%0.0%0.0%25.0%
library25.0%12.5%37.5%0.0%0.0%25.0%
agent25.0%100.0%100.0%0.0%25.0%100.0%
service0.0%33.3%66.7%0.0%0.0%66.7%
tool0.0%0.0%33.3%0.0%0.0%0.0%
bot0.0%100.0%50.0%0.0%0.0%50.0%
assistant100.0%100.0%100.0%0.0%0.0%100.0%

---

§ 4 — Standards Compliance Leaderboard

Score 0–1 composed of: conventional commit adoption (30%), message length (20%), detailed message ratio (15%), presence of feat commits (12%), fix commits (12%), docs commits (11%).

Top 10

RankRepoTypeScoreConvAvg lenDetailedfeatfixdocs
1theunpartyrunwayagent0.966370.8%21.2%9.4%2.4%
2runwayassistant0.966370.8%21.2%9.4%2.4%
3theunpartybuilderapp0.805160.4%17.0%23.6%1.9%
4theunpartyappframework0.805549.4%13.0%5.4%0.0%
5theunpartybetaapp0.736371.4%50.8%1.6%0.0%
6theunpartycoreframework0.664952.4%7.1%0.0%0.0%
7theunpartygrowframework0.644741.9%9.7%0.0%0.0%
8theunpartysnakeapp0.595375.0%0.0%0.0%0.0%
9theunpartybrandframework0.565553.6%0.0%0.0%0.0%
10theunpartyapibot0.535861.1%7.1%7.1%0.6%

Bottom 10

RankRepoTypeScoreConvAvg lenDetailedCommits
1theunpartyportertool0.04120.0%1
2theunpartyteamlibrary0.05140.0%2
3theunpartyhtmlapp0.05140.0%1
4theunpartysearchservice0.05150.0%2
5theunpartyselectorlibrary0.07203.4%29
6theunpartydocsapp0.08222.6%500
7theunpartyspacelibrary0.08216.9%29
8theunpartydashboardapp0.08250.0%11
9theunpartychattylibrary0.08251.5%66
10theunpartyprojectframework0.10249.6%52

Standards Score by Type (average)

code
framework     ██████░░░░░░░░░░  0.37  (n=15)
  app           █████░░░░░░░░░░░  0.34  (n=8)
  library       ██░░░░░░░░░░░░░░  0.14  (n=8)
  agent         ████████░░░░░░░░  0.50  (n=4)
  service       ██░░░░░░░░░░░░░░  0.15  (n=3)
  tool          ███░░░░░░░░░░░░░  0.20  (n=3)
  bot           ██████░░░░░░░░░░  0.40  (n=2)
  assistant     ███████████████░  0.96  (n=1)

---

§ 4b — Monthly Standards (Trailing 30 Days vs 90-Day Baseline)

Score 0–1: CC trend 35%, velocity vs baseline 40%, cadence steadiness 25%. Repos with no commits in the last 30 days score 0 on velocity and are listed separately.

RepoTypeMonthly ScoreCC % this moCC trendVelocityPeak/avg dayCommits (30d)
theunpartybrandframework0.94100.0%↑ 64.3%2.25×1.0×3
theunpartycharetteframework0.91100.0%↑ 50.5%2.33×1.0×14
theunpartyunseenagent0.69100.0%↑ 83.1%0.60×1.0×2
theunpartyhtmlapp0.620.0%→ 0.0%1.00×1.0×0
theunpartychatapp0.620.0%→ 0.0%1.00×1.0×0
theunpartyterminalservice0.620.0%→ 0.0%1.00×1.0×0
theunpartychattylibrary0.620.0%→ 0.0%1.00×1.0×0
theunpartyprojectframework0.620.0%→ 0.0%1.00×1.0×0
theunpartyportertool0.620.0%→ 0.0%1.00×1.0×0
theunpartymoodlibrary0.620.0%→ 0.0%1.00×1.0×0
theunpartyloggerframework0.620.0%→ 0.0%1.00×1.0×0
theunpartydashboardapp0.620.0%→ 0.0%1.00×1.0×0
theunpartycolorsframework0.620.0%→ 0.0%1.00×1.0×0
theunpartybqlibrary0.620.0%→ 0.0%1.00×1.0×0
theunpartybotbot0.620.0%→ 0.0%1.00×1.0×0
theunpartyselectorlibrary0.620.0%→ 0.0%1.00×1.0×0
theunpartysearchservice0.620.0%→ 0.0%1.00×1.0×0
theunpartyswatchframework0.620.0%→ 0.0%1.00×1.0×0
theunpartyteamlibrary0.620.0%→ 0.0%1.00×1.0×0
theunpartythemelibrary0.620.0%→ 0.0%1.00×1.0×0
theunpartyusertool0.620.0%→ 0.0%1.00×1.0×0
theunpartyspacelibrary0.620.0%→ 3.4%1.00×1.0×0
theunpartystarterframework0.610.0%↓ 6.4%1.00×1.0×0
theunpartyappframework0.6199.5%→ 3.9%1.27×3.6×211
theunpartyclockframework0.610.0%↓ 8.0%1.00×1.0×0
theunpartyunpppagent0.61100.0%↑ 90.8%0.12×1.0×1
theunpartyinviteframework0.610.0%↓ 11.1%1.00×1.0×0
theunpartycrawleragent0.5975.0%↑ 48.4%0.41×1.0×4
theunpartyfoundationframework0.590.0%↓ 20.0%1.00×1.0×0
theunpartydeveloperframework0.590.0%↓ 21.4%1.00×1.0×0
theunpartyiosframework0.580.0%↓ 25.0%1.00×1.0×0
theunpartydocsapp0.562.2%→ 1.4%0.80×1.9×89
theunpartygrowframework0.540.0%↓ 48.4%1.00×1.0×0
theunpartyrunwayagent0.4560.0%↓ 6.8%0.27×1.6×5
runwayassistant0.4560.0%↓ 6.8%0.27×1.6×5
theunpartylandinglibrary0.420.0%→ 0.0%0.00×1.0×0
theunpartycloudapp0.400.0%↓ 12.1%0.00×1.0×0
theunpartyapibot0.380.0%↓ 25.6%0.00×1.0×0
theunpartysomewhereservice0.380.0%↓ 25.7%0.00×1.0×0
theunpartycoreframework0.370.0%↓ 33.3%0.00×1.0×0
theunpartybudgettool0.360.0%↓ 35.7%0.00×1.0×0
theunpartysnakeapp0.340.0%↓ 50.0%0.00×1.0×0
theunpartybuilderapp0.290.0%↓ 77.4%0.00×1.0×0
theunpartybetaapp0.290.0%↓ 79.4%0.00×1.0×0

CC Trend Leaders (improving conventional commit adoption this month)

theunpartyunppp: overall 9.2% → this month 100.0% (+90.8%)

theunpartyunseen: overall 16.9% → this month 100.0% (+83.1%)

theunpartybrand: overall 35.7% → this month 100.0% (+64.3%)

theunpartycharette: overall 49.5% → this month 100.0% (+50.5%)

theunpartycrawler: overall 26.6% → this month 75.0% (+48.4%)

CC Trend Laggards (slipping this month)

theunpartybeta: overall 79.4% → this month 0.0% (-79.4%)

theunpartybuilder: overall 77.4% → this month 0.0% (-77.4%)

theunpartysnake: overall 50.0% → this month 0.0% (-50.0%)

theunpartygrow: overall 48.4% → this month 0.0% (-48.4%)

theunpartybudget: overall 35.7% → this month 0.0% (-35.7%)

---

§ 5 — Cluster Cohesion

Average pairwise cosine similarity of commit-feature vectors within each type cluster. 1.0 = all repos in the type look identical in commit-space. 0.0 = completely uncorrelated.

code
assistant     ████████████████████  1.000  (n=1)
  agent         ██████████████████░░  0.901  (n=4)
  library       ████████████████░░░░  0.817  (n=8)
  framework     ██████████████░░░░░░  0.698  (n=15)
  service       █████████████░░░░░░░  0.670  (n=3)
  bot           ████████████░░░░░░░░  0.600  (n=2)
  app           ██████████░░░░░░░░░░  0.476  (n=8)
  tool          ███████░░░░░░░░░░░░░  0.349  (n=3)

Tight clusters (≥0.70): agent, library, assistant — repos in these types genuinely resemble each other in how they're developed. Loose clusters (<0.50): app, tool — these labels are not describing a coherent behavioral category; they're a catch-all.

---

§ 6 — Low-Confidence Classifications (< 35%)

These repos produced a predicted type, but competing types were close behind. They are most likely to flip under a re-calibrated classifier.

RepoTypeConfidenceRules that fired
theunpartydocsapp20.3%app.keywords, assistant.keywords, library.keywords, library.files, framework.keywords, service.keywords
theunpartysearchservice21.0%(none)
theunpartyapibot22.0%assistant.keywords, agent.keywords, framework.keywords, service.keywords, tests.library, tests.framework
theunpartycrawleragent23.6%app.keywords, app.files, assistant.keywords, agent.keywords, framework.keywords, tests.library, tests.framework
theunpartyappframework24.1%tool.keywords, app.keywords, agent.keywords, framework.keywords
theunpartysnakeapp24.3%app.files
theunpartyteamlibrary25.0%lang.swift
theunpartyterminalservice25.9%app.keywords, assistant.keywords, agent.keywords, library.keywords, library.files, service.keywords
theunpartybrandframework26.0%tool.keywords, app.keywords, framework.keywords, lang.infra, tests.library, tests.framework
theunpartyselectorlibrary26.0%app.files, library.keywords, tests.library, tests.framework
theunpartychatapp26.3%app.keywords, assistant.keywords, library.keywords, library.files, framework.keywords
theunpartyusertool26.3%lang.swift
theunpartybudgettool26.7%app.keywords
theunpartybetaapp26.7%app.keywords, assistant.keywords, framework.keywords, service.keywords, lang.swift
theunpartymoodlibrary28.3%app.keywords, assistant.keywords, library.keywords, library.files, service.keywords
theunpartydashboardapp28.3%app.keywords, assistant.keywords, library.keywords, library.files
runwayassistant30.0%tool.keywords, app.keywords, app.files, assistant.keywords, agent.keywords, service.keywords, tests.library, tests.framework
theunpartyunpppagent30.4%app.keywords, assistant.keywords, framework.keywords, tests.library, tests.framework
theunpartybuilderapp30.6%tool.keywords, app.keywords, assistant.keywords, library.keywords, library.files, framework.keywords, service.keywords, tests.library, tests.framework
theunpartycoreframework30.6%app.keywords, library.keywords, framework.keywords
theunpartyunseenagent30.6%app.keywords, assistant.keywords, framework.keywords, service.keywords, lang.swift
theunpartygrowframework31.0%tool.keywords, app.keywords, agent.keywords, framework.keywords, service.keywords, lang.swift
theunpartybotbot31.7%app.keywords, assistant.keywords, bot.keywords, library.keywords, library.files, framework.keywords, service.keywords
theunpartyrunwayagent31.8%tool.keywords, app.keywords, app.files, assistant.keywords, agent.keywords, service.keywords, tests.library, tests.framework
theunpartychattylibrary33.3%app.keywords, assistant.keywords, agent.keywords, bot.keywords, library.keywords, library.files, framework.keywords
theunpartyportertool34.7%tool.keywords, assistant.keywords

---

§ 7 — Full Repo Register

RepoTypeConfStandardsConvCommits/moVelocity
theunpartyrunwayagent31.8%0.9654.4decreasing
theunpartyunseenagent30.6%0.3115.3decreasing
theunpartyunpppagent30.4%0.2433.4decreasing
theunpartycrawleragent23.6%0.5018.2decreasing
theunpartyhtmlapp100.0%0.0530.0stable
theunpartycloudapp40.0%0.241.4stable
theunpartybuilderapp30.6%0.809.2increasing
theunpartydashboardapp28.3%0.08165.0increasing
theunpartybetaapp26.7%0.733.2increasing
theunpartychatapp26.3%0.161.1stable
theunpartysnakeapp24.3%0.590.7stable
theunpartydocsapp20.3%0.08129.3stable
runwayassistant30.0%0.9654.4decreasing
theunpartybotbot31.7%0.271.2increasing
theunpartyapibot22.0%0.5322.6stable
theunpartystarterframework62.7%0.165.2decreasing
theunpartycolorsframework62.0%0.141.2decreasing
theunpartyfoundationframework52.3%0.300.3stable
theunpartyprojectframework48.0%0.102.8decreasing
theunpartyswatchframework45.3%0.250.5stable
theunpartyinviteframework43.7%0.390.6stable
theunpartyiosframework43.0%0.290.3stable
theunpartydeveloperframework38.3%0.280.7increasing
theunpartyloggerframework38.0%0.201.0increasing
theunpartyclockframework36.0%0.182.7decreasing
theunpartycharetteframework36.0%0.524.9increasing
theunpartygrowframework31.0%0.641.7increasing
theunpartycoreframework30.6%0.663.8decreasing
theunpartybrandframework26.0%0.562.5decreasing
theunpartyappframework24.1%0.80168.5increasing
theunpartythemelibrary49.3%0.2190.0stable
theunpartylandinglibrary45.0%0.181.8decreasing
theunpartybqlibrary38.3%0.152.5stable
theunpartyspacelibrary38.3%0.082.4decreasing
theunpartychattylibrary33.3%0.084.8decreasing
theunpartymoodlibrary28.3%0.260.1stable
theunpartyselectorlibrary26.0%0.071.7decreasing
theunpartyteamlibrary25.0%0.050.2stable
theunpartysomewhereservice36.8%0.306.0decreasing
theunpartyterminalservice25.9%0.1013.3decreasing
theunpartysearchservice21.0%0.051.1stable
theunpartyportertool34.7%0.0430.0stable
theunpartybudgettool26.7%0.431.3decreasing
theunpartyusertool26.3%0.120.9stable

---

§ 8 — Data-Driven Recommendations

Derived exclusively from the metrics above — no subjective judgement applied.

Classifier Fixes (Rule Layer)

1. Remove library.language or gate it by language type. It fires for 100% of repos and gives library an unconditional 0.2 head-start. Replace it with language-specific signals:

Python → library +0.15 (packages are the primary Python artifact)

Swift/Kotlin → app +0.2 (already exists as lang.mobile)

Go/Rust → tool or service +0.1

TypeScript/JavaScript → app +0.1 or library +0.1 depending on file structure

2. Raise assistant.keywords threshold or add a negation rule. The word 'ai' in a README fires the assistant rule at +0.5 — the highest weight in the system. Repos that mention AI in passing (a tool that 'uses AI') incorrectly score as assistants.

3. Delete dead rules: tool.bin_files, tool.topics, app.topics, assistant.topics, agent.files, bot.topics, framework.topics, service.files, lang.mobile, lang.web, stars.library, stars.framework. These conditions were never satisfied across 42 repos. They add noise to the scoring normalization.

Features Not Yet Used (Commit Layer)

FeatureClassification Signal
commit_velocity_trendIncreasing velocity → likely active product (app/service); decreasing → maintenance mode (library)
uses_conventional_commitsConventional commit adoption strongly correlates with library/framework repos built for external consumers
avg_message_lengthShort messages (<20 chars) suggest personal tools; longer messages suggest team-maintained services
detailed_messages_ratioHigh ratio (>40%) is a strong signal for library/framework — these repos justify changes to downstream consumers
dominant_commit_typefeat-dominant repos are building products; fix-dominant repos are maintaining services; chore-dominant suggests tooling

Portfolio-Level Observations

Most actively developed: theunpartyapp at 168.5 commits/month — classified as framework

Dormant (>180 days since last commit): theunpartyhtml, theunpartychat, theunpartyterminal, theunpartychatty, theunpartyproject, theunpartyporter, theunpartymood, theunpartylogger, theunpartyinvite, theunpartyfoundation, theunpartydashboard, theunpartycolors, theunpartybq, theunpartybot, theunpartyselector, theunpartysearch, theunpartyspace, theunpartystarter, theunpartyswatch, theunpartyteam, theunpartytheme, theunpartyuser

Conventional commits adopted by 11/44 repos (25.0%) — highest adoption in types: assistant

---

Analysis generated by scripts/classification_analysis.py · theunpartybuilder v2.0

#theunpartybuilder

🧗🏾‍♂️ in progress

THOUGHTS.