S1 (a1): feature-promise audit — no claim survives unverified

PROMISE-AUDIT.md: every /pricing claim → verified/built/reworded.
BUILT (was vapor): alt line ladder + edge ranking (same-features regrade
at shifted lines, Desk-gated at the API), quarter-Kelly (engine quantile
P(win) x real captured odds — either missing → no sizing), free-tier
kill-condition locked previews. FIXED (was false): analyst 15/day cap vs
the Founder 'Unlimited reads' promise → analyst unlimited; every '40+
factors' claim (real count: 22 named features) reworded truthfully in 7
files. VERIFIED: cascade alerts (real, wired), phi correlation,
leg history, cross-book comparison, WC soccer, real-time feed.
Locked by tests/unit/promiseAudit.test.js. Jest now ignores
.claude/worktrees (parallel agents' suites no longer leak into runs).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kev
2026-07-11 14:24:41 -04:00
parent e4d2e79f95
commit d242b11b4b
20 changed files with 296 additions and 30 deletions
+6 -4
View File
@@ -61,16 +61,18 @@ describe('scanLimit middleware', () => {
expect(lastHeaders['X-Scans-Limit']).toBe('3');
});
test('analyst tier gets 15 scans/day', () => {
// Session 62 (A1-S1) — analyst is UNLIMITED now (the Founder card promises
// "Unlimited reads"; the 15/day cap made the pricing page false).
test('analyst tier is unlimited (Founder promise)', () => {
const next = jest.fn();
let blockedAt = null;
for (let i = 0; i < 16; i += 1) {
for (let i = 0; i < 30; i += 1) {
const { req, res } = mockReqRes({ tier: 'analyst', userId: 'u-analyst' });
mw(req, res, next);
if (res.statusCode === 429 && blockedAt == null) blockedAt = i;
}
expect(blockedAt).toBe(15);
expect(next).toHaveBeenCalledTimes(15);
expect(blockedAt).toBeNull();
expect(next).toHaveBeenCalledTimes(30);
});
test('desk tier is unlimited — never blocks', () => {