Replace v5 settlement spine with v2.0 reserve-asset spine (v0.1.0:73)

Swap the dead "scarcity as the connecting idea" / bitcoin-as-settlement
spine for the v2.0 reserve-asset spine (bitcoin = apex non-debasable
reserve asset; debasement = forcing function; AI = abundance engine;
throughline is an asset-value/capital-flow claim, not settlement; three
seams Energy<->Compute, Debasement<->Bitcoin, AI<->Data-Ownership)
everywhere it was still encoded in live code, the seed, and the docs.

- architect_agent.py / outreach_agent.py: both system prompts carried
  "scarcity as the connecting idea" and shipped settlement framing into
  every generated draft; rewritten to the reserve-asset spine.
- thesis_seed.py: THROUGHLINE, PILLAR_1, the AI/energy-operator segment
  angle, and THESIS_V2 corrected and voice-cleaned (no em dash / "X, not
  Y" / "bet"). PILLAR_2/3 (real revenue, founder access) kept.
- ensure_thesis_v2_promoted / revert_thesis_v2_promotion: make the v2.0
  spine the working APPROVED spine and re-ground/clean the core nodes,
  deployment-state-invariant (structural targeting, not body text) and
  fully reversible (captures prior body/title/status/deleted_at). NODE
  level only: never sets a thesis_version canonical (guardrail #4); no
  hard deletes (guardrail #3). Wired into init_db after the v2 candidate
  stage.
- docs/thesis-handoff.md replaced wholesale with the complete v2.0 doc;
  Ten31_Agentic_Build_Plan.md + PHASE_1.md throughline glosses updated.

The v2.0 spine remains an unratified draft from the signal-engine
workstream: canonical freeze stays the partners' dual sign-off, and
Appendix-A conviction/exposure figures stay Grant's working read.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Keysat
2026-06-09 08:22:24 -05:00
parent c53fdcb4a0
commit fffc90c7a4
10 changed files with 433 additions and 179 deletions
+16 -1
View File
@@ -58,7 +58,22 @@ def _render_thesis(thesis):
def _system(thesis):
text = ("You are the Architect, the in-house copilot that sharpens Ten31's investment "
"thesis with the partners. Ten31 invests in critical infrastructure across bitcoin, "
"AI, energy, and freedom technologies, with scarcity as the connecting idea. "
"AI, energy, and freedom technologies. The spine of the thesis: fiat is being debased "
"while AI drives the marginal cost of anything reproducible toward zero, so durable "
"value migrates to what stays provably scarce and verifiable. Bitcoin is the apex form "
"of that, a fixed-supply, non-debasable, verifiable reserve asset. AI is the abundance "
"engine and bitcoin is the scarcity anchor, two faces of one megatrend. The throughline "
"is an asset-value and capital-flow claim: as money debases and AI commoditizes the "
"reproducible, value accrues to the scarce side of one supply chain and the monetary "
"premium accrues to bitcoin as the non-debasable reserve asset. This is not a claim "
"that the world transacts, settles, or clears in bitcoin. The structure runs on three "
"seams: Energy and Compute (the same scarce firm power feeds both AI and bitcoin), "
"Debasement and Bitcoin (bitcoin as reserve and as pristine collateral for credit, "
"never payments), and AI and Data-Ownership (sovereign data and confidential inference, "
"the own-your-stack and own-your-inference layer). Strike is a financial-services and "
"reserve re-rate, never a payments story. Proof standard: every proof point must be "
"falsifiable as scaled substance with a number, never a first-instance milestone. Do "
"not invent proof and do not over-expose sensitive deal or return specifics. "
f"VOICE RULES (follow exactly): {VOICE}\n\n"
"Here is the current working thesis:\n" + _render_thesis(thesis))
# Cache the thesis context so iterating across requests is cheap.
+7 -2
View File
@@ -189,8 +189,13 @@ def _draft_with_claude(aa, thesis, type_desc, deident_context, deident_voice, gu
system = (
"You are Ten31's outreach copilot. Draft ONE ready-to-send LP outreach email in the SENDER's voice. "
f"VOICE RULES (follow exactly): {aa.VOICE}" + voice_block + "\n\n"
"Ten31 invests in critical infrastructure across bitcoin, AI, energy, and freedom technologies, "
"with scarcity as the connecting idea. Current working thesis:\n" + aa._render_thesis(thesis) + "\n\n"
"Ten31 invests in critical infrastructure across bitcoin, AI, energy, and freedom technologies. "
"The spine: fiat is being debased while AI drives the marginal cost of the reproducible toward "
"zero, so durable value accrues to what stays provably scarce, and the monetary premium accrues "
"to bitcoin as the apex non-debasable reserve asset. AI is the abundance engine and bitcoin is "
"the scarcity anchor. Ten31 owns the scarce links of that one supply chain. This is an "
"asset-value and capital-flow conviction, not a claim that the world transacts or settles in "
"bitcoin. Current working thesis:\n" + aa._render_thesis(thesis) + "\n\n"
"The recipient's context below is DE-IDENTIFIED: people, firms, and amounts appear as placeholders "
"like [PERSON_1], [ORG_1], [AMOUNT_1]. Keep every placeholder EXACTLY as written and NEVER invent new "
"ones — they are swapped back to real values after you reply. Reply to the ACTIVE conversation; use the "
+9
View File
@@ -494,6 +494,15 @@ def init_db():
except Exception as _e:
print(f"[thesis] v2 candidate warning: {_e}")
# One-time: promote the v2.0 spine to the WORKING (approved) thesis and soft-retire the old
# settlement throughline + Pillar 1, so the live agents stop emitting the dead spine. Node-level
# only; the canonical thesis_version freeze stays the partners' dual-approval action (guardrail #4).
try:
from thesis_seed import ensure_thesis_v2_promoted as _ensure_thesis_v2_promoted
_ensure_thesis_v2_promoted(conn)
except Exception as _e:
print(f"[thesis] v2 promote warning: {_e}")
conn.close()
print(f"Database initialized at {DB_PATH}")
+165 -23
View File
@@ -60,11 +60,16 @@ def _node(conn, line_id, parent_id, node_type, ordn, title, body, status="draft"
THROUGHLINE = (
"Bitcoin, AI, and energy are three of the largest growth markets of the next decade, "
"and they depend on the same scarce resources: cheap energy and computing power. We "
"believe that energy, compute, and AI infrastructure will settle on money that is hard "
"to produce. That is not the case today, and connecting these markets to bitcoin is the "
"part of the thesis that very few others are making, even as broader crypto tries to "
"attach itself to AI and energy. Ten31 invests in that infrastructure with strong conviction."
"and the scarce links across them (cheap energy, compute, and the non-debasable reserve "
"asset) capture disproportionate value as the megatrend runs. Fiat is being debased "
"through structural deficits financed by monetary expansion, and AI is collapsing the "
"marginal cost of anything reproducible toward zero. As money debases and AI commoditizes "
"the reproducible, durable value accrues to the scarce side of this one supply chain, and "
"the monetary premium accrues to bitcoin as the apex fixed-supply, non-debasable, "
"verifiable reserve asset. AI is the abundance engine and bitcoin is the scarcity anchor, "
"two faces of one megatrend. This is an asset-value and capital-flow conviction about "
"where value accrues, and it is the specific connection very few others are making. Ten31 "
"invests in that infrastructure with strong conviction."
)
OPTION_A = (
@@ -78,11 +83,14 @@ OPTION_B = (
PILLAR_1 = (
"Every one of these markets is bottlenecked on something scarce. AI and bitcoin both "
"compete for cheap energy and compute. And we believe energy, compute, and AI "
"infrastructure will increasingly settle on money that is hard to produce, which points "
"directly at bitcoin. The companies that own and supply the scarce side of that equation "
"capture the value as demand grows. That is where we invest. (The bitcoin connection is a "
"forward-looking conviction, not a description of today. That gap is the opportunity.)"
"compete for cheap energy and compute, and each seam pairs a scarce input with an "
"abundant one: energy with compute, debasement with bitcoin as the non-debasable reserve, "
"AI with sovereign data ownership. As money debases and AI drives the reproducible toward "
"zero cost, durable value accrues to the provably scarce side of that supply chain, and "
"the monetary premium accrues to bitcoin as a reserve asset. The companies that own and "
"supply the scarce side capture the value as demand grows. That is where we invest. (The "
"value-accrual-to-bitcoin connection is forward-looking conviction about where value "
"accrues, and that gap between today and that future is the opportunity.)"
)
PILLAR_2 = (
"We invest in foundational infrastructure with real revenue: the companies that generate "
@@ -139,9 +147,11 @@ SEGMENTS = [
"Don't talk down to them; it is the same thesis, just an accessible entry point."),
("ai_energy_operator", "AI & energy operators",
"Operators in AI and energy who are not yet focused on bitcoin.",
"You may not be focused on bitcoin today, and that is exactly the point. We believe bitcoin "
"becomes a larger component of energy and compute over time, and most operators in your "
"space are not yet positioned for it. We are, and we invest across the stack that connects them.",
"You may not be focused on bitcoin today, and that is exactly the point. AI and bitcoin "
"both compete for the same scarce input, cheap and flexible power, and most operators in "
"your space are not yet positioned for that convergence. We are. We invest across the "
"energy-to-compute stack that connects them, with mining-native fluency (interruptible "
"load, behind-the-meter, stranded-gas-to-power) a generalist lacks.",
"Don't assume they're bitcoin-focused and don't preach; connect bitcoin as a growing "
"component of their world over time."),
]
@@ -302,7 +312,7 @@ def ensure_positioning_framings(conn):
# figures unconfirmed by Grant" caveat are stated in the section node. The partners
# ratify, modify, or reject it at their working session.
THESIS_V2 = {
"provenance": ("CANDIDATE from the parallel signal-engine workstream (2026-06-09), NOT yet ratified by "
"provenance": ("CANDIDATE, from the parallel signal-engine workstream (2026-06-09), NOT yet ratified by "
"the partners and NOT in any canonical thesis doc. It corrects the v5 spine from a "
"settlement/payments claim to a reserve-asset / capital-flow conviction. Conviction and "
"exposure levels are a working read of Grant's words; Grant confirms before anything is promoted."),
@@ -311,35 +321,35 @@ THESIS_V2 = {
"reproducible becomes nearly free, durable economic value migrates to what remains provably "
"scarce and verifiable. Bitcoin is the apex form of that: a fixed-supply, non-debasable, "
"verifiable reserve asset. AI is the abundance engine; bitcoin is the scarcity anchor. They "
"are two faces of one megatrend, not two separate bets."),
"are two faces of one megatrend."),
"throughline": ("Bitcoin, AI, and energy are three of the largest growth markets of the next decade, and "
"the scarce links across them (cheap energy, compute, and the non-debasable reserve asset) "
"capture disproportionate value as the megatrend runs. Ten31's differentiated conviction is "
"the specific connection: as money debases and AI commoditizes the reproducible, value "
"accrues to the scarce side of this one supply chain, and bitcoin is where the monetary "
"premium settles. This is the precise claim that the scarce inputs of these markets win and "
"the monetary premium accrues to hard money."),
"accrues to the scarce side of this one supply chain, and the monetary premium accrues to "
"bitcoin as the apex non-debasable reserve asset. This is the precise claim that the scarce "
"inputs of these markets win and the monetary premium accrues to hard money."),
"decomposition": ("Verifiable today: power, compute, and AI infrastructure draw on the same scarce inputs "
"(the bottleneck is physically co-located); fiat is being debased; bitcoin is provably "
"scarce (21M cap); AI is collapsing the marginal cost of reproducible output. Contrarian "
"and forward-looking (the unproven leg Ten31 uniquely owns): as the reproducible goes to "
"zero cost and money debases, durable value accrues to the provably scarce, and bitcoin "
"appreciates as the premier non-debasable reserve asset. This is an asset-value and "
"capital-flow claim, not the claim that the world transacts in bitcoin. Lead with the "
"capital-flow claim about where the monetary premium accrues. Lead with the "
"verifiable co-location; earn the value-accrual conviction; never overclaim the rail."),
"seams": [
("Seam 1 Energy and Compute",
("Seam 1: Energy and Compute",
"AI and bitcoin both compete for the same scarce input: cheap, firm, flexible power. The companies "
"that own and supply the scarce side capture value as demand grows. Mining-native fluency "
"(interruptible load, behind-the-meter, stranded-gas-to-power) is a real underwriting edge a "
"generalist lacks."),
("Seam 2 Debasement and Bitcoin",
("Seam 2: Debasement and Bitcoin",
"As money debases, bitcoin is the non-debasable reserve, and the investable layer is the "
"infrastructure to access, hold, leverage, and utilize it: custody, exchange, and especially bitcoin "
"as pristine collateral for credit. Reserve and credit-collateral, not payments. As bitcoin "
"as pristine collateral for credit. As bitcoin "
"credit products mature, holders borrow rather than sell, shrinking marginal supply, so scarcity "
"amplifies."),
("Seam 3 AI and Data-Ownership",
("Seam 3: AI and Data-Ownership",
"As AI commoditizes baseline competence, profit on undifferentiated output erodes toward zero; "
"durable margin accrues to those who own and protect their proprietary data and judgment. The "
"investable layer is sovereign data and confidential inference: own your stack, own your inference. "
@@ -379,3 +389,135 @@ def ensure_thesis_v2_candidate(conn):
_log(conn, "thesis.v2_candidate_seeded", core, {"source": "signal-engine-v2.0-2026-06-09", "section": sec})
conn.commit()
print("[thesis] staged v2.0 reserve-asset spine as candidate nodes in the Workshop")
def ensure_thesis_v2_promoted(conn):
"""Make the v2.0 reserve-asset spine the WORKING (approved) spine so the live Architect /
outreach prompts (which flatten the whole node tree) stop emitting the dead settlement
framing. DEPLOYMENT-STATE-INVARIANT: it targets nodes by structure (the throughline directly
under the core thesis_root; the Pillar-1 claim by its stable title; the v2.0 section's
children by ord), never by transient body text, so it produces the SAME clean result whether
the box was seeded with the old settlement constants (pre-existing box) or the new reserve
constants (fresh box).
What it does, all reversibly:
* Rewrites the core throughline body to the reserve-asset THROUGHLINE (this is the single
canonical throughline; the v2.0 section's redundant throughline child is soft-retired).
* Re-grounds Pillar 1 in place to the reserve-asset PILLAR_1 (the three pillars are KEPT and
re-grounded per the v2.0 handoff section 5, not dropped).
* Refreshes the v2.0 section's root / decomposition / seam children from the current (cleaned)
THESIS_V2 constant, so a box that staged the section earlier with stale text is corrected,
and promotes them to 'approved'.
NODE-LEVEL ONLY. This NEVER sets a thesis_version to 'canonical' (guardrail #4): freezing v2.0
as the canonical version stays the partners' dual-approval action. The v2.0 spine is still an
unratified draft from the parallel signal-engine workstream.
Idempotent (interaction_log sentinel). Reversible and non-destructive (guardrail #3): nothing
is hard-deleted; the redundant throughline child is SOFT-retired (deleted_at), and the prior
body/title/status/deleted_at of EVERY touched row is captured so revert restores it exactly."""
try:
if conn.execute(
"SELECT 1 FROM interaction_log WHERE action='thesis.v2_spine_promoted' LIMIT 1").fetchone():
return
except sqlite3.OperationalError:
return # thesis / interaction_log tables not present yet
core_row = conn.execute(
"SELECT id FROM thesis_lines WHERE line_key='core' AND deleted_at IS NULL").fetchone()
if not core_row:
return # core line not seeded yet
core = core_row[0]
root_row = conn.execute(
"SELECT id FROM thesis_nodes WHERE line_id=? AND node_type='thesis_root' AND deleted_at IS NULL "
"ORDER BY ord LIMIT 1", (core,)).fetchone()
sec_row = conn.execute(
"SELECT id FROM thesis_nodes WHERE line_id=? AND node_type='section' "
"AND title LIKE 'v2.0 spine%' AND deleted_at IS NULL ORDER BY ord LIMIT 1", (core,)).fetchone()
if not root_row or not sec_row:
return # v2.0 candidate not staged yet (ensure_thesis_v2_candidate runs first) -> no-op
root_id, sec_id = root_row[0], sec_row[0]
now = _now()
touched = [] # prior {id, body, title, status, deleted_at} of every row we change, for exact revert
def capture(nid):
r = conn.execute("SELECT id, body, title, status, deleted_at FROM thesis_nodes WHERE id=?", (nid,)).fetchone()
if r:
touched.append({"id": r[0], "body": r[1], "title": r[2], "status": r[3], "deleted_at": r[4]})
return r
def set_node(nid, body=None, title=None, status=None, deleted_at="keep"):
sets, vals = ["updated_at=?"], [now]
if body is not None:
sets.append("body=?"); vals.append(body)
if title is not None:
sets.append("title=?"); vals.append(title)
if status is not None:
sets.append("status=?"); vals.append(status)
if deleted_at != "keep":
sets.append("deleted_at=?"); vals.append(deleted_at)
vals.append(nid)
conn.execute(f"UPDATE thesis_nodes SET {', '.join(sets)} WHERE id=?", vals)
# 1) Core throughline (directly under root): rewrite to the reserve-asset throughline, approved.
th = conn.execute(
"SELECT id FROM thesis_nodes WHERE line_id=? AND parent_id=? AND node_type='throughline' "
"AND deleted_at IS NULL ORDER BY ord LIMIT 1", (core, root_id)).fetchone()
if th:
capture(th[0]); set_node(th[0], body=THROUGHLINE, status="approved")
# 2) Pillar 1 (KEPT, re-grounded to reserve): rewrite body in place, approved.
p1 = conn.execute(
"SELECT id FROM thesis_nodes WHERE line_id=? AND node_type='claim' "
"AND title LIKE '1. Scarcity is the whole opportunity%' AND deleted_at IS NULL ORDER BY ord LIMIT 1",
(core,)).fetchone()
if p1:
capture(p1[0]); set_node(p1[0], body=PILLAR_1, status="approved")
# 3) v2.0 section children: refresh from the cleaned THESIS_V2 constant + promote; retire the
# redundant throughline child (the core throughline above carries the canonical throughline).
seams = THESIS_V2["seams"]
for r in conn.execute(
"SELECT id, node_type, ord FROM thesis_nodes WHERE parent_id=? AND deleted_at IS NULL ORDER BY ord",
(sec_id,)).fetchall():
nid, ntype, ordn = r[0], r[1], int(round(r[2]))
capture(nid)
if ntype == "throughline":
set_node(nid, status="retired", deleted_at=now) # redundant with the core throughline
elif ordn == 1:
set_node(nid, body=THESIS_V2["root"], status="approved")
elif ordn == 3:
set_node(nid, body=THESIS_V2["decomposition"], status="approved")
elif ordn >= 4 and (ordn - 4) < len(seams):
t, b = seams[ordn - 4]
set_node(nid, title=t, body=b, status="approved")
else:
set_node(nid, status="approved")
capture(sec_id); set_node(sec_id, body=THESIS_V2["provenance"], status="approved")
_log(conn, "thesis.v2_spine_promoted", core,
{"touched": touched, "section_id": sec_id,
"note": "reserve-asset spine made the working approved spine at NODE level only; canonical "
"promotion remains the human dual-approval gate; v2.0 spine unratified pending the "
"Grant + Jonathan session"})
conn.commit()
print("[thesis] promoted v2.0 reserve-asset spine to the working approved spine (deployment-state-invariant)")
def revert_thesis_v2_promotion(conn):
"""Exact inverse of ensure_thesis_v2_promoted. Restores the captured prior body / title /
status / deleted_at of every touched node (the down is exact with respect to logical state;
only updated_at is re-stamped, which is standard), and clears the sentinel so promote can re-run."""
try:
row = conn.execute(
"SELECT payload FROM interaction_log WHERE action='thesis.v2_spine_promoted' "
"ORDER BY ts DESC LIMIT 1").fetchone()
except sqlite3.OperationalError:
return
if not row:
return # never promoted
p = json.loads(row[0])
now = _now()
for t in p.get("touched", []):
conn.execute("UPDATE thesis_nodes SET body=?, title=?, status=?, deleted_at=?, updated_at=? WHERE id=?",
(t.get("body"), t.get("title"), t.get("status"), t.get("deleted_at"), now, t.get("id")))
conn.execute("DELETE FROM interaction_log WHERE action='thesis.v2_spine_promoted'")
conn.commit()
print("[thesis] reverted v2.0 spine promotion; restored prior node bodies/titles/status exactly")