flowgarage

Artifact and report assembly primitives for FlowBrigade Toolkit workflows.

Summary

Latest Version Unknown
License Apache-2.0
CI Status Unknown
Downloads 0
Last Indexed 2026-07-17 18:29

Installation

nimble install flowgarage
choosenim install flowgarage
git clone https://github.com/puffball1567/flowgarage

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
flowgarage

Source

Repository https://github.com/puffball1567/flowgarage
Homepage https://github.com/puffball1567/flowgarage
Registry Source nimble_official

README

FlowGarage

FlowGarage is a small Nim library for assembling workflow artifacts and reports.

It is part of the FlowBrigade Toolkit.

Status

FlowGarage v0.1.1 is focused on deterministic in-process artifact packaging. Within that scope, it provides:

  • artifact and report bundle primitives
  • validation for bundle, section, and artifact shape
  • source-record helpers for packaging data from other FlowBrigade Toolkit components
  • Markdown, JSON, and HTML rendering
  • non-throwing build outcomes for FlowCaptain-style integration
  • package manifests for rendered outputs
  • publisher extension points for optional storage or delivery plugins
  • plugin manifests and capability declarations
  • examples, tests, design notes, and benchmarks

v0.1.0 Scope

The first release is intentionally narrow and complete:

  • accept an in-memory GarageBundle
  • validate bundle shape before rendering
  • convert neutral source records into report sections
  • render a bundle to Markdown, JSON, or HTML
  • describe rendered outputs with a small package manifest
  • return validation and publisher failures as data
  • expose publisher callbacks for external storage or delivery packages
  • keep the core free of database, filesystem, cloud, and network dependencies

FlowGarage does not persist files, upload artifacts, run jobs, or analyze metrics in v0.1.0. Those responsibilities belong to optional plugins or other FlowBrigade Toolkit components.

Example

import flowgarage

var bundle = initGarageBundle("daily-report", "Daily Report", summary = "Workflow output package")
bundle.sections.add(section("summary", "Summary", "All required work completed."))
bundle.artifacts.add(artifact("metrics-json", "Metrics JSON", akDataset,
  "application/json", "{\"ok\":true}", metadata(@[("source", "flowsurveyor")])) )

let outcome = build(initGarageBuildInput(bundle, @[rfMarkdown, rfJson]))
if outcome.ok:
  echo outcome.outputs[0].content
else:
  echo outcome.errors

For callers that want stable output names without file-system writes:

let packed = packageWithManifest(bundle, @[rfMarkdown, rfJson])
if packed.ok:
  echo packed.package.manifest.toJsonString()

Integration

FlowCaptain should use build(input) -> GarageOutcome as the integration boundary. The outcome contains ok, outputs, and errors, so callers can reject invalid bundles or missing publishers without relying on exception control flow.

FlowLogbook can provide execution records, FlowSurveyor can provide analysis results, and FlowGarage can package both into a report bundle through neutral GarageSourceRecord values. FlowDependency and FlowWorkRunner remain upstream graph and execution components.

Extension Points

The core package includes small extension points so external packages can add capabilities without changing the report core:

  • plugin manifests describe optional packages and capabilities
  • publisher callbacks deliver rendered outputs to a named target type
  • publisher errors are converted into data results

Plugin-side responsibilities can include local file writes, SQLite or object storage persistence, signed audit delivery, and controlled delivery to an application-specific reporting surface.

Requirements

FlowGarage only depends on Nim's standard library.

Development

nimble test
nimble examples
nimble bench
nimble leak

nimble leak builds the ARC release leak probe and runs it under Valgrind, failing on definite or indirect leaks.

Intellectual Property Notes

FlowGarage uses general, well-known concepts: report bundles, source records, artifacts, metadata, format renderers, callback publishers, and validation-before-output boundaries.

It does not copy workflow engine code, report generator internals, storage adapter code, or application GUI implementations from other projects.