Output & templates
Output templates as reusable, named definitions of how a schedule renders — page setup and tiling, bar and milestone styles, palettes with print-safe and monochrome variants, the timescale, and the annotation layer.
The working view and the published artifact are different objects. What is on screen is arranged for the person editing the schedule; what goes into a monthly pack, onto a site wall or in front of a board is arranged for whoever reads it. Sequence keeps them apart, and an output template is how.
A template is a named, saved, reusable definition of how a schedule renders. It owns page setup, the column selection, the timescale, the bar and milestone styles, the palette, the typography, the title block, the legend, the annotation layer, and its own filter.
It owns no data. A template cannot write to the sheet, so changing how a schedule looks never changes how you work on it. The same schedule is a tiled A3 working schedule and a one-page slide for the board — two templates, one set of activities, no second copy to disagree with the first.
Templates are versioned. A stored template records the schema version that wrote it, and one written by an older build is migrated on read rather than reinterpreted — the difference between a template that still means what its author meant and one that quietly acquired a new default.
The two shipped families#
Two templates ship, because the two jobs pull in opposite directions and most people will only ever adjust a shipped one.
| Report — monthly pack | Presentation — board slide | |
|---|---|---|
| For | The monthly pack, the submission, the site wall | The board deck, the client update, the bid |
| Page | A3 landscape, tiled at 3 mm per day | One 16:9 slide |
| Rows | Every row | Collapsed to level 1 |
| Columns | The full set, at 8 pt | The name column only |
| Bars | Plain, baseline beneath, progress hatched | Rounded, progress overlaid, no baseline |
| Colour | Print-safe | Full colour |
| Timescale | Months over ISO weeks | Quarters over months |
| Furniture | Legend and title block | Neither |
⚠ The shipped families are locked. They are the fixed reference your own templates are compared against, so adjusting one means duplicating it first. Both the settings panel and the command an agent drives enforce the same rule — one answer, not two, or the panel and the action would disagree about what is editable.
Page and canvas#
Page sizes are ISO A0 to A4, ANSI A, B and D, ARCH D and E, plus 16:9 and 4:3 slide sizes. The slide sizes are there on purpose: "presentation" nearly always means a deck, and a schedule that plots to a slide drops in without being rebuilt, which is the manual step this whole section exists to delete.
⚠ An arbitrary custom page size is not built. An unrecognised size falls back to A3.
Orientation, margins and resolution are per template. Margins are in millimetres; resolution is dots per inch. Bleed and a safe area are set the same way — bleed extends the sheet beyond the trim for a printer to cut into, and the safe area is the inset nothing important should cross.
The page scale is in millimetres per day, not pixels per day. Pixels are meaningless on a sheet: at 150 dpi an A3 is 2,480 px wide, so a pixel-based scale would fit four months on it — and raising the resolution for a sharper plot would silently fit more schedule on the same paper. A physical measure leaves the layout alone and makes resolution mean resolution.
Fit modes. Fit the schedule to a given number of pages wide, fit it to one page, or fix the scale and tile. Tiled pages carry a match-line caption naming the page, the rows and the dates it covers — "Page 3 of 11 · rows 41–80 · 2 Mar – 14 Apr" — so a reader can carry across the join.
A tiled set also gets an index sheet — a page in front showing which sheet covers which part of the schedule.
⚠ SVG has no multi-page concept, so a tiled plot is one SVG file per page.
The grid and timeline split is set on the template independently of the screen, including timeline-only — no columns at all, which is the presentation case — and grid-only.
Necking. A collapsed summary bar can be drawn as one unbroken span, or necked — thinned across the stretches where none of its children is running, so the bar shows its own idle time instead of implying continuous work. Necking is on by default, because the honest reading is the one worth defaulting to, and it applies only to a summary whose children are hidden: if the children are drawn beneath it, the bar is not the only evidence.
⚠ A weekend is not a gap. Read literally, "no child running" necks every Saturday — and on a year-long schedule that combs every summary bar at every weekend, duplicating the non-working shading already drawn underneath. A stretch made entirely of non-working days is the calendar, not idleness, so a summary necks only where there are idle working days.
Row depth. A template may collapse to level N before drawing, so a client reads twelve summary bars of the same schedule the site reads four hundred rows of.
⚠ Rows are not a uniform height, because a bar height may be scaled from a numeric column and is uncapped. How many rows fit on a sheet is therefore packing rather than division, and a row taller than the page still gets its own page rather than being dropped.
Bar and milestone styles#
Everything visual is a named, reusable style rather than a per-bar colour choice.
- Shape — rectangle, rounded, chevron, hairline,
splitorbanded. - Fill, stroke and dash — with a stroke cap, which shows mainly on a dashed stroke, where round caps turn each dash into a lozenge.
- Height — a fraction of the row, or scaled from a numeric column. Scaling is normalized across every plotted row rather than per page, so a tiled plot does not draw the same task at two heights either side of a match line. The smallest value never scales to zero: an invisible task is a worse failure than any scaling error it could hide.
- Progress — overlay bar, hatch, darkened fill, or none.
- Baseline — beneath, behind, ghosted, or omitted.
- Milestones — diamond, triangle, circle, square or flag.
- Labels — four slots, left, right, inside and above, each bound to any column.
split and banded are geometry, like the four beside them:
splitdraws the bar as two stacked half-height bands sharing its span, each taking its fill from its own binding — plan over actual, two contractors on the same task, a status over a discipline. With only one binding set, the lower band is drawn in the same fill at reduced emphasis rather than left empty, because a half-height bar with a gap under it reads as a rendering fault.bandeddraws a full-height bar with a contrasting band through its middle third, coloured from a second mapping. The band annotates the bar rather than dividing it: the span, progress and endpoints still read normally. This is the shape for "these are all procurement activities, and some of them are late".
⚠ split is not an interrupted bar. Work that stops and restarts is a scheduling fact, and drawing it needs suspend and resume periods the engine does not produce. A bar style may not silently depend on data the engine has to make.
Which formatting wins#
A template states explicitly whether it inherits the sheet's own conditional formatting, overrides it entirely, or layers on top of it. Inheriting is the default, and it is also the trap: inheriting silently is how a client deliverable ends up carrying the scheduler's private amber highlighting. Layering lets a client pack recolour by contractor while keeping the scheduler's other conventions.
Where nothing else decides a bar's colour, the order is: a formatting rule, then criticality, then the palette's data mapping, then the template's own fill, then the palette's role default. A template can say "my bars are this colour" without overriding the critical path or a rule somebody wrote deliberately.
Palettes#
A palette names the colours by role — bar, summary, critical, baseline, non-working, grid, text — and carries a mapping from data to colour, so a status, phase, discipline, contractor or any list column drives the fill. Change the palette and every output re-skins. Nothing is painted per bar.
Every palette has three variants, applied when it is drawn rather than by editing the colours, so switching back is lossless:
| Colour | As authored |
| Print-safe | Hue kept, everything pulled toward white, so a tint that reads as a solid block on screen still shows the text over it on toner |
| Monochrome | Hue removed |
⚠ Monochrome does not luma-map each colour independently, and that is the point. Luma mapping is faithful to each colour alone and useless in aggregate: the shipped palette's summary and critical greys land one level apart and become indistinguishable — on the exact variant that exists so the monthly A3 survives a photocopier. With hue gone there is nothing left to be faithful to, so the roles are given a deliberate spread instead. Data-driven fills keep the luma mapping, because they have no semantic ordering to spread along.
Background and body text are left alone in every variant. Lightening the page white does nothing, and a "print-safe" body text 35% paler is less legible on paper, not more.
Timescale, bands and emphasis#
Three tiers, period bands, non-working shading, the data-date line, the progress line, and curtain and highlight all draw. A template's own presentational bands are authored too — they are additional to the sheet's, which stay on the sheet so the Gantt and the page cannot disagree about where a phase runs. ⚠ The one shortfall is media underlays: they need a media layer, and there is no asset storage anywhere in the product for one to be built on, so this is a dependency rather than an oversight.
Up to three tiers, each with its own unit, format and alignment: day, week, month, quarter, year, fiscal year — starting in a month you choose, July by default — and project week, counted from the project start so a client who thinks in contract weeks is handed "Week 34" rather than a calendar date.
This is deliberately not the screen's automatically chosen pair. No density heuristic produces contract weeks.
Period bands draw behind the bars — phases, sections, contract milestones, shutdowns. A template's bands are additional to the sheet's own rather than a replacement for them, for genuinely presentational bands that have no business on the working timeline. The sheet's are drawn first.
Emphasis. A curtain greys everything outside a chosen window; a highlight greys everything inside it. This is what turns a four-hundred-row schedule into a slide about the next six weeks without producing a second schedule that will later disagree with the first.
The annotation layer#
Text, notes, callouts with leaders, arrows, lines, rectangles and ellipses, anchored to the page, to a row or to a date, plus the generated legend, the title block, a north point with an authored bearing, and a page-anchored LOGO carried as template data. ⚠⚠ GENERAL IMAGERY IS A BOUNDARY, not unfinished work: D13 resolved document storage to a distinct product, Amalgative Storage, and plan.md A8 puts blob storage there — "Sequence does document control, the server does document storage". Building an asset store here would be the bug, the same shape as permissions' server-side enforcement. A logo is excluded from that boundary by ruling, and the exclusion is CHECKABLE rather than merely stated: a stored image is capped at 512 KB, normalised to the one PNG form a PDF can embed before it is ever stored, and read back through the plotter's own reader before it is accepted. ⚠ Transparency is flattened onto the page colour at authoring time. ⚠ No QR code to a live view — the one clause that is deferred rather than bounded; it needs the live-artifact path sequence.exportSchedule's feed also waits on, since §14.3's published links serve a frozen artifact.
A template carries a persistent layer of things placed on the page rather than derived from data: text, notes, callouts, arrows, lines, rectangles and ellipses.
Annotations are anchored either to the page — a title, a logo — or to a row or a date, and an anchored annotation moves when its target moves. They persist across re-runs, which is what makes next month's report a re-run rather than a rebuild. This layer is the single largest reason people leave a scheduling tool to produce a deliverable, and its absence is why the deliverable stops matching the schedule.
The legend is generated, not drawn. It reports the bar styles actually in use, the formatting rules in force, and the calendar key. A hand-maintained legend is a legend that is wrong.
The title block records provenance — the data date, the snapshot, the template and who produced it — in the drawing rather than in a file property, where it survives being printed.
What is not built yet#
An ordered set of outputs produced in one action as one document — cover, contents, narrative, the schedule, the look-ahead, the S-curve, appendices — with section and page numbering running across the whole pack. The output pipeline produces one artifact at a time today. Specified in full; not started.
For the two honest limits in PDF output — the font set and text encoding — and for what a schedule cannot currently leave Sequence as, see Files, import & output.
Related#
- Files, import & output — the formats an output plots to.
- Views & filters — what an output is an output of.
- Conditional formatting — the sheet's own rules, which a template may inherit, override or layer on.
- Baselines & variance — what a baseline bar renders from.