Date: 2026-07-06
Do not build the impressive thing first.
Build the thing that proves the language is not vague.
The first useful Hum compiler does not need native code generation. It needs to parse Hum, understand intent blocks, reject broken promises, and emit a semantic graph that humans and agents can trust.
The unifying map for this roadmap is ARCHITECTURE.md. The operating method for moving through it is LANGUAGE_BUILDER_OPERATING_MODEL.md: small proof, written lesson, graph/report/check surface, migration path, then public claim.
Each milestone should name the hard hypothesis it proves, the smallest artifact that proves it, and the public claim that remains forbidden until the proof exists.
Hum should be taught in this order:
task: the unit of intent.why:: why this code exists.uses:andchanges:: the capability boundary.needs:andensures:: preconditions and postconditions.fails when:: typed failure.watch for:: edge cases that become tests.does:: precise execution.- Bindings and explicit mutation.
- Control flow:
if,match,while,loop,for each,for index. - Core operators, ranges, collection literals, and ergonomic expression rules.
- Types and null-free values.
- Effects.
- Ownership:
owned,borrow,change,shared. - Stores and data-structure intent.
- Unsafe boundaries.
- Concurrency and cancellation.
- Performance contracts and benchmarks.
- Layout-sensitive data and resource strategy.
- Compile-time execution discipline.
- Backend lowering.
- Self-hosting only after the compiler can prove itself against the Rust bootstrap.
This order teaches the mental model before the machinery.
Progressive disclosure is a hard roadmap rule: advanced features should appear only after ordinary Hum remains readable, diagnosable, and teachable without forcing every user to learn the entire systems model at once.
Goal: prove Hum source can become structured meaning.
Must do:
- Parse
.humfiles. - Build an AST.
- Validate top-level forms.
- Validate task block names and order.
- Emit a JSON semantic graph.
- Record source spans for every block.
- Check that
does:only changes names listed inchanges:. - Generate test skeletons from
needs:,ensures:, andwatch for:. - Produce human diagnostics and machine diagnostics.
- Preserve
cost:,avoids:, andtradeoffs:in the semantic graph. - Parse top-level
testblocks and link them totests:obligations. - Record research gates for features that touch safety, unsafe, profiles, scheduling, or verification.
- Reserve graph fields for dry-run, rollback, idempotence, telemetry, desired/observed state, numeric tolerance, shape, dtype, device, OS/platform authority, deployment, container, agent-tool, and reproducibility facts.
- Check new feature work against
LANGUAGE_PROJECT_RISK_REGISTER_2026.md. - Expose
protects:andtrusts:as evidence obligations instead of prose.
Must not do:
- native code generation
- generics
- macros
- async
- full borrow checking
- LLVM integration
- external verifier downloads or hard dependencies
Current prototype status:
- Rust bootstrap package exists.
hum checkparses.humfiles and runs first intent checks.hum graphemitshum.semantic_graph.v0JSON.--timingsreports file read, parse, check, and total time.- AST items, sections, fields, params, and diagnostics keep source spans.
- Diagnostics have stable
H####codes in terminal output,hum check --format json, andhum graphJSON. - Known task and test sections get canonical-order warnings.
- Obviously hollow contract-like lines get
H0110warnings before they become fake evidence. - Current examples check cleanly.
hum graphemits source-derived node IDs for files, items, params, fields, sections, and section lines.- Parser spans report one-based first visible columns for line-oriented constructs.
hum graphemits per-file document symbols for editor and LSP adapters.hum graphemits section folding ranges for editor and LSP adapters.fixtures/editorcovers broken and half-written source that must still emit graph JSON and stable diagnostics.hum graphemits sectionline_itemswith text, spans, and meaningful/comment status.hum graphemits task-leveltest_obligationsfromneeds:,ensures:,watch for:, andtests:lines, with exact or conservative canonicalcovers:links to top-leveltestblocks when present.hum graphemits task-levelevidence_obligationsfromprotects:andtrusts:lines, with blame owners plus exact or conservative canonicalcovers:links to top-leveltestblocks when present.hum evidence --format jsonemitshum.evidence.v0, a focused security/trust evidence report over the same graph facts.hum math-obligations --format jsonemitshum.math_obligations.v0, a conservative report of external-validator math obligation candidates;--out-dirwrites individualhum.math_obligation.v0files.hum resource-report --format jsonemitshum.resource_report.v0, a source-declared inventory of resource, layout, and optimization claims fromcost:,allocates:,optimizes:,avoids:, andtradeoffs:.hum test-skeletonsprints Humtestblocks for unlinked obligations without executing code or writing files.hum syntaxemitshum.syntax_surface.v0JSON for editor and tool adapters, documented in SYNTAX_SURFACE_SCHEMA.md.hum syntaxemits section hover metadata so adapters can explain intent blocks from one source.hum syntaxemits a semantic-token legend so adapters share token names before range emission exists.hum syntax --format textmateandeditors/textmate/hum.tmLanguage.jsonprovide the first generated highlighting surface.hum capabilities --format jsonemitshum.capabilities.v0toolchain surface discovery for adapters and agents.hum lsp --capabilities --format jsonemitshum.lsp_capabilities.v0LSP adapter-preview facts without starting server mode.hum doctor --format jsonemitshum.doctor.v0portable setup health facts for repo guardrails.
Deferred beyond Milestone 0:
- broad semantic paraphrase proof for coverage; Milestone 0 now supports exact links plus conservative canonical matching for case, punctuation, filler words, hyphenation, and small section aliases
- Truth Harness-style verifier execution and receipt import wait on schema-first receipts; Hum may export conservative obligation candidates, but it should not depend on an external verifier until result handling is stable
- resource, layout, compile-time execution, interop, and agent-facing power follow decisions/0006-make-resource-layout-and-comptime-explicit.md before entering stable language claims
Milestone 0 is about truth, not speed.
Milestone 0 is also about local safety. Per BDFR_SCOPE_AND_SAFETY_DIRECTIVE.md, this milestone must stay offline, must not execute Hum programs, must not run generated code, must not download packages, and must not mutate files outside approved fixtures.
Milestone 0 is not a public alpha. It is the evidence and semantic graph seed that makes a future alpha coherent.
A credible public alpha must include executable artifacts, an explicit safe profile, basic standard library coverage, formatter and LSP paths, structured diagnostics, offline rebuild support, interop, and evidence outputs such as effect reports, provenance, and SBOMs.
It must also be honest about instability: intentional breaking changes need explicit versions, release notes, and a migration path before users are asked to trust the alpha.
The recommended first alpha profile is offline-tool@0.1: deterministic,
file-only, no-network, no-unsafe local tooling that emits evidence artifacts.
See ADOPTION_STRATEGY_2026.md and OFFLINE_TOOL_ALPHA_0_1.md.
Goal: run a tiny precise subset.
The gate for this milestone is FORMAL_CORE.md. New executable syntax must lower into that core or stay experimental.
Add:
- literals
- local bindings
- core operator table and precedence
- arithmetic
- conditionals
- simple loops
- ranges and checked slices
tryfailure propagationResult- simple records
- collection literals
- interpreter or Cranelift prototype
Checks:
uses:andchanges:- typed failure handling
- basic effects
- profile declarations parsed into the semantic graph
- runtime contract checks in debug mode
- executable unit tests
Goal: make systems safety real.
Add:
ownedborrowchangeshared- move checking
- exclusive mutation
- no hidden allocation
- effect propagation
- allocation, panic, and failure policy hooks for profiles
This is where Hum starts earning the right to talk near Rust.
Goal: make data-structure intent real.
Add:
storeVecMapSetTextBytes- arena allocation
- benchmark harness
- adversarial tests
- pointer-stability diagnostics
map-labresearch trackops-labplan/dry-run/rollback fixturesnet-labtyped address and protocol parsing fixturesnumeric-labexact/approx/unit/tolerance fixturestensor-labshape/dtype/device fixtures- present-key, missing-key, insertion, deletion, resize, and iteration cost profiles
- Bevy-inspired declared-access scheduling experiments
- change-detection fixtures
This milestone should produce the first serious comparison against Rust, hashbrown, Abseil, Zig, Go, Java, and C++ containers.
See STDLIB_STRATEGY.md, STDLIB_CONSTITUTION.md, STDLIB_PRIMITIVE_RESEARCH_2026.md, PRACTITIONER_PAIN_SWEEP_2026.md, OPTIMIZATION_AND_DSA_STRATEGY.md, and ERGONOMICS_AND_OPERATORS.md.
Goal: make unsafe code, foreign libraries, and target portability reviewable.
The gates for this milestone are SECURITY_MODEL.md, UNSAFE_POLICY.md, INTEROP_AND_PORTABILITY.md, and OS_AND_PLATFORM_MODEL.md. Unsafe, foreign, or platform-authority code exists only when the review packet, profile policy, graph facts, wrappers, and tests/proofs are ready.
Add:
unsafe taskforeign- explicit trust boundaries
- provenance checks where possible
- required
needs:,protects:,proves:, andwatch for: - sanitizer integration
- C ABI wrapper strategy
- Rust crate interop through stable wrapper boundaries
- Python extension/module boundary sketch
- Wasm sandbox boundary sketch
- target-tier policy and portability fixtures
- Windows-first, portable-by-design OS capability fixtures
- service/driver/install/update authority modeled as graph facts
Unsafe should feel like entering a sealed lab, not flipping a casual switch.
Goal: make fast feedback, package discipline, and editor integration real before native optimization dominates the project.
Add:
humfmtchirphum lsphum debugprotocol sketchhum migrateresponsibilities for mechanical syntax, edition, and schema upgrades- TextMate grammar sketch
- Tree-sitter grammar design note
- semantic tokens
- LSP diagnostics, document symbols, folding, hover, and code actions
- debugger data model for tasks, tests, promises, effects, and source spans
nectar.tomlnectar.locknectar checknectar migrateresponsibilities for package, lockfile, wrapper, and schema upgradesnectar timings- package graph caching
- semantic graph cache keys
- no-op check benchmarks
- feature compile-time budgets
- runtime profile metadata in Nectar
- reproducible build manifest sketch
- OCI/container metadata sketch
- SBOM and provenance evidence sketch
- deployment-plan and generated-artifact evidence
- numeric/tensor reproducibility evidence
- dry-run and rollback evidence for ops-facing packages
See COMPILE_TIME_STRATEGY.md, NECTAR_PACKAGE_MANAGER.md, TOOLING.md, FORMATTER.md, TOOLCHAIN_2050.md, RUST_LESSONS_2026.md, ERGONOMICS_AND_OPERATORS.md, OPTIMIZATION_AND_DSA_STRATEGY.md, SAFETY_CRITICAL_AND_ENGINE_EDGECASES.md, RUNTIME_PROFILES.md, COMPUTING_LESSONS_SWEEP_2026.md, and CROSS_LANGUAGE_REGRET_LEDGER.md.
Goal: compile useful code without letting a backend own Hum's semantics.
Preferred path:
- Interpreter proof in Milestone 1 for executable semantics.
- Cranelift for the first native backend proof.
- LLVM for mature optimized AOT builds.
- MLIR later for hardware-aware, vector, tensor, sparse, and accelerator paths.
- Custom Hum backend or custom optimization stack only after Hum has measured facts existing backends cannot use well.
The backend comes after Hum IR can preserve intent, source spans, effects, ownership, resource facts, profile restrictions, and debug/profiling provenance. See BACKEND_STRATEGY.md and decisions/0008-adopt-swappable-backend-ladder.md.
Goal: prepare for Hum compiling Hum without making the compiler fragile.
Add:
- stable package/build model
- stable semantic graph schema
- stable diagnostic codes
- golden graph tests
- differential tests between Rust and Hum implementations
- parser fuzzing
- Hum implementations of non-critical compiler tools
- stage0/stage1/stage2 build plan
Do not rewrite the parser, type checker, borrow checker, optimizer, or codegen in Hum until smaller compiler tools written in Hum are easier to understand and at least as trustworthy as their Rust versions.
See SELF_HOSTING_PLAN.md, EXTERNAL_ADVICE_REVIEW.md, and RESEARCH_MAP_2026.md.
Goal: make Hum the easiest systems language for humans, IDEs, debuggers, profilers, and agents to repair correctly.
Add:
hum graphhum explainhum riskshum testshum agent docstree-sitter-hum- VS Code extension
- Neovim/Helix/Zed support path
- DAP debug adapter prototype
- profiler source mapping
- stable diagnostic codes
- repair hints
- counterexample-guided repair loop
Agents should never scrape terminal prose when the compiler can hand them facts.
The first beginner demo should be a tiny task list:
- define a task
- remember tasks
- add a task
- reject an empty title
- show each task
It teaches the mental model without requiring systems background.
The first impressive systems demo should not be a game, web server, or compiler.
It should be a small security-sensitive session store:
- create session
- validate session
- expire session
- resist guessed tokens
- bound memory
- generate tests from
watch for: - produce a semantic graph
- reject an undeclared mutation
That demo explains Hum in one screen.
Every tutorial must show:
- the readable Hum source
- what the compiler understood
- what it checked
- what test or proof it generated
- what machine code path it would eventually choose
Hum should teach programmers to think in promises, capabilities, effects, and measurements.