Repository navigation
The second stable release. Seats hand structured data on as typed reply fields, and the classics pack becomes blocks:
a review sizes itself to the change, and build_then_review builds a request and fixes what its review upholds.
Install or upgrade
curl -fsSL https://raw.githubusercontent.com/dvalnn/maestro/next/install.sh | shTo pin this release, put MAESTRO_VERSION=v0.2.0 before sh. Manual steps are in
INSTALL.md.
Upgrade notes
- Install maestro and the classics pack together, and rebuild your own packs. A pack built for
v0.1.0asks for
SDK^0.1.0, which this release does not satisfy, so it is refused with a message naming the pack. The classics
bundle imports@maestro/host-repo-sdk/yaml, which av0.1.0binary does not embed. The IR is now1.2: this
release reads1.0to1.2, and an older maestro refuses IR this one writes. The install command replaces the
classics pack; a hand install must extractclassics-*.tar.gzagain. - Finish or discard
v0.1.0classics.panel_reviewconcerts before upgrading. A resume runs the recorded graph,
whose code node callssurvivorsOf, which the pack no longer exports. - Give the four new classics profiles a runtime.
classics/tester,classics/deep-lens,classics/top-lensand
classics/cross-lenseach needprofiles.classics/<name>.runtime; the starter config in INSTALL.md lists all ten. panel_review's andbuild_then_repair's agents moved. A seat key names the innermost composition holding the
seat: rebind the review's seats asseats.classics/panel/<seat>, notclassics/panel_review/<seat>, and the builder
asclassics/build/builder(classics/test_first/builderunderclassics.build.testFirst), not
classics/build_then_repair/builder; pre-flight refuses the old keys. The review's nodes sit underpanel/, as in
panel/consolidator, and the builder isbuild/build, so a--node, aMAESTRO_STUB_OUTPUTSdirectory or a script
naming the old ids must follow.- Classics' review contracts are typed reply fields, not files. The lens replies
findings, the skepticrulings
and the consolidatorverdict;findings.json,verdicts.jsonandverdict.jsonare gone, and the consolidator, a
work seat that no longer approves or rejects, writes noreview.md.Findingsis a bare list ofFinding
{ id, where, issue, cites }, with nocleanorblocking: every finding rejects its lens.Verdictsis renamed
Rulings.Verdictis{ criteria, upholds }, each criterion{ id, met, evidence, shownBy }, each upheld finding
named<lens>/<id>, with noapprovedorblocking. A shadowed consolidator profile drops its approve/reject and
review.mdlines. panelis a subcomposition, andround,survivorsOf,upheldandrulingLineare gone. Build it with
use(panel, { change, spec, session?, earlier?, names?, brief? }, { params }), its paramslenses,skeptics,
consolidate,groundsandchecks; it needs asessionwhenconsolidateis false. It ends in aTally,
{ lane, session, upheld }, withdeliveredand thereviewrendered from the verdict beside it. A lens alone is a
lenscall, its skepticchallenge; read held findings withheldOfandtallyOf.classics.panel_reviewends in thatTallyand settlesrejected(exit 3) while a finding is upheld, the upheld
findings its rejection outputs. A script that read itsverdict.jsonreadsupheldandreviewinstead.- The scout's
answer.mdoutput is gone: read itsanswersreply field, one entry per question, eachgrounded,
orunsurewith what ismissing. - A file attachment mounts at
/in/<name>.<ext>,<ext>its source's extension, and its earlier copy at
/in/previous/<name>.<ext>; a directory and a source without an extension mount as before. A task, hint or check
that names/in/<name>for a file must add the extension. - The classics
profiles/writing/directory and thewritingattachment are gone. Each classics seat carries its
guidance ininstructions, which now takes a list of files;builderandtestershareprofiles/testing.md. A
profile'sskillsfield stays refused, now with the fix to move its guidance intoinstructions. The pack's
skills/holds the text those instructions are written from, and no profile reads it. A shadow copied from
v0.1.0'sprofiles/keeps its ownwritingattachment; copy the pack'sprofiles/again to shadow it. - A used composition's params sit under the pack that declares it.
classics.<composition>.<param>now reaches
that composition under any root, a bare.maestrofile included, where it used to be ignored. A-ckey that
reaches no composition the concert uses, matched by<pack>.<composition>, is refused asCFG.unreached(exit 2);
the same key from a file or preset is ignored, its value still schema-checked. - A pack is refused when one of its compositions declares another pack's id. A bare file may still re-export one.
Added
- Typed reply fields.
reply: { <name>: <type> }onseat(name, opts)or on a call declares fields of the agent's
envelope beside itsreport. The host checks each against its type, with the envelope's correction turns, and each
valid field is an output of its name; the agent writes no file for it. A field holding an artifact, or named after an
envelope key, an agent port or a declared output, is a build error. The stub harness gives each field the placeholder
of its type, or the JSON in<field>.jsonunderMAESTRO_STUB_OUTPUTS. relayon a seat call,{ <name>: ref }, inlines each value in the task under## <name>: a string as it is, a
Markdown output as its text, any other typed value as YAML, a multi-line string as a block. A relay named after an
attachment or an agent port, or holding any other artifact, is a build error: attach it instead.yamlOffrom
@maestro/host-repo-sdk/yamlrenders a value the same way.ls --jsongives each instance's typed outputs as.outputs, beside.reports: the reply fields an agent
returned and a code node's values, without opening the lane. The host also stages an agent's fields in
staged/outputs.yaml, and the inspector shows a settled agent's one-line summary.- Sightings. An agent's report may list
sightings, each{ path, text, cites }: a defect outside its task's
scope, kept with the report. A classics lens reports such a defect as a sighting, never a finding. changeset(v, { since })keeps only the patches aftersince, an earlier version of the same lane. Such a
changeset servesapplyand attachments inside a concert, notcs showorcs apply.- A composition's
packoption names the pack whose config keys reach it. classics.build_then_reviewbuilds the request, repairs it until the checks pass, reviews it bytiered_review
and fixes what the review upholds, up tomaxFixesrounds, leaving a patch series. It settlesrejected, the series
kept, while the last review upholds a finding:
maestro perform classics.build_then_review --request "<what to build>" -c classics.build.testFirst=true.classics.review_changereviews a revision range or a change bytiered_review:--request, and exactly one of
--revsand--change.tiered_reviewcounts the changed lines of the changeset and seats one tier's lenses:lensfor small, to 200
lines,deep-lensfor medium, to 800,top-lensfor large, to 2000, andtop-lenswithcross-lens, a second
model, above.classics.tiered_review.floorsets the lowest tier. Each lens rules on the checklist sections the
changed paths call for.build,test_firstand thetesterseat.builddelivers a spec with one builder, or, under
classics.build.testFirst, throughtest_first: a tester onclassics/testerpins a few firm tests at the spec's
public seam and replies amap(TestMap), each pin with what its testmisses, and a builder extends its lane to
pass them, replying the tests it overrules, with why, inoverrules.fix_until_clean, a loop ofrepair_until_greenandtiered_review: while theTallyupholds a finding, a
builder fixes it in its session and the round runs again, up tomaxFixestimes. It takes the portslane,
session,specandbrief, and the paramsmaxFixes,checksandgrounds.- The review moves
challenge,fixandtally, exported for compositions built on the pack, with the types
Finding,Upheld,Tally,Brief,TestMap,Overrule,OverrulesandAnswers.@maestro/classics/code
exports the code-node functions alone, so a composition re-exports them in one line. repair_until_greentakes afixparam: atarget.checksname run before each check and recheck, such as a
formatter, so a miss a script can fix costs no repair round.- Classics recipes: fix ladder, lens fusion, ruling vote, audit sweep and plan review, in
packs/classics/src/recipes.tsto copy from; the pack does not export them.
Changed
- An agent's task holds what it must read: its text, then each relay, then its attachments, the graph's then the
profile's, as a one-level tree with each file at the path it mounts and its size. The frame no longer lists the
attachments, and pretty-prints each JSON schema of its## Replysection. classics.build_then_repairbuilds throughbuild, soclassics.build.testFirstputs tests first there too.- A review that no lens delivered is rejected, in every entry and in
panel, with the reason "no lens delivered a
review". - A classics finding must cite a guideline the lens received: a checklist item, an attached doc or one of the
repo's own standards. A nit cites none, so it is no finding; the skeptic and the consolidator rule one that cites none
as not holding. - The panel's lenses rule on the checklist sections
tiered_reviewuses:correctnesson correctness, design and
smells,specon spec,testson tests. - A later review round's lenses rule first on each finding the earlier round upheld, given as the
earlierport, so
rounds converge on what was upheld. - The review is rendered from the consolidator's verdict as
## Upheld,## Not metand## Met. A criterion
ruled not met is upheld asconsolidator/<id>for the fix, unless an upheld finding it names inshownByalready
shows it, so no failure counts twice.
Fixed
- A config key for a classics composition is no longer ignored under a root from another pack or a bare file.
- A consolidator that forgot
review.mdno longer loses its verdict: it writes no file now. - A lens skipped because an input it reads failed, a relay included, no longer passes for a clean review: a review
holds its findings only once every input its lenses read is in. - A lens name the panel has no task for fails the review.
- INSTALL.md and the maestro skill follow this release: config keys may change between releases, a used
composition keeps its keys under a bare file, and a pack may ship askills/directory.