DAY 010 / GROWTH PROGRAM
Growth Program: taking sensor-backed scorecards to Solana devnet
How Growth v2 expanded into sensor-backed custody receipts and moved from a local-validator proof to an evidence-pinned experimental Solana devnet program and published IDL.
01 / THE NEW BOUNDARY
A score contract became useful for physical custody—and real enough to verify on devnet.
Growth Program v2 now has an experimental Solana devnet identity and a broader product story: the same bounded, versioned score receipt can describe a team, a software project, a consenting contributor, or how well a physical asset was cared for during one period.
This is a continuation, not a rewrite. The earlier Growth Program build note freezes commit d944ee7: legacy containment, the hardened contract, the no-network simulator, and the isolated-validator proof before any public deployment. This note freezes commit 3497678, where the product surface expands and the candidate program plus IDL are recorded on devnet.
The devnet deployment closes the placeholder-identity gap. It does not close custody, independent reproduction, external audit, adversarial testing, indexer, soak, or public UI gates. The repository's decision remains NO-GO beyond experimental devnet.
02 / FROM LOCAL PROOF TO PUBLIC CANDIDATE
The delta is small in Git and large in what can now be claimed.
Commit d944ee7 proved the real Anchor program only on a disposable local validator under a provisional identity. Commit 3497678 changes the declared program address across source, IDL, local tooling, website copy, and tests; adds the dated devnet deployment manifest; and expands the use-case page with sensor-backed physical custody.
$ git diff --stat d944ee7..3497678
# 30 files changed, 718 insertions(+), 116 deletions(-)
The delta does two jobs:
1. expand the product map from people and projects into sensor-backed custody;
2. replace the provisional local identity with a recorded experimental devnet deployment.
The earlier Build Note remains a correct historical snapshot at d944ee7.
This note freezes the next public state at 3497678.| Question | Build Note 006 | This release |
|---|---|---|
| Where does code execute? | Isolated local validator only | Local validator plus one experimental devnet program |
| What identity is authoritative? | Provisional test address | Devnet program DA9e…DAVE |
| What can be scored? | Teams, projects, contributors | Those three plus sensor-backed asset custody and 18 adjacent hypotheses |
| Is there a live public client? | No | No—the hosted simulator remains network-disabled |
| Release decision | NO-GO for devnet deployment | Deployed experimentally; NO-GO beyond that boundary |
03 / WHY THE PRIMITIVE TRAVELS
The reusable part is not “growth.” It is a policy-bound assessment receipt.
The contract never decides whether a team is healthy or a cold room was managed safely. It provides bounded arithmetic, versioned rubrics, period ordering, consent and lifecycle rules, commitments, and append-style assessment history. Domain meaning stays in the issuer's rubric and evidence policy.
Meaning = Organization + Rubric identity/commitment
+ evidence policy + assessment period
Subject public key may represent:
team controller | project controller | contributor
asset-associated controller | operational-unit controller
Stored assessment:
per-pillar score_bps + sample_count + coverage_bps
weighted_score_bps + weighted_coverage_bps
period_start + period_end + expires_at
rubric_commitment + evidence_commitment
Comparison rule:
compare only inside the same Organization and Rubric identity/commitment,
under the same evidence policy and a compatible period policyThis distinction prevents a dangerous product slide. “Create a growth contract” in the playground means create an Organization PDA and a versioned Rubric inside one shared program. It does not deploy a new executable. And a ranking shown by a website is not on-chain truth: comparisons are defensible only when Organization, Rubric identity or commitment, evidence rules, and compatible period policy are genuinely shared.
On chain, every subject is a public key. A physical-asset workflow therefore needs an asset-associated controller wallet, plus explicit custody, recovery, and rotation rules for every lifecycle action that requires the subject signature. The program does not make a freezer, tank, or shipment sign for itself.
04 / SENSOR EVIDENCE
The contract receives a grade, not a firehose of readings.
A proposed physical-asset workflow begins with sensors and inspections, but those systems stay off chain. In that architecture, an adapter would check provenance, calibration, signatures, missing intervals, and exceptions before an accountable issuer applies one published rubric to bounded aggregates. Only then would a signed assessment reach Growth v2. The pinned repository does not yet implement or test this adapter or a telemetry verifier.
// Illustrative off-chain evidence envelope—not an on-chain account.
{
"schema": "growth-evidence@1",
"subject": "cold-room:BOS-03",
"window": { "start": "2026-08-01", "end": "2026-08-31" },
"sources": [
{ "logger": "T-07", "calibrationCurrent": true, "signed": true }
],
"validation": {
"expectedSamples": 43200,
"coverageBps": 9980,
"excursionMinutes": 11
},
"rubric": "COLD-CUSTODY/v3",
"aggregates": ["five bounded pillar results"],
"rawTelemetry": "private; retained and disclosed by policy"
}
canonical_payload = canonical_json(bundle)
private_salt = cryptographically_random_bytes(>= 16)
evidence_commitment =
SHA-256("growth-v2:evidence:v1" || 0x00 || private_salt ||
0x00 || canonical_payload)
authorized verification discloses canonical_payload + private_salt
through the evidence system's controlled channelKeeping raw telemetry off chain protects commercial routes, facility operations, and detailed environmental histories from automatic public disclosure. The evidence commitment can later detect whether a disclosed canonical bundle changed when an authorized verifier receives both the bundle and its private salt through a controlled channel. It cannot establish that a logger was installed correctly, that calibration evidence is genuine, or that the issuer did not omit inconvenient readings. The envelope above is article-authored pseudocode; only its domain-separated, salted hash construction follows the repository's commitment guidance.
05 / WORKED EXAMPLE
A month of cold-room operations becomes one inspectable custody receipt.
The website's synthetic BOS-03 example starts with 43,200 expected readings, 99.8% valid coverage, two excursions totaling 11 minutes, a four-minute median response, and a current calibration record. Five declared weights produce a 96.1 result.
Thermal compliance 40% × 96 = 38.4
Monitoring coverage 20% × 99 = 19.8
Excursion response 20% × 94 = 18.8
Calibration integrity 10% × 100 = 10.0
Access discipline 10% × 91 = 9.1
────
Synthetic weighted result 96.1 / 100
Context carried beside the result:
43,200 expected samples · 99.8% valid coverage
2 excursions / 11 minutes · 4-minute median response
rubric COLD-CUSTODY/v3 · illustrative evidence hashThe useful object is not “96.1” by itself. It is 96.1 under COLD-CUSTODY/v3, for one declared window, with 99.8% coverage, five visible weights, an accountable assessor, and a commitment to the evidence bundle. A later rubric or a different issuer creates a different comparison boundary.
The example was informed by the World Health Organization's temperature-mapping guidance. It is synthetic; it is not a WHO certification, regulatory finding, or claim about a real facility.
06 / PHYSICAL-ASSET MAP
Six concrete scenarios test whether the abstraction survives contact with operations.
The repository turns six established monitoring practices into protocol hypotheses. Each one needs its own rubric, issuer qualification, calibration rules, privacy policy, and dispute process; the linked agencies describe the operating domain, not an endorsement of this protocol.
| Scenario | Possible subject | Illustrative evidence | Practice anchor |
|---|---|---|---|
| Medicine cold-room custody | Room, freezer, shipment, or lot | Temperature distribution, excursions, logger coverage, calibration, response time | WHO |
| Museum and archive preservation | Gallery, archive room, case, or zone | Humidity, stability, light, pollutants, vibration, uptime, conservation response | NPS |
| Grain silo stewardship | Bin, silo, commodity lot, or season | Temperature gradients, moisture, CO₂, aeration, hot spots, sampling coverage | USDA |
| Underground tank integrity | Tank, piping system, or inspection period | Inventory variance, alarms, gauge status, sensor tests, calibration, acknowledgement | EPA |
| Battery storage safety | Rack, enclosure, site, or operating window | Temperature spread, vent gas, alarms, redundancy, isolation time, maintenance | DOE |
| Refrigerated food transport | Vehicle, container, route, handoff, or load | Pre-cooling, time–temperature history, door events, uptime, cleaning, handoff | FDA |
The same page carries 18 adjacent explorations—bringing the displayed map to 27 concepts when combined with the original three templates and six detailed sensor cases. They are a product backlog, not shipped integrations.
HYPOTHESIS 01
Grant cohort progress
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 02
Vendor qualification
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 03
Learning cohorts
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 04
Community stewardship
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 05
Product readiness
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 06
Silo quality maps
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 07
Indoor-air stewardship
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 08
Seed-bank preservation
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 09
Concrete curing assurance
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 10
Transit asset condition
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 11
Art logistics custody
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 12
Water-storage stewardship
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 13
Renewable fleet care
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 14
Rental equipment care
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 15
Restoration nursery health
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 16
Critical spares readiness
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 17
Construction material custody
Needs domain-specific governance, evidence, calibration, privacy, and review.
HYPOTHESIS 18
Loss-prevention programs
Needs domain-specific governance, evidence, calibration, privacy, and review.
07 / WHAT THE PROGRAM ACTUALLY EXPOSES
The use cases changed; the bounded contract model did not.
The deployment delta does not introduce a sensor instruction or a new asset account. It gives the existing general-purpose scorecard program a real address. At the pinned commit, the IDL exposes 17 instructions, five account types, and 13 event types.
declare_id!("DA9eu83HutyKB75K7gcPvAGTMH53HmcXN5Kg9Km8DAVE");
17 instructions
organization create · pause · resume · retire
authority propose · cancel · accept
rubric create · activate
subject enroll · adopt · revoke · administrative revoke
assessment submit · dispute · correct
migration record legacy provenance
5 account types
Organization · Rubric · ScoreProfile · Assessment · LegacyMigrationReceipt
13 emitted event types
organization, authority, rubric, subject, assessment, and migration transitionspub struct SubmitAssessmentArgs {
pub sequence: u64,
pub period_id: u64,
pub period_start: i64,
pub period_end: i64,
pub evidence_commitment: [u8; 32],
pub aggregates: Vec<PillarAggregateInput>,
}
pub struct PillarAggregateInput {
pub pillar_id: [u8; 16],
pub score_bps: u16,
pub sample_count: u32,
pub coverage_bps: u16,
}The program accepts at most 16 pillars with up to eight increasing thresholds each. The browser's atomic local setup bridge still caps maximum-shaped rubrics at six because seven maximum-field pillars exceed Solana's 1,232-byte transaction packet. That is a bridge and transaction-composition limit, not a six-pillar contract limit.
Organization authority submits routine assessments. Subjects co-sign enrollment and rubric adoption, can dispute the latest result, and co-sign corrections. A correction creates a new assessment that supersedes the old one. The previous score, evidence, and period payload remains intact, while the target account's status changes to Corrected. The previous build note contains the full lifecycle and migration walkthrough.
08 / EXPERIMENTAL DEVNET IDENTITY
The candidate now has a public address, loader record, authority, and transaction trail.
On 31 August 2026, Growth v2 was deployed to Solana devnet at DA9eu83HutyKB75K7gcPvAGTMH53HmcXN5Kg9Km8DAVE. Its upgradeable-loader ProgramData account is AHUsoqpv7EPyTErV539kvUb9q9MS9ywuiu6aYFzCrD3i, and the initial upgrade and IDL authority is the single devnet-only wallet 7NrJdHqZY8KETyA46BBrngExHjFF4GPxboUskbGTz9P8.
Network Solana devnet
Status experimental-not-release-approved
Program DA9eu83HutyKB75K7gcPvAGTMH53HmcXN5Kg9Km8DAVE
ProgramData AHUsoqpv7EPyTErV539kvUb9q9MS9ywuiu6aYFzCrD3i
Upgrade + IDL auth 7NrJdHqZY8KETyA46BBrngExHjFF4GPxboUskbGTz9P8
Deploy slot 491039186
Deploy time 2026-08-31T17:16:54Z
Executable size 511,312 bytes
Executable SHA-256 c2fbee57bbfe9481e9c4348e0b88bc24c5dee51f3dd206c844b9bd8485029ff6
Current decision NO-GO beyond experimental devnet deploymentThe deployment transaction finalized in slot 491039186. The manifest records a 3,559,935,600-lamport rent-exempt balance for ProgramData executable storage and a 511,312-byte executable. A fresh read-only devnet RPC check during this article's publication still returned the expected executable flag, upgradeable-loader owner, ProgramData pointer, last-deploy slot, and authority.
Fresh read-only devnet RPC check during this publication pass
Program account
executable true
owner BPFLoaderUpgradeab1e11111111111111111111111
ProgramData AHUsoqpv7EPyTErV539kvUb9q9MS9ywuiu6aYFzCrD3i
ProgramData account
last slot 491039186
authority 7NrJdHqZY8KETyA46BBrngExHjFF4GPxboUskbGTz9P8
account space 511,357 bytes (45-byte loader header + 511,312-byte program)
IDL account
owner DA9eu83HutyKB75K7gcPvAGTMH53HmcXN5Kg9Km8DAVE
account space 9,282 bytes
Finalized program-owned account census
IDL account present
business PDAs 0 Organization · 0 Rubric · 0 ScoreProfile
0 Assessment · 0 LegacyMigrationReceiptA finalized program-owned account census found only the Anchor IDL account—no live Organization, Rubric, ScoreProfile, Assessment, or LegacyMigrationReceipt state. The public use cases are therefore still product hypotheses and synthetic fixtures, not a hidden set of devnet customer records.
09 / EXECUTABLE PROOF
Fetched bytes match the built bytes; source provenance is still incomplete.
The candidate was built twice with Anchor 0.31.1 and Solana 2.3.12 in the pinned verifiable-build image. Both same-operator runs produced the same SHA-256. A dump of the finalized devnet executable produced that hash again, and Anchor's skip-build verification reported the program verified.
$ anchor build --verifiable --solana-version 2.3.12
# image: solanafoundation/anchor:v0.31.1
# two same-operator runs produced identical 511,312-byte artifacts
$ anchor verify --skip-build DA9eu83HutyKB75K7gcPvAGTMH53HmcXN5Kg9Km8DAVE
# recorded result: program is verified
local artifact SHA-256
c2fbee57bbfe9481e9c4348e0b88bc24c5dee51f3dd206c844b9bd8485029ff6
finalized on-chain dump SHA-256
c2fbee57bbfe9481e9c4348e0b88bc24c5dee51f3dd206c844b9bd8485029ff6
Important provenance boundary:
baseCommit d944ee75cbb06d6eabdbd7075a88a15bb15e5936
worktreeCleanAtBuild false
independent operators falseThis proves a useful equality: the recorded artifact and deployed executable are the same bytes. It does not prove that those bytes came from a clean, signed release commit. The manifest explicitly records a dirty worktree based on d944ee7, and both builds were run by one operator. Calling this “independently reproducible” would erase the most important remaining provenance gap.
10 / PUBLISHED INTERFACE
The IDL was written to devnet and compared semantically, not by fragile formatting.
The Anchor IDL account at Da3msDhRT1ZHTEcG7HZMy1bhR8VN7ARWDKtWY9dfbJvt is owned by the Growth v2 program and governed by the same initial authority. Publishing required nine chronological write transactions; all nine signatures are recorded in the manifest.
IDL account Da3msDhRT1ZHTEcG7HZMy1bhR8VN7ARWDKtWY9dfbJvt
IDL authority 7NrJdHqZY8KETyA46BBrngExHjFF4GPxboUskbGTz9P8
Account owner DA9eu83HutyKB75K7gcPvAGTMH53HmcXN5Kg9Km8DAVE
Account space 9,282 bytes
Compressed data 4,619 bytes
committed file SHA-256
c1b29996021bebd745cddeb32916d8297f80d1028df8afe7fd0d27b9bab48929
fetched raw SHA-256
6544b1bda637eb7b24b9d5dd433b1b7a1758ab118195fc9ab8f2ccf2b2f43e38
stable normalized SHA-256 (both)
e67007882e851569801710737f2f84e1e0ea48d64192627ad095a8a510b599ce
semanticMatch true
Normalization recursively sort object keys, then JSON.stringify without newlineThe fetched raw file and committed file have different byte hashes because Anchor changes object-key order and omits the final newline. Recursively sorting object keys and encoding both as compact JSON produces the same stable hash. That makes the claim precise: the published interface is semantically identical, not raw-file identical.
11 / THE UI STILL FAILS CLOSED
The program is on devnet. The hosted playground still cannot touch it.
The owner-only website can model organizations, rubrics, enrollment, scoring, disputes, corrections, pausing, retirement, revocation, expiry, accounts, PDAs, events, and an unsigned devnet replay plan. Its normal playground runs entirely in browser memory underconnect-src 'none' and has no RPC, wallet, signing, sending, automatic persistence, remote storage, or import path.
Real browser-initiated writes remain confined to the separate localhost lab with ephemeral signers and an isolated validator. The new public program address therefore supports verification and future integration work; it does not quietly turn the existing website into a live devnet application.
12 / WHAT BROKE OR ALMOST BECAME A FALSE CLAIM
The hardest bugs were mismatches between evidence and language.
A real address had to replace the provisional identity everywhere
Source, Anchor configuration, IDL, public website artifact, local bridge, tests, and documentation all declared the old local-only identity. The release changes them together so clients cannot silently derive accounts for a different program.
Two matching builds were tempting to call reproducible
The byte result is strong, but both runs came from one operator and a dirty worktree. The manifest now preserves those qualifiers beside the hashes instead of turning same-machine repeatability into independent provenance.
A raw IDL hash reported a mismatch that was only serialization
The fetched IDL reordered keys and dropped the trailing newline. Stable recursive key sorting separated semantic equality from raw-file equality and retained both hashes for audit.
Adding sensors could have implied that the chain validates hardware
The architecture now draws the off-chain adapter explicitly. Growth v2 accepts an issuer-signed aggregate and commitment; it neither reads a sensor nor proves its calibration, completeness, or honesty.
Deployment created pressure to unlock the hosted playground
The UI remains network-free. Public program verification, public account exploration, and a transaction-capable product are separate release decisions with different evidence requirements.
13 / VERIFIED RESULT
The repository, local harness, and public accounts support different parts of the claim.
| Evidence surface | Result | Scope |
|---|---|---|
| Rust unit logic | 10 / 10 | Repository manifest; rerun at the pinned public commit |
| Validator lifecycle + planner | 12 / 12 | Eight program cases plus four included migration-planner cases |
| Loopback bridge boundaries | 4 / 4 | RPC/run-ID validation, artifact identity, and six/seven-pillar packet boundaries |
| Website boundaries | 15 / 15 | One fixture test plus fourteen playground and route-isolation cases |
| Verifiable program builds | 2 matching | Same operator and dirty source worktree; not independent reproduction |
| Devnet program + IDL | Present | Fresh read-only account check; manifest records byte and semantic equality |
$ cd v2
$ cargo +1.92.0 test --locked --lib
# 10 Rust tests
$ yarn idl:check && yarn typecheck
$ yarn test:local
# 12 total: 8 lifecycle + 4 migration-planner cases
$ node --test tests/localnet-bridge.test.mjs
# 4 bridge boundary tests
$ cd ../website
$ npm run test:fixtures
$ npm run test:playground
# 1 fixture boundary + 14 playground cases
$ npm run lint && npm run build
# lint and application prerender/buildThe dated manifest additionally records a matching on-chain program dump, a semantic IDL match, a passing IDL-current check, and a passing Anchor skip-build verification. The fresh RPC read verifies current public account identity; it does not rerun deployment, mutate authority, or create devnet fixture accounts.
14 / CURRENT TRUTH
Experimental deployment is complete. Production evidence is not.
| Gate | Current state | Required evidence |
|---|---|---|
| Authority custody | Program and IDL remain controlled by one devnet-only key. | Transfer both to an approved hardware-backed multisig under a reviewed policy. |
| Build provenance | Two same-operator artifacts match, but the build worktree was dirty. | Rebuild a signed clean commit independently and reconcile every byte and client hash. |
| Security review | Internal reviews exist; no external smart-contract audit approves this release. | Complete external review, remediate findings, and publish the exact audited pin. |
| Adversarial devnet behavior | The candidate is deployed; a full malicious lifecycle and migration campaign is not. | Exercise bad owners, PDAs, signers, receipts, expiry, terminality, and rollback. |
| Indexer reconciliation | There is no approved finalized-account indexer or fork-aware reconciler. | Treat events as hints, rebuild from canonical accounts, and prove missed-log recovery. |
| Live product path | The hosted simulator cannot read RPC, connect a wallet, sign, or send. | Enable a separately labeled devnet client only after custody and reconciliation gates. |
| Capacity and soak | No retained throughput, compute-budget, concurrency, or long-running soak report exists. | Measure realistic rubric sizes and write patterns; retain machine-readable results. |
| Legacy incident | Provider revocation, authority recovery, and Git-history decisions remain owner work. | Close the containment record without upgrading either v1 deployment in place. |
No production capacity claim is possible yet. There is no retained compute-unit profile, realistic concurrent writer test, RPC-provider failure test, indexer recovery run, or long-duration soak artifact. Local correctness counts and a successful deployment are not throughput evidence.
Public-chain assessments would make subject wallet keys, issuer relationships, timestamps, periods, per-pillar aggregates, sample counts, coverage, disputes, corrections, revocation, and history linkable. A commitment keeps raw evidence out of the account only when the producer uses a strong, salted canonical scheme and a defensible disclosure policy.
15 / FILE GUIDE
The repository separates implementation, deployment evidence, product hypotheses, and policy.
growth-program/
├── docs/
│ └── EXECUTION_STATUS.md # current decision and open gates
├── security/ # pre-release and playground reviews
├── snapshots/2026-08-30/ # privacy-minimized legacy evidence
├── v2/
│ ├── programs/growth_v2/src/ # Anchor program
│ ├── idl/ # canonical public interface + hash
│ ├── tests/ # lifecycle, migration, bridge
│ ├── docs/ # security, migration, deployment
│ └── deployments/devnet/
│ └── 2026-08-31/ # immutable manifest + checksum
└── website/
├── app/use-cases/ # 27 concepts + research anchors
├── app/playground/ # browser-memory simulator
└── app/playground/localnet/ # isolated real-validator labDEPLOYMENT
Machine-readable manifest
Program, ProgramData, authority, transactions, hashes, build scope, and gates.
PRODUCT MAP
Use-case page
Three core templates, six sensor scenarios, 18 hypotheses, and eight research anchors.
INTERFACE
Canonical IDL
Current program address, instructions, accounts, events, types, and errors.
DECISION
Execution status
What changed, what remains owner work, and why the live explorer is still NO-GO.
16 / WHAT IS NEXT
The next milestone should make this deployment governable, reproducible, and observable.
17 / EVIDENCE LEDGER
The public repository and chain state carry the claims; the build conversation supplies chronology.
All implementation, use-case, and deployment claims above point to public commit 3497678cee2271c84172c41c62788806373bea4c. The development conversation was reviewed to reconstruct intent and order of work, but only claims independently supported by public evidence are included.
PRIMARY SOURCE
Pinned Growth repository
Source, tests, product map, security reviews, manifest, and release decision.
CHAIN STATE
Experimental program
Executable devnet account and upgradeable-loader ProgramData relationship.
DEPLOYMENT TRAIL
Deployment transaction
Finalized devnet transaction recorded in the dated deployment manifest.
PUBLISHED INTERFACE
Anchor IDL account
Program-owned interface account with semantic-match evidence in the manifest.