Repository navigation
Added AsyncComponent, and made ReadFile an AsyncComponent - #24
Merged
Merged
Conversation
bergie
added a commit
that referenced
this pull request
May 23, 2012
Added AsyncComponent, and made ReadFile an AsyncComponent
bergie
added a commit
that referenced
this pull request
Oct 10, 2026
…cumented The SPEC.md lockstep rule: no wire-format change lands without its counterpart in both documents. This update brings SPEC.md to parity with the freeze-readiness wire surface (work document #4 updates #24–#38): - §4: the auth response carries runtime metadata and the advertised capability ceiling alongside the granted mask (the external review's allCapabilities vs capabilities distinction) - §5: the plane addressing model (nil = main, client-minted ephemera, node-anchored subgraph instances), the plane lifecycle matrix, and the new commands 0x15 PLANE_DROP, 0x16 PLANE_LIST, 0x17 OP_REJECTED - §6: 0x26 CMD_COMP_SOURCE (the read counterpart of 0x25), and the signature carries description/icon/values/default - §7: the 0x32 chunk gains plane_id; the DATA event payload envelope [src, tgt, value] maps the event stream onto the frame-1 topology; connection framing events (0x0b/0x0c) - §8: 0x40 gains an optional plane_id for ephemeral plane START; 0x47 CMD_PACKET_SEND and 0x48 CMD_GET_STATUS - §12 (new): deliberate omissions with reasons — multi-graph (replaced by the plane model), remote-subgraph packets (planned, post-0x47), network:persist (superseded by CRDT convergence), schema URIs (pending end-to-end design), stack traces, previewurl
AsherBond
pushed a commit
to AsherBond/noflo
that referenced
this pull request
Oct 12, 2026
AsherBond
pushed a commit
to AsherBond/noflo
that referenced
this pull request
Oct 12, 2026
Add a discovery fixture project and a spec suite exercising the fbp-manifest semantics that the local walker in work document noflo#24 must keep: directory-scan component discovery with @name annotation and filename fallback, graph components from the graphs directory with main-graph exclusion, the ignored noflo.components package.json map, scoped dependencies with scope-stripped library names, the noflo- prefix strip, the empty library name for the noflo package, symlinked packages, recursive dependencies-of-dependencies, fbp-spec test association, other-runtime components filtered from registration, package identity faked from the directory name when package.json is missing (to be flipped to skip in the swap), and discovery failure on malformed dependency package.json
AsherBond
pushed a commit
to AsherBond/noflo
that referenced
this pull request
Oct 12, 2026
Implement node_modules discovery locally in src/manifest.js: package walking with scoped and nested dependency traversal, directory-scan component discovery with @name annotations and filename fallback, graph discovery with main-graph exclusion, fbp-spec test association, library-name normalization, and loader-only package registration. Deliberate divergences from fbp-manifest, per work document noflo#24: dependencies without a readable package.json are skipped instead of being faked from the directory name, and the library-name strip is anchored to name prefixes instead of replacing anywhere. The recursive and runtimes registry options are removed: discovery is always recursive and only recognizes the noflo family of runtimes.
AsherBond
pushed a commit
to AsherBond/noflo
that referenced
this pull request
Oct 14, 2026
Implements the additive wire changes decided in work document noflo#4 updates noflo#24-noflo#38, in the codec layer: - Plane addressing: 0x10/0x11/0x12/0x14 gain a nil-defaulted plane_id — one plane per graph instance (main, node-anchored subgraph instances, client-minted ephemera); the sync handshake replies name the plane and epoch so clients learn what they are synced to - New graph-block commands: 0x15 CMD_PLANE_DROP (one-command ephemeral teardown; the main plane is not droppable), 0x16 CMD_PLANE_LIST (the plane tree: plane_id, kind, parent, node id, component name, label), 0x17 CMD_OP_REJECTED (the runtime's explicit no — permission denials per plane and structural rejections alike, carrying the op identity triple so clients revert their mirrors and convergence holds) - Registry: 0x26 CMD_COMP_SOURCE (the read counterpart of 0x25), and the signature carries component description + icon — decided before the sig_hash freeze so the canonical bytes settle once - Execution: 0x47 CMD_PACKET_SEND (plane-addressed input injection — interactive use, remote fbp-spec cases, and the runtime-as-remote- component pattern) and 0x48 CMD_GET_STATUS (run state, uptime, epoch, and the advertised capability ceiling — the getstatus equivalent, answered to late subscribers) - Auth response (0x02) carries runtime metadata (kind, label, version — the runtime:runtime equivalent) and the advertised mask alongside the granted one, so clients tell permission denials from unsupported features - Signature fields kept in lockstep with the publish-time manifest: InPort gains validated values/default options (declared in 1.x heritage, never validated), @noflo/manifest harvests them, the wire PortInfo carries them; the host catalog uses the InPort control option directly and harvests description/icon AsyncAPI channels, schemas, and machine-verified wire examples for every new command; the decode dispatch covers the full surface. The envelope, connection events, and the runtime's plane registry land in the next commits of this wave.
bergie
added a commit
that referenced
this pull request
Oct 15, 2026
Work document #37 phase 2, commit 18 — the manifest-first rung of the WD #24 ladder applied to schema bodies. schemaTableFromNodeModules walks the project's own noflo.json plus its installed dependencies, digest-verifying every body against its manifest pin before it enters the grow-only store; packages without schemas tables contribute nothing, and an empty table answers all-nil. createHost wires the table by default, with schemaTables: false opting out. Manifests are consumed as data, never as package dependencies.
bergie
added a commit
that referenced
this pull request
Oct 18, 2026
…alf of the knob story The runtime's schema table (work document #37 phase 2) loads installed packages' noflo.json schemas tables at startup and serves the bodies by digest through the Two-Step Cache (0x29, with mandatory client-side digest verification and closure completeness) — so shipping the artifact and pinning it in the manifest is what makes the noflo.* vocabulary visible to protocol clients: fbp-client and noflo-ui fetch the catalog and the per-component composed config schemas, verify digests transitively, and know the vocabulary without assuming. - schemas/port-behavior.json: the noflo-namespace catalog — the three knobs with their schemas, class config, kind node; the outport-side scoped flip documented as not overridable - noflo.json: the package manifest's schemas table, pinning the artifact's digest (computed via the fbp-protocol digestSchema over the canonical form) - The package files field ships noflo.json and schemas/ - PortMetadata's schema touchpoint updated: the artifact ships, the manifest pins it, the runtime's table serves it - The runtime spec pins the client story end to end: loading the @noflo/noflo package manifest into a SchemaTable, the digest pins holding, and the served body byte-identical to the shipped artifact The deployment wiring (which installed packages a given runtime scans) stays the deployer's policy per the work document #24 ladder; the per-component composed config schemas (the allOf composition, work document #37) flow from the publish-time manifests as components opt in
AsherBond
pushed a commit
to AsherBond/noflo
that referenced
this pull request
Oct 19, 2026
components/<name>.json — the per-component signature JSON noflo-ui materializes into a project workdir — is now a distinct file kind in the components directory scan (work documents noflo#19 and noflo#24): classified by shape (inports and outports both arrays), registered as a StubComponent factory via StubComponent.fromSignature, one fresh instance per load. A same-named implementation source wins; the sidecar is dropped as documentation of the declared signature, and the entry graduates when the implementation arrives later. Stray JSON keeps the pre-sidecar ignore behavior. Fixtures: a stub-only entry, an implemented sibling with its sidecar, and a non-sidecar JSON.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This adds a new generic
AsyncComponentthat extendsComponent, which components that execute asynchronous I/O can inherit from.AsyncComponentincludes aloadout port so that back-pressure throttling of the asynchronous component can be implemented, see the Throttle component.This patch also modifies
ReadFileto be anAsyncComponent.