AZ-027 — Public Testnet Program and Bug Intake Flow v1
Status
Acest document definește programul de testnet public și fluxul de intake pentru buguri în ATLAS ZERO.
După AZ-001 până la AZ-026, există deja:
- specificația protocolului;
- regulile de validare, consens, BVM, witness, economie, agenți și guvernanță;
- modelul de securitate;
- conformitatea și corpusul concret;
- arhitectura nodului;
- artefactele de launch;
- pachetul genesis concret;
- manualul operatorilor;
- ceremonia genesis și ceremonia de launch.
AZ-027 răspunde la întrebarea: cum folosim testnetul public ca instrument controlat de descoperire a defectelor, de validare adversarială și de creștere a încrederii, fără a-l transforma într-un mediu haotic și fără a pierde bugurile importante în zgomot?
Scopul documentului este să fixeze:
- obiectivele testnetului public;
- clasele de participare;
- regulile de participare și testare;
- canalele și formatul de raportare pentru buguri;
- triage, severitate, deduplicare și escalare;
- legătura dintre bug intake, conformance corpus, release pipeline și readiness.
Acest document se bazează pe:
- AZ-002 până la AZ-026, cu accent direct pe AZ-010, AZ-011, AZ-015, AZ-017, AZ-024, AZ-025 și AZ-026.
Termeni:
- MUST = obligatoriu
- MUST NOT = interzis
- SHOULD = recomandat puternic
- MAY = opțional
1. Obiectiv
AZ-027 răspunde la 10 întrebări practice:
- Ce vrem să obținem dintr-un public testnet?
- Ce tipuri de participanți există și ce rol au?
- Ce comportamente sunt încurajate și ce comportamente sunt restricționate?
- Cum sunt raportate bugurile și anomaliile?
- Cum distingem bug, incident, neînțelegere și feedback?
- Cum se face triage-ul și cum se stabilește severitatea?
- Cum se deduplicatează rapoartele și cum se leagă de conformance corpus?
- Când un bug devine blocker pentru testnet, release candidate sau mainnet readiness?
- Cum sunt comunicate fixurile, supersession-urile și statusul bugurilor?
- Cum facem din testnet un program disciplinat de învățare, nu doar o rețea publică „deschisă” fără control?
2. Principii
2.1 Public testnet is an adversarial learning environment
Testnetul public SHOULD fi tratat ca mediu în care:
- participanții încearcă integrări legitime;
- operatorii și cercetătorii încearcă să rupă sau să streseze sistemul;
- echipa observă, clasifică și învață.
2.2 Signal over noise
Programul MUST favoriza raportarea utilă, reproductibilă și bine clasificată. Zgomotul fără structură nu este progres.
2.3 Bug intake is part of protocol maturity
Fluxul de bug intake nu este suport secundar. Este parte din drumul către:
- conformance mai bună;
- security posture mai bun;
- mainnet readiness mai bună.
2.4 Public does not mean undefined
Faptul că testnetul este public MUST NOT însemna:
- reguli vagi;
- scope neclar;
- severitate neclară;
- channels haotice;
- responsabilitate difuză.
2.5 Report -> classify -> reproduce -> fix -> test -> communicate
Acesta SHOULD fi lanțul standard al unui bug util.
3. Program goals
3.1 Primary goals
Public testnet SHOULD urmări explicit:
- validare adversarială a implementării de referință;
- validare inter-implementare unde există mai multe implementări;
- descoperirea bugurilor de consens, validare și BVM;
- descoperirea problemelor de witness/proof și economie;
- testarea operatorilor, documentației și tooling-ului;
- validarea proceselor de incident, release și upgrade.
3.2 Secondary goals
May include:
- onboarding developeri;
- testarea UX/tooling;
- integrarea explorer/wallet/API;
- stres operațional;
- feedback de documentație.
3.3 Rule
Programul SHOULD declara public ce obiective sunt prioritare în fiecare fază. Fără asta, participanții optimizează pentru lucruri diferite.
4. Testnet phases
4.1 Recommended phases
Programul SHOULD avea faze explicite:
PT_PHASE_0_BOOTSTRAPPT_PHASE_1_STABILITYPT_PHASE_2_ADVERSARIALPT_PHASE_3_INTEGRATIONPT_PHASE_4_PRE_RELEASE_HARDENING
4.2 Meaning
PT_PHASE_0_BOOTSTRAP
Confirmăm că rețeaua pornește, finalizează și poate fi operată.
PT_PHASE_1_STABILITY
Căutăm buguri de bază, divergențe și probleme operaționale evidente.
PT_PHASE_2_ADVERSARIAL
Încurajăm testare agresivă, fault injection controlat și rapoarte de securitate/protocol.
PT_PHASE_3_INTEGRATION
Wallets, explorers, tools, external operators, conformance consumers.
PT_PHASE_4_PRE_RELEASE_HARDENING
Focus pe launch subset, blockers, reproducibilitate și readiness.
4.3 Rule
Severity thresholds și reward/recognition policies MAY differ by phase, but MUST be explicit.
5. Participant classes
5.1 Standard participant classes
Programul SHOULD distinge între:
PARTICIPANT_VALIDATOR_OPERATORPARTICIPANT_NODE_OPERATORPARTICIPANT_APP_DEVELOPERPARTICIPANT_PROTOCOL_TESTERPARTICIPANT_SECURITY_RESEARCHERPARTICIPANT_INTEGRATION_PARTNERPARTICIPANT_OBSERVERPARTICIPANT_BUG_REPORTER
5.2 Rule
Nu toți participanții au același scop sau aceeași responsabilitate. Canalele și așteptările SHOULD reflecta asta.
6. Participation rules
6.1 Allowed activities SHOULD include
- rularea de noduri;
- integrarea cu API-uri și tooling;
- trimiterea de tranzacții și witnessuri în limitele testnetului;
- testare adversarială controlată;
- raportarea bugurilor, mismatch-urilor și problemelor de documentație;
- testarea upgrade-urilor și recovery unde programul o permite.
6.2 Prohibited or restricted activities MAY include
- folosirea de infrastructură compromisă pentru a produce zgomot masiv fără raport util;
- doxxing sau expunere de date sensibile;
- atacuri asupra infrastructurii din afara scope-ului programului;
- folosirea de exploit-uri critice în mod distructiv fără raportare responsabilă, dacă programul are policy de disclosure;
- perturbare pură fără intent de testare sau raportare.
6.3 Rule
Public testnet MAY fi deschis, dar programul de testare SHOULD avea terms clare pentru comportamentele neacceptate.
7. Testnet scope declaration
7.1 Every public testnet phase SHOULD declare:
- protocol version scope
- feature flags active
- known limitations
- explicitly in-scope bug classes
- explicitly out-of-scope expectations
- current severity priorities
7.2 Rule
Participanții SHOULD putea afla rapid dacă, de exemplu:
- agent layer e activă;
- anumite proof families sunt experimentale;
- economics sunt realiste sau simplificate;
- governance path e testată sau doar scaffolded.
8. Bug intake channels
8.1 Recommended channels
Programul SHOULD avea canale distincte pentru:
CHANNEL_SECURITY_PRIVATECHANNEL_PROTOCOL_BUG_PUBLIC_OR_PRIVATECHANNEL_OPERATOR_INCIDENTCHANNEL_DOCS_FEEDBACKCHANNEL_INTEGRATION_ISSUECHANNEL_GENERAL_TESTNET_FEEDBACK
8.2 Rule
Canalele pentru buguri critice sau de securitate SHOULD permite raportare privată. Canalele generale nu sunt suficiente pentru tot.
8.3 Important distinction
Un bug de consens nu SHOULD fi raportat doar prin canal informal de chat dacă există canal de intake structurat.
9. Bug report classes
9.1 Standard bug classes
BUG_CONSENSUSBUG_VALIDATIONBUG_BVMBUG_WITNESS_PROOFBUG_ECONOMICBUG_AGENT_CONTROLBUG_GOVERNANCEBUG_GENESIS_RELEASEBUG_OPERATOR_TOOLINGBUG_DOCSBUG_CONFORMANCEBUG_OBSERVABILITY
9.2 Rule
Every report SHOULD map to at least one class. Un report fără clasă devine greu de triaged.
10. Bug report object model
10.1 Canonical structure
BugReport {
report_id
submission_channel_class
report_class
reporter_identity_ref?
protocol_version_scope
network_scope
severity_claimed?
title_hash
summary_hash
reproduction_hash?
artifact_refs?
log_refs?
state_root_refs?
expected_behavior_hash?
observed_behavior_hash?
timestamp_unix_ms
}
10.2 report_id
report_id = H("AZ:BUG_REPORT:" || canonical_bug_report)
10.3 Rule
Human-readable ticket text MAY exist separately, but the structured bug report SHOULD capture the minimum useful semantics.
11. Minimum useful report content
11.1 A useful report SHOULD include:
- what happened
- what was expected
- exact scope/version/network
- steps to reproduce if reproducible
- relevant hashes / artifact refs / case ids if known
- logs or evidence
- whether issue is local or multi-node observed
11.2 Rule
Reports missing minimal reproducibility context SHOULD not be discarded, but MUST likely be triaged as incomplete until clarified.
12. Incident vs bug vs feedback
12.1 Incident
O anomalie live care necesită containment sau operator action imediată.
12.2 Bug
Un defect în specificație, implementare, tooling sau documentație care poate fi analizat, clasificat și urmărit.
12.3 Feedback
Observație sau sugestie care nu indică neapărat defect.
12.4 Rule
Bug intake SHOULD be able to reclassify:
- incident -> bug
- bug -> docs issue
- feedback -> no defect
- bug -> blocker when evidence improves.
13. Intake states
13.1 Recommended states
INTAKE_RECEIVEDINTAKE_NEEDS_INFOINTAKE_DUPLICATEINTAKE_TRIAGEDINTAKE_CONFIRMEDINTAKE_UNCONFIRMEDINTAKE_IN_PROGRESSINTAKE_FIXEDINTAKE_RELEASEDINTAKE_DEFERREDINTAKE_REJECTEDINTAKE_ARCHIVED
13.2 Rule
Status transitions SHOULD be explicit and auditable. A bug should not vanish by silence.
14. Severity model for bug intake
14.1 Recommended severities
SEV_INFOSEV_LOWSEV_MEDIUMSEV_HIGHSEV_CRITICALSEV_SYSTEMIC
14.2 Severity guidance
SEV_INFO
Minor docs/tooling or informational anomaly.
SEV_LOW
Local inconvenience, limited blast radius, no consensus/funds risk.
SEV_MEDIUM
Functional issue, moderate impact, reproducible but not existential.
SEV_HIGH
Serious issue affecting liveness, correctness in some scope, or operator safety.
SEV_CRITICAL
Can threaten:
- consensus truth
- deterministic validity
- unauthorized value movement
- BVM boundedness
- launch artifact integrity
SEV_SYSTEMIC
Cross-cutting or network-wide failure mode with major blast radius.
14.3 Rule
Public reporters MAY claim severity, but final severity MUST be set by triage policy.
15. Triage roles
15.1 Recommended roles
ROLE_INTAKE_TRIAGERROLE_PROTOCOL_TRIAGERROLE_SECURITY_TRIAGERROLE_DOCS_TRIAGERROLE_RELEASE_TRIAGERROLE_AUDIT_SCRIBE
15.2 Rule
Critical bug classes SHOULD not be triaged only by general support or docs role.
16. Triage workflow
16.1 Canonical order
- receive report
- classify report class
- assess completeness
- deduplicate
- assign severity
- determine if incident response needed
- reproduce or request more info
- map to subsystem owner
- decide visibility and disclosure mode
- link to fix path and regression test path
16.2 Rule
Triage MUST separate:
- “cannot reproduce yet” from
- “not a bug”.
17. Deduplication model
17.1 Need
Public testnets generate many reports for the same defect.
17.2 Suggested fingerprint
bug_fingerprint = H("AZ:BUG_FP:" || report_class || normalized_scope || normalized_observed_behavior || key_artifact_refs)
17.3 Rule
Exact fingerprinting MAY be imperfect, but intake system SHOULD support:
- exact duplicate
- probable duplicate
- linked related issue
17.4 Rule
Duplicates SHOULD preserve reporter attribution/evidence while converging to one canonical tracked defect.
18. Reproduction records
18.1 Need
A report becomes much more useful when reproduced.
18.2 Canonical structure
BugReproductionRecord {
reproduction_id
report_id
reproducer_role_class
reproduction_scope
artifact_refs
fixture_refs?
observed_result_hash
verdict
timestamp_unix_ms
}
18.3 verdict
REPRODUCEDNOT_REPRODUCEDPARTIALLY_REPRODUCEDREQUIRES_MORE_INFO
18.4 Rule
Critical bugs SHOULD aim for structured reproduction records, not only textual comments.
19. Link to conformance corpus
19.1 Principle
Every confirmed protocol-relevant bug SHOULD trigger one of:
- new conformance case
- new regression case
- update to existing case
- explicit note why no new case is needed
19.2 Rule
Bug intake without conformance feedback loop causes repeated rediscovery of the same classes of failure.
19.3 Mapping structure
BugToCorpusLink {
report_id
case_id?
suite_name?
action_class
}
action_class:
- add_new_case
- update_expected
- deprecate_old_case
- no_case_needed_explained
20. Link to incident response
20.1 If report indicates live risk
Triage MUST decide whether to:
- open incident
- quarantine scope
- recommend local safe mode
- escalate to emergency review
- restrict public communication until containment if security policy requires
20.2 Rule
Public bug intake MUST integrate with incident runbooks, not run in isolation.
21. Disclosure modes
21.1 Recommended disclosure modes
DISCLOSURE_PUBLICDISCLOSURE_PRIVATE_SECURITYDISCLOSURE_LIMITED_COORDINATEDDISCLOSURE_INTERNAL_ONLY_TEMPORARY
21.2 Rule
Severity, exploitability and live risk SHOULD influence disclosure mode.
21.3 Rule
Disclosure mode MUST be revisitable. A private report may later become public advisory after fix or mitigation.
22. Bug ownership and routing
22.1 Reports SHOULD be routed to owner classes such as:
- canonical core owner
- validation/state owner
- BVM owner
- consensus owner
- witness/proof owner
- economics owner
- governance owner
- ops/tooling owner
- docs owner
- release/genesis owner
22.2 Rule
Every confirmed non-trivial bug SHOULD have one accountable owner class.
23. Fix states
23.1 Recommended states
FIX_NOT_STARTEDFIX_IN_PROGRESSFIX_PENDING_REVIEWFIX_MERGEDFIX_RELEASED_TO_TESTNETFIX_BACKPORTEDFIX_SUPERSEDEDFIX_REJECTED
23.2 Rule
A bug is not fully closed merely because code changed. It SHOULD close only when the relevant scope includes validation, test and release status.
24. Bug closure criteria
24.1 A protocol-relevant bug SHOULD close only when:
- root cause class understood enough
- fix implemented or explicit decision documented
- regression/conformance path updated where appropriate
- release or testnet deployment state known
- communication state updated
- no unresolved ambiguity remains about status
24.2 Rule
“Cannot reproduce anymore” alone is not strong closure for serious bugs.
25. Reward or recognition model
25.1 Program MAY use:
- public acknowledgment
- leaderboard or hall of contributors
- bug bounty / financial reward
- testnet credits or other non-economic recognition
- security acknowledgment with delayed disclosure
25.2 Rule
Whatever model is used, it SHOULD reward:
- novelty
- severity
- reproducibility
- useful evidence
- responsible disclosure
25.3 Rule
Duplicate spam SHOULD NOT be incentivized more than first useful discovery.
26. Testnet-specific bug priorities by phase
26.1 Bootstrap/stability phases prioritize
- genesis/release mismatches
- startup/boot failures
- finality failures
- validation divergence
- BVM deterministic failures
- operator launch confusion
26.2 Adversarial phase prioritizes
- consensus contradiction
- fraud proof gaps
- slashing evidence gaps
- stale witness misuse
- cheap spam/economic abuse
- agent mandate bypass if active
26.3 Integration phase prioritizes
- API mismatches
- toolchain issues
- docs gaps
- upgrade path issues
- compatibility mismatches
26.4 Pre-release hardening prioritizes
- blockers to launch subset
- regression risks
- critical unresolved ambiguities
- readiness evidence gaps
27. Public testnet status communication
27.1 Program SHOULD publish:
- active testnet phase
- known critical/high issues
- current focus areas
- latest release/genesis package ids
- expected operator version
- bug reporting instructions
- current disclosure policy summary
27.2 Rule
Participants SHOULD know whether a problem is:
- already known
- currently critical
- already fixed but not released
- out of scope
- due to older superseded artifacts
28. Release linkage for bug fixes
28.1 Every confirmed serious bug SHOULD be linkable to:
- affected release candidate or release
- fixed release candidate or release
- relevant genesis or network scope if applicable
- relevant corpus or regression cases
28.2 Rule
Bug tracking MUST support scope-aware statements like:
- affects testnet release X
- fixed in candidate Y
- not relevant to mainnet scope Z
29. Program-level metrics
29.1 Testnet program SHOULD track:
- number of reports by class
- confirmation rate
- duplicate rate
- time to triage
- time to reproduce
- time to fix
- count of regression cases added
- current open critical/high bugs
- incident escalations from public reports
29.2 Rule
Metrics SHOULD improve prioritization, not become vanity counters.
30. Bug intake anti-patterns
30.1 Systems SHOULD avoid:
- one giant chat channel for all bug types
- no private security intake path
- reports with no structured fields
- immediate rejection of incomplete reports without triage
- severity inflation without criteria
- duplicate reports handled as independent truth
- fixes shipped without regression case
- public testnet status not telling users what version is expected
- critical known bugs hidden from operators who need them
- treating docs confusion and protocol bugs as identical queue with no routing
31. Escalation thresholds
31.1 The program SHOULD define explicit escalation thresholds, for example:
- any reproducible deterministic divergence -> immediate protocol/security triage
- any consensus contradiction -> incident path
- any suspected unauthorized value movement path -> critical security path
- any genesis/release package mismatch -> release/genesis owner escalation
- repeated operator reports of same anomaly -> possible systemic issue review
31.2 Rule
Thresholds SHOULD be phase-aware but deterministic enough to avoid indecision.
32. Testnet bug intake objects
32.1 Recommended canonical object set
BugReportBugReproductionRecordBugTriageRecordBugSeverityRecordBugDisclosureRecordBugFixLinkRecordBugClosureRecordBugToCorpusLink
32.2 Purpose
These objects allow the bug program to be auditable and structured rather than memory-based.
33. BugTriageRecord
33.1 Canonical structure
BugTriageRecord {
triage_id
report_id
triager_role_class
report_class
final_severity
duplication_status
disclosure_mode
owner_class
incident_escalated
timestamp_unix_ms
}
33.2 duplication_status
- unique
- exact_duplicate
- probable_duplicate
- related_issue
- unknown
34. BugFixLinkRecord
34.1 Canonical structure
BugFixLinkRecord {
fix_link_id
report_id
affected_artifact_refs
fixed_artifact_refs?
release_candidate_refs?
conformance_case_refs?
notes_hash?
}
34.2 Rule
For serious issues, this linkage SHOULD be explicit.
35. BugClosureRecord
35.1 Canonical structure
BugClosureRecord {
closure_id
report_id
closure_class
closure_reason_hash
released_scope_hash?
corpus_update_root?
timestamp_unix_ms
}
35.2 closure_class
- fixed_and_released
- fixed_not_released
- duplicate_closed
- not_a_bug
- out_of_scope
- cannot_reproduce_closed
- deferred
- superseded
35.3 Rule
Closure SHOULD be understandable and auditable later.
36. Operator incident reports vs public bug reports
36.1 Distinction
Operator incident reports often include:
- live state roots
- node logs
- local environment data
- network health data
Public bug reports may be lighter.
36.2 Rule
The intake system SHOULD support both, but MUST not force high-signal operator incident details into vague public forms.
37. Conformance-driven outreach
37.1 Program MAY publish targeted requests like:
- test this BVM boundary
- stress this witness family
- try this operator recovery path
- validate this governance activation edge case
37.2 Benefit
This reduces random noise and increases targeted defect discovery.
37.3 Rule
Targeted campaigns SHOULD mention:
- scope
- expected version
- known risks
- reporting path
38. Public advisories and known issue lists
38.1 Testnet SHOULD maintain:
- known issues list
- fixed issues list
- operator advisories
- release notes with bug references
- superseded artifact notices
38.2 Rule
Known issue lists SHOULD distinguish:
- informational
- caution
- blocker
- fixed but pending release
- fixed and deployed
39. Readiness linkage
39.1 Public testnet bug program MUST feed into readiness by influencing:
- residual risk register
- launch blockers
- conformance corpus growth
- release gating
- operator documentation improvements
- runbook updates
39.2 Rule
If bug intake findings do not influence readiness artifacts, the testnet program is incomplete.
40. Formal goals
AZ-027 urmărește aceste obiective:
40.1 Structured defect discovery
Public testnet participation produces reports that can be triaged, reproduced and fixed effectively.
40.2 Controlled escalation
Serious bugs and incidents are identified early and routed correctly.
40.3 Corpus feedback loop
Confirmed protocol issues improve the conformance corpus and regression protection.
40.4 Readiness evidence generation
The testnet program becomes an engine for readiness, not merely a public sandbox.
41. Formula documentului
Public Testnet Program = explicit phase goals + structured participation + typed bug intake + triage/dedup/severity flow + fix linkage + corpus/readiness feedback loop
42. Relația cu restul suitei
- AZ-024 definește corpusul concret de conformitate.
- AZ-025 și AZ-026 definesc operatorii și ceremoniile de launch.
- AZ-027 definește mediul public controlat în care defectele sunt găsite și transformate în maturitate de protocol.
Pe scurt: AZ-024 testează ce știm; AZ-027 ne ajută să găsim ce încă nu știm.
43. Ce urmează
După AZ-027, documentul corect este:
AZ-028 — Mainnet Launch Window Procedure
Acolo trebuie fixate:
- procedura exactă din fereastra de lansare,
- cronologia finală,
- checkpoints pre-start,
- monitorizarea live,
- condițiile de abort în ultimele momente,
- și trecerea din launch ceremony în early-mainnet restricted posture.
Închidere
Un testnet public bun nu este doar un loc unde oamenii „se joacă” cu protocolul. Este un program disciplinat care transformă comportamentul public, integrările reale și testarea adversarială în: rapoarte utile, buguri reproductibile, fixuri verificabile și mai puține necunoscute la momentul lansării reale.
Acolo începe testnetul public cu valoare reală.