Give the top of the ladder a real prize: Team Grants + Network Intelligence
Marty's read was right — the upper tiers felt flat, and the reason is that they scaled QUANTITY, not KIND. L1->L2 was a category change (you couldn't write, now you can). Everything above L4 was a multiplier on a capability already owned at L2: sound more like you, measure it, more pages, five at once. Meanwhile the price doubles each rung — Corona costs ~17x Culmen. No batch button is worth 17x a voice profile. The fix is a change of axis. Every tool from L1 to L8 was a "me" tool, but past the first levels this business isn't about you: get two, help your two, teach them to teach. So the top now operates on the ORGANISATION. L7 Team Grants — hand Suite capacity down to anyone in your own org. Deliberately from a separate pool that the level grants, NOT out of the leader's own allowance: making someone choose between equipping their team and using their own tools means nobody ever grants anything. Recipients are verified in-org against the contract. Grants can lift a tool the recipient's level hasn't unlocked — that's the point, not a loophole. Being helped is made visible to the recipient, since half the value is knowing an upline backed you. L8 Network Intelligence — every team ad pooled and anonymised: which angles, headlines, creative and formats actually earn their impressions. No member alone has enough traffic to learn anything from display; together they do. It can't be bought, and it compounds monthly with no further work. Holds two lines: nothing identifies anyone, and nothing under 2,000 impressions gets a reported rate — under-evidenced rows are counted and disclosed rather than silently dropped. The written readout is hand-authored, not generated: these are conclusions about money, and a model paraphrasing a table is exactly where an invented number slips in. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+14
-3
@@ -9,6 +9,7 @@
|
||||
'use strict';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const suiteGrants = require('./suite-grants');
|
||||
|
||||
let DATA_DIR = null;
|
||||
function init(opts) { DATA_DIR = opts.dataDir; }
|
||||
@@ -38,6 +39,14 @@ function quotaFor(tool, level) {
|
||||
return t.quota[lv - 1] || 0;
|
||||
}
|
||||
|
||||
// Capacity handed down by an upline this month. It is added on TOP of the
|
||||
// level quota and, deliberately, can lift a tool the member's own level has
|
||||
// not unlocked yet — a leader giving page builds to someone on Scintilla is
|
||||
// exactly the point of the feature, not a loophole in it.
|
||||
function grantedFor(memberId, tool) {
|
||||
try { return suiteGrants.receivedBy(memberId, tool) || 0; } catch (e) { return 0; }
|
||||
}
|
||||
|
||||
function used(memberId, tool) {
|
||||
const all = readAll();
|
||||
const m = all[monthKey()] || {};
|
||||
@@ -50,16 +59,18 @@ function used(memberId, tool) {
|
||||
function check(memberId, level, tool) {
|
||||
const t = TOOLS[tool];
|
||||
if (!t) return { allowed: false, reason: 'unknown-tool', used: 0, limit: 0, remaining: 0 };
|
||||
const limit = quotaFor(tool, level);
|
||||
const base = quotaFor(tool, level);
|
||||
const granted = grantedFor(memberId, tool);
|
||||
const limit = base + granted;
|
||||
const u = used(memberId, tool);
|
||||
if (limit <= 0) {
|
||||
return { allowed: false, reason: 'locked', minLevel: t.minLevel, used: u, limit: 0, remaining: 0, label: t.label };
|
||||
return { allowed: false, reason: 'locked', minLevel: t.minLevel, used: u, limit: 0, remaining: 0, granted: 0, label: t.label };
|
||||
}
|
||||
const remaining = Math.max(0, limit - u);
|
||||
return {
|
||||
allowed: remaining > 0,
|
||||
reason: remaining > 0 ? 'ok' : 'quota',
|
||||
used: u, limit, remaining, label: t.label, resets: monthKey()
|
||||
used: u, limit, base, granted, remaining, label: t.label, resets: monthKey()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user