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:
+165
-23
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user