8000 Added AsyncComponent, and made ReadFile an AsyncComponent by rybesh · Pull Request #24 · noflo/noflo · GitHub
[go: up one dir, main page]

Skip to content

Added AsyncComponent, and made ReadFile an AsyncComponent - #24

Merged
bergie merged 3 commits into
noflo:masterfrom
rybesh:async-component
May 23, 2012
Merged

bergie merged 3 commits into
noflo:masterfrom
rybesh:async-component

Conversation

@rybesh
@rybesh rybesh commented May 22, 2012
Copy link
Copy Markdown
Contributor

This adds a new generic AsyncComponent that extends Component, which components that execute asynchronous I/O can inherit from. AsyncComponent includes a load out port so that back-pressure throttling of the asynchronous component can be implemented, see the Throttle component.

This patch also modifies ReadFile to be an AsyncComponent.

bergie added a commit that referenced this pull request May 23, 2012
Added AsyncComponent, and made ReadFile an AsyncComponent
@bergie
bergie merged commit 94b6204 into noflo:master May 23, 2012
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0