Configuration¶
The builder and the command line use the same file, foreca3t-config.json. Export it from the
builder, keep it with your notes, and import it again next PI.
{
"platform": "dc",
"instance": {
"name": "My area",
"storyPointsFieldId": 10001,
"teamFieldId": 10002,
"piFieldId": 10003,
"piCapNote": "dc_note_1",
"placeholderLabel": "placeholder"
},
"defaultCalendar": "main",
"calendars": {
"main": {
"description": "12-week PIs",
"tolerantNames": true,
"pis": [{"name": "PI 27.1", "start": "2027-02-08", "end": "2027-05-02"}]
}
},
"managementViews": {
"release": {"title": "Release Outlook", "hierarchy": "Version -> ARTs -> Team",
"columns": ["Progress", "Plan vs Actual", "Bottleneck", "PlanDate", "Forecast", "Health", "Δ Plan"]}
}
}
| Key | Meaning |
|---|---|
platform |
dc or cloud |
instance.*FieldId |
number of the custom field (customfield_10016 → 10016) |
instance.piCapNote |
Data Center: Notes type that holds PI-Cap |
instance.*FieldType |
Cloud: custom field type, e.g. com.atlassian.jira.plugin.system.customfieldtypes:float |
instance.placeholderLabel |
Epics with this label hold the total of later PIs on purpose (no XL warning) |
calendars |
named PI calendars; PIs in order, dates yyyy-mm-dd, start and end included |
tolerantNames |
the PI field may say PI 27.1, 27.1, 27.P1 or PI 27.P1; otherwise names must match exactly (case-insensitive) |
defaultCalendar |
calendar used when none is chosen; its files get no suffix |
managementViews |
one file per view; only columns comparable across teams are allowed |
Checks¶
Errors stop the generation: overlapping or unordered PIs, duplicate names, invalid dates, unknown columns, missing fields. Warnings do not: gaps between PIs, PIs of different length.
Command line¶
python3 -m foreca3t --check # validate
python3 -m foreca3t B <calendar> --out views # variant B, another calendar, output folder
python3 -m foreca3t --describe # allowed columns and output files as JSON
python3 -m foreca3t --push --region eu # Cloud: create the views via the Structure API (token in STRUCTURE_TOKEN)