Skip to content

Releases: noeta-lang/noeta

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 01:07

Features

  • ext-abi: To joins the built-in trait names an extension may advertise
  • lang: impl To<Target> for Source, the conversion declared on the source

Fixes

  • types: Equatable overloads no operator
  • check: a conversion produces its target, and nothing else

Documentation

  • errors: link the To section by the anchor the site generates
  • ext-abi: give 27 a changelog entry in the shape the gate reads
  • errors: a conversion produces its target, and cannot fail
  • traits: To in the trait table, and the claims it made incomplete
  • errors: converting into a type you do not own

Refactoring

  • check: one conversion registry, keyed by the relation it declares
  • types: one row per built-in trait, spelling only what is unusual

Housekeeping

  • release: bump workspace version to 0.7.1
  • types: census rows carry field names, not nine positions
  • types: pin every column of the built-in trait table, and force a new trait into it
  • check: keep the conversion helper clear of the allow it displaced
  • conversion: the To corpus — both call paths, the conflict, the signature rule

Other

  • close To<Target> and the built-in-trait seam, file the column gate
  • para/db swallows the cause of a failed connection
  • To<Target>, and the built-in-trait seam to settle first

Full changelog: v0.7.0...v0.7.1

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 22:21

⚠ Breaking changes

  • stdlib: count is cardinality everywhere; the popcount is count_true

Features

  • census: cover the name-dispatched surface, and the two defects it found
  • census: a width-door census, and the three defects it found on first run
  • check: warn when a u64's width is discarded into a dyn position (E0078)
  • iter: the eight terminals the eager list had and the lazy pipeline did not
  • http: request signing and verification (RFC 9421)
  • http: a per-client cookie jar
  • http: follow redirects above the seam, and let a client configure it
  • stdlib: declare the traits five native types already honor
  • traits: a standalone impl may implement any built-in trait, and a type's own compare orders it everywhere
  • collections: one declared ordering behind sorted, min and max
  • check: min/max order by Comparable, so a generic body can reach them
  • reflect: describe immutable closure-valued top-level bindings
  • stdlib: a vector kernel bundle does geometry at every width
  • types: range-checked narrowing conversions — checked_to_u8(): ?u8
  • fmt: the safety gate compares programs, not a rendering of them
  • host: a cancellation reaches work blocked outside the interpreter
  • cli: the three registry/add/publish doors that existed on one side only
  • lang: a field can leave the serialized shape
  • lang: a class decodes from JSON
  • lang: name every declared conversion after its source
  • lang: one From conversion per source type, resolved statically
  • lang: Self names the type in hand, in any type body
  • manifest: a registry scope takes what an identity's company half takes
  • manifest: [package] root declares the segment modules derive under
  • traits: a .noe trait declares type parameters, not associated types
  • modules: use _self_.x imports this package's own modules
  • init: cut the scaffolded SYNTAX.md 8.6x and rebalance AGENTS.md
  • cli: add noeta docs — search and read the embedded guide offline

Fixes

  • width: compute at the element width, not the erased word, on a boxed list
  • bulk: compare abs/clamp at the element width, not the erased word
  • stdlib: join a u64 under the render hint, on both engines
  • reductions: fold checked_sum at the element width, not the erased word
  • json: a Map<u64, _> serializes in its key order, not its storage order
  • iter: a lazy bool reduction gives the eager one's refusal, not a second wording
  • runtime: a native type that declares Comparable actually compares
  • check: an unknown type says what you meant, and stops rendering as a riddle
  • http: a stream carries the client's cookies and its signature
  • otel: cap each instrument's attribute-set map at the OTel cardinality limit
  • conformance: make the async corpus true on a real host, not only under the sandbox clock
  • check: a member binding on a synthesized built-in says to drop it
  • registry: resolve every stringly-typed cross-reference at assembly
  • check: a refused @derive names the routes that would work
  • conformance: find wasmtime where its installer puts it
  • hints: compose a render slot for an instantiation a generic body builds
  • playground: the smoke fixture propagates its ?, as its type says
  • conformance: every oracle sweeps the same corpus, in the same program
  • conformance: check every // expect: header on both engines
  • hints: resolve a render hint where there is no call frame
  • check: pin a generic call's type argument through a literal and a composite
  • check: a collection literal argument must not be typed against an erased parameter
  • stdlib: one message when a min/max cannot order its elements
  • check: refuse .as<iN>()/.as<f64>() — a width is not a narrowing target
  • bundle: pin the ordering-resolution op in the layout digest
  • hints: carry a u64's signedness through a type parameter
  • conformance: a --file that matches nothing is a typo, not a pass
  • compiler: a hoisted load must not drag its line entry out of the loop
  • ext-abi: refuse to assemble a malformed push_hint_args declaration
  • display: the REPL echoes a u64 past bit 63 unsigned
  • cli: the AOT compose tests are jit-shape tests, and now say so
  • json: a LiveView binding pushes its u64 unsigned, from the type it was bound under
  • cli: the Cranelift-free build compiles no AOT composition, and a lint now says so
  • rc: destroy an owned argument temporary after the call
  • display: render a @packed map key's u64 field unsigned, at every depth
  • bench: decide tier-1 coverage on instructions retired, never print an empty decline list
  • vm: stop -x and !x stranding a heap-boxed int
  • order: order a u64 past bit 63 unsigned at every door a program sees
  • json: write a u64 past bit 63 unsigned at every JSON door, and read it back
  • display: render a u64 past bit 63 unsigned at every display door
  • pm: name the dependency a publish refuses, and the scope member it lives in
  • ide: a resolved bare variant pattern is not a local binding
  • lexer: four infix operators that could not lead a continued line
  • pm: a tree may not declare a built-in scope as its own identity
  • lower: a native type named through its module resolves to its identity
  • reflect: fields_of reports what the call site could have read
  • cli: a directory walk stops at a nested package
  • conformance: link every case, and gate the wiki's toml blocks
  • test-temp: make the dead-address tests dead by construction
  • ide: gate guide retrieval on a relevance set, and fix what it caught

Performance

  • registry: keep the cross-reference sweep off the heap, and re-baseline startup
  • re-record the baseline — < on two ints no longer round-trips through f64
  • compiler: hold a top-level binding in the entry frame's registers
  • compiler: skip the argument drop for a provably destructor-free temporary
  • compiler: release the stale global read at an in-place self-update
  • re-baseline — noeta docs costs ~0.8% of startup, and buys back 300 KB
  • re-record the instructions-retired baseline on this machine

Documentation

  • backlog: close the bulk compare-vs-compute width row
  • backlog: close the two rows fixed today but left open
  • backlog: close the ignored-compare row — stale on every claim
  • backlog: close the unresolved-annotation cascade row
  • backlog: file the unresolved-annotation diagnostic cascade
  • edge: a redirect target is a host the allowlist has to name
  • backlog: close the HTTP client residuals row
  • agents: ablate every test, and commit before you do
  • traits: retire "derivable" where it meant "has a recipe"
  • plans: file the render-hint arc's one open position, refresh the perf frontier
  • agents: name the checks that exist only in CI
  • backlog: close the body-built composite row
  • hints: state what a u64 through a type parameter reads
  • reflect: point at construct's real heading
  • agents: two process-hygiene edges, and what three concurrent gates cost
  • agents: name the two linker failures that are really resource exhaustion
  • backlog: rank the performance list by measurement, not by hope
  • bench: re-measure the cross-language field at 57091de
  • backlog: strike the two rows that shipped in the para repos
  • backlog: re-point the CRDT row at para/p2p, where every CRDT lives
  • plans: every backlog row states what would start it, or is struck
  • fix: point the Self cross-reference at an anchor that exists
  • arc: the From gate had not fired the way this audit claimed
  • backlog: the From row describes the rule that shipped
  • codify the docs-style rule in AGENTS.md, and gate its mechanical half
  • describe what the language is, not what it was
  • cli: say that noeta serve expects TLS to be terminated upstream
  • agents: trim AGENTS.md to the non-derivable half; add CLAUDE.md

Refactoring

  • check: name the render-slot feed map and fold its owner into the edge
  • vm: land the render-hint runtime state in its own module
  • ext-abi: one ABI bump for the render-hint seam, not three
  • ext-abi: a kept render hint is a PushHint, and can only serialize
  • ext-abi: move the render hint beside the encoder, MapKey and value tree it describes
  • compiler: one worker reserves a type's method prototypes

CI & build

  • docs: run the docs style gate in CI, not only at the merge gate

Housekeeping

  • async: rendezvous with the isolate instead of gating it on a timer
  • release: bump workspace version to 0.7.0
  • upgrade: wait out the ETXTBSY window before exec'ing the copied binary
  • docs-gate: collapse the toolchain-pin condition into one if
  • docs: gate that a copied dependency snippet names this release
  • drop two scratch probe files swept in by git add -A
  • check: assert what E0078 must NOT say, and put its variant on the tail
  • docs: report the margin of every top-1 retrieval decision
  • check: pin the help that names count_true
  • http: drive both of the async descriptor's bodies, not only the fallback
  • otel: pin what the overflow bucket preserves, per instrument kind
  • conformance: make the unordered-Duration case actually discriminating
  • traits: pin that a via: derive's order reaches every observed door too
  • conformance: drive the identity-order case through the composed channel
  • fuzz: drop the reduction-element reason the census can no longer see
  • reflect: pin parameter attributes on a described value binding
  • gitignore: ignore gate run logs
  • drop a gate run log swept in by git add -A
  • oracle: catch a destructor that never ran

Other

  • audit the gates, and correct th...
Read more

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 09:15

Features

  • diagnostics: colour the abort traceback with its diagnostic
  • serve: colour the worker run tail
  • diagnostics: colour the two remaining terminal sinks
  • diagnostics: colour diagnostics when they are going to a terminal
  • abi: declared commands can offer short flag aliases (ABI 17)
  • cli: std's dev-tier verbs become replaceable commands (ABI 16)
  • repl: interactive prompt on a TTY — highlighting, completion, history
  • cli: noeta watch-scope becomes noeta advisory watch, defaulting to the lockfile
  • ide: byte-offset form of the snippet highlighter

Fixes

  • check: a label binds on a method call, not just on a function call
  • repl: meta-command completion on an indented line

Documentation

  • manifest: point noeta migrate at the section that still exists
  • cli: the serve entry is any callable fetch, not only a fn
  • the REPL's interactive terminal behaviour
  • cli: group the command list by where each verb comes from

Refactoring

  • runner: one way to print a compile failure and get its exit code

Housekeeping

  • release: bump workspace version to 0.6.0
  • repl: drive the interactive prompt on a real pty

Full changelog: v0.5.1...v0.6.0

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 06 Aug 06:32

Fixes

  • check: a @test is white-box over its own package, not its dependencies'

Housekeeping

  • release: bump workspace version to 0.5.1

Full changelog: v0.5.0...v0.5.1

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 05 Aug 11:21

Features

  • lang: a struct's fields are already public, so pub on one is refused
  • check: a declared static is type-only, and dyn is the dispatch
  • tooling: pub on a method reaches fmt, the editors, and the docs
  • lang: a method is private by default, in every type kind
  • doc: an extension's @-directives are documented
  • doc: a .noe type's methods and impls reach its documentation
  • doc: the API reference documents a unit's traits, enums and types
  • abi: a native trait, enum and fielded type can carry its own prose
  • tooling: static reaches the editors, and one word names "takes no receiver"
  • lang: a trait may declare a method static, and receiver-ness stops being a survey
  • ide: a derived receiver is a fact the source never spells, so show it
  • p2p: a host can name an exact data dir for the para.p2p node
  • check: a bounded type parameter may sit in receiver position

Fixes

  • diagnostics: append-only is the rule, so there is no break to version
  • bundle: a diagnostic code inserted mid-catalogue is a wire break
  • diagnostics: a new code is appended, so no .noeb is mis-decodable
  • ext-abi: every intra-doc link resolves, and a gate step keeps it that way
  • mcp: a native trait is a trait, constrained or not
  • ide: the ghost modifier follows pub, which is outermost
  • derive: a synthesized method is a trait implementation, so it is public
  • abi: a native trait's namespace is held to its unit's root
  • ide: a ghost modifier anchors on fn, not on the attribute above it
  • check: Self is the receiver's type, through a bound and through dyn

Documentation

  • abi: the authoring walkthrough teaches the published dependency
  • vm: Unsupported is a coverage regression, not a subset boundary
  • vm: a compile failure is a coverage regression, not an unsupported fixture
  • two M1.0 claims that stopped being true
  • abi: the receiver constraint row names its third case

Housekeeping

  • fixtures: a fixture that lies about its return type proves nothing
  • vm: an unannotated parameter was pinning a destructor check no real program needs
  • eval: a fixture without a signature is not a program the checker would accept
  • visibility: the VM and eval fixtures say pub where the rule now asks
  • visibility: the embedded programs say pub where the rule now asks
  • visibility: a refusal fixture shows the refusal it is about
  • expand: a generated method is called from outside, so it says pub
  • parser: the demo snapshot follows the demo
  • embed: a native trait's implementor says pub like any other
  • fuzz: the census follows the rename, it does not gain a rejection
  • ide: rustfmt the modifier-order test
  • check: the crate's own inline sources say pub where the rule now asks
  • visibility: the rule is pinned at every spelling it could leak through
  • ide: pin the ghost modifier against async and a @tier directive
  • ir: rustfmt the A2 lowering rewrite

Other

  • crates-io: publish the contract crates, and patch them like a git pin
  • one table for every @name, and a binding is what enables it

Full changelog: v0.4.5...v0.5.0

v0.4.5

Choose a tag to compare

@github-actions github-actions released this 04 Aug 08:10

Fixes

  • aot: bench is the same switch as test, and it was still on
  • test-temp: a drawn port is claimed until its server binds, not until the probe closes
  • check: a package whose only files are migrations is checked, not "unreadable"
  • check: the checker's program is the loader's program
  • check: resolve --target against the directory it is given

Documentation

  • pipe: say that a sole-argument pipe needs no parentheses

Refactoring

  • project: the id layout has no callers outside its own file
  • project: the boundary is the point — drop the re-export, narrow the surface
  • project: extract noeta-project — noeta check stops depending on the editor crate

Housekeeping

  • release: bump workspace version to 0.4.5
  • capture: a stdio-protocol child's stderr is a file, not a pipe nobody reads
  • socket: a failing suite quotes what the server said, instead of discarding it
  • async: a race asserting an order needs a margin a loaded machine can honour
  • fuzz: retire the project oracle's one excused divergence
  • cli: the two divergences, pinned at the command line
  • fuzz: a check-vs-run differential over generated projects
  • agreement: pin the two check/run divergences the census found

Full changelog: v0.4.4...v0.4.5

v0.4.4

Choose a tag to compare

@github-actions github-actions released this 03 Aug 13:44

Features

  • add: resolve the registry's current version when no source is given

Documentation

  • packages: one onboarding page, not two that drift apart
  • release: a green dispatch is not a green deploy

Housekeeping

  • release: bump workspace version to 0.4.4
  • readiness: one wait for a spawned server, on a load-scaled budget

Full changelog: v0.4.3...v0.4.4

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 03 Aug 11:09

Fixes

  • check: an illegal module path is a derivation, so check reports it
  • expand: DirectiveCtx::source_dir is a path, not a document URI
  • check: a migrations/seeds program is not a module, for every surface
  • check: a binding in scope wins over a module handle

Documentation

  • reflection: the two self-links point at the whole heading again

CI & build

  • docs-site: build noeta so the diagnostics reference exists
  • the docs site's own link gate runs before a tag, not after

Housekeeping

  • release: bump workspace version to 0.4.3

Full changelog: v0.4.2...v0.4.3

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 03 Aug 08:04

Features

  • fuzz: the AOT differential over generated programs
  • fuzz: a type-directed generator, and the false-positive oracle it unlocks
  • fuzz: the tier-1 JIT differential over generated programs
  • fuzz: a leak/RC oracle over generated programs
  • fuzz: the runtime-rejection census, and a gate so it cannot grow in silence
  • fuzz: an execution oracle — what the checker promises vs what running does

Fixes

  • loader: α-rename every binder a merged module holds
  • loader: a merged module's bindings carry its identity
  • loader: merged module statements run in their own module's order
  • fmt: a ? on a ? keeps its parentheses, and the precedence table gets a matrix
  • check: an enum variant takes the fields it declares
  • check: a scalar match with no catch-all is provably non-exhaustive
  • check: assert takes a bool and at most a message
  • check: a container is indexed by its key type, and for needs something iterable
  • check: a non-callable value is not callable, and a module has the functions it has
  • check: a condition must be a bool, and a literal pattern must be able to match
  • check: && and || take bools
  • check: none is an Option, not a value of whatever type is expected
  • check: an ordering needs one type; a function value and a tuple are closed
  • check: two declarations of one name in one file collide (E0020)
  • check: a for (a, b) pattern needs a tuple element with a position per name
  • check: a declared type is not callable
  • check: the hoisted-globals fallback licenses a deferred reference, not an early one
  • bundle: cap the inflate so a payload cannot expand without bound
  • fmt: comments inside ${…} holes survive, and stay in their branch
  • fmt: a trailing comment belongs to its region, not just its line
  • fmt: a spread list is not the same as one concatenated with something
  • fmt: the placement oracle counts only statement else if
  • fmt: two comment relocations, both from an unwalked region
  • fmt: the placement oracle measures AST blocks, not braces
  • fmt: a resugared conditional is not brace-delimited either
  • fmt: an arrow closure is not self-delimiting

Documentation

  • contributing: the census, the leak oracle, and the tier-1 differential
  • fuzz: name the real check-vs-run surfaces instead of a placeholder link
  • contributing: structured fuzzing joins the testing architecture

Refactoring

  • fmt: the formatter's invariants become a shared oracle

CI & build

  • release: a release tells the para repos to bump their toolchain pin

Housekeeping

  • release: bump workspace version to 0.4.2
  • loader: two dependency packages may each bind the same name
  • fuzz: ungrouped hex digits in the jit seed
  • rustfmt the new checker gates and the run oracle
  • fuzz: the .noeb container, and what the compiler assumes
  • fuzz: the formatter's oracle runs over generated programs in the gate
  • fuzz: a structured generator of valid Noeta programs

Full changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 02 Aug 15:55

Features

  • perf: gate on instructions retired, because wall-clock cannot gate here

Fixes

  • editors: re-record the vscode test-workspace lock hash it had drifted from
  • perf: the tier-1 state probe must count OSR windows, or it reports native code as none
  • loader: say why the retry's path derivation cannot report anything
  • ext-abi: re-point the constraint-coverage anchors the lazy seams moved
  • perf: the declined-op list never reached the report
  • perf: name the fix that matches the cause when perf cannot count
  • loader: the walk-coverage gate has an opinion about the reflection node
  • host: a retry backoff has to reach the door that actually waits

Performance

  • gate: re-baseline after the list_len inline
  • value: list_len is inline(always) -- it is Op::Index's bounds check
  • tools: attribute a binary's load-time relocations to the crate that owns them
  • gate: re-baseline after region-scoped OSR compilation
  • db: the workspace package map is built once, not once per source
  • parser: one ${…} hole grammar per parse, not one per hole
  • jit: a prototype collects one OSR window per hot loop, not one per prototype
  • gate: re-baseline after the MCP corpus blob
  • mcp: the embedded corpus costs two relocations, not one per file
  • jit: a back-edge promotion compiles the loop's window, not the whole prototype
  • gate: re-baseline after the per-parse grammar build
  • gate: re-baseline after the clap fast path
  • parser: the grammar is built once per parse, not once per site
  • cli: the clap command tree is built once, and a flagless run never builds it
  • gate: re-baseline after outlining the cold opcode arms
  • vm: outline Op::CallMethod's four receiver-dispatching routes
  • vm: outline the cold opcode arms so the hot ones allocate registers better
  • gate: re-baseline after the lazy native-reflection seam
  • gate: re-baseline after the tier-1 and heap work, and move the map row's band with its engine
  • loader: a script no longer parses the neighbours it cannot name
  • value: the map hasher mixes a word per round, not a byte
  • check: a native type's built-in traits answer from the registry, on the question
  • reflection: a native declaration resolves on demand, not into every artifact
  • jit: the string/map loops sustain tier 1
  • heap: a leaf is never registered with the cycle collector
  • vm: set_reg inlines again — the dispatch loop outgrew LLVM's budget

Documentation

  • release: push the branch, wait for green, then tag
  • db: why workspace_editions is not memoized, and what would change that
  • jit: the forced sweep offers every loop header, not just the first
  • architecture: name the native-reflection seam in the crate map
  • ast,loader: the lazy native-reflection seam and the sibling-parse deferral
  • RELEASE.md — what the tag automates, and what it does not

Refactoring

  • reflect: tidy the collapsed dispatches, and record where it stopped
  • reflect: thirteen intrinsics become one node with a fieldless kind

Housekeeping

  • release: bump workspace version to 0.4.1
  • jit: a runtime ablation mask, so a regression can be attributed without a build per variant
  • perf: remove the temporary phase probes
  • vm: the two tier-1 fixtures that Stringify/LoadConst made stale
  • cli: the declined-loop fixture uses a list method, not a map loop
  • perf: drop a no-op type assertion left in the executable-bit test
  • perf: rustfmt the ratchet manifest test; complete the exit-2 list
  • os: the sandbox's model of try_write, held to the real host
  • reflect: the census that closes the class

Full changelog: v0.4.0...v0.4.1