X6 React to a delay and a restriction
12:25–12:50 · 25 minutes
- Time: 25 minutes
- You produce: two new sub-issues with dates, one dependency that follows from your decision, an unchanged submission milestone, a decision record, and a Project status update. Optional: an exported view.
- New terms: dependency, milestone, view. All terms are in the cheat sheet.
Why this step
Plans change. A good plan makes the change visible and traceable: what changed, why, what follows from it, and what did not change. In this exercise two events occur at once. There is no single correct answer. You choose one option, and you justify it.
The most important rule is about deadlines. The submission date of a master’s thesis is an official date. An extension needs an important reason and a formal decision: the supervisor can extend the period once by one semester, and the Collegium Decanale decides on any further extension (requirement R-12). A late submission is graded 1. You therefore never move the official deadline in the plan to absorb a delay. You move the planned work, you check what still fits, and you record the decision.
The scenario
- Delay. The fictional archive delivers the scans two weeks late: on 2027-01-29 instead of 2027-01-15.
- Restriction. The archive restricts reuse of the scans of record SYN-P021. They must not appear in any public output.
The restriction is not optional: no public file may contain a scan of SYN-P021. The open question is what this means for the release v0.1.0-demo and for the plan.
Steps
Record the two events
- Open the epic E08 and click Create sub-issue.
- Create
E08-T6 Receive the scans from the fictional archivewith the labelkind:taskand milestone M2. - Create
E08-T7 Exclude the restricted scans of SYN-P021 from public outputswith the labelkind:taskand milestone M2. - Write acceptance criteria for both. Use the example below.
- Open E08-T7 and mark it as blocked by E08-T6. You can only exclude scans that you have received.
Open a terminal in the folder
projm-thesis. Define the helperissueas in X3, if this is a new terminal:issue() { gh issue list --state all --limit 100 --json number,title \ --jq ".[] | select(.title | startswith(\"$1 \")) | .number"; }Create E08-T6 as a sub-issue of E08 with milestone M2. The body holds the example acceptance criteria.
gh issue create --title "E08-T6 Receive the scans from the fictional archive" --label kind:task --parent $(issue E08) \ --milestone "M2 Data documented and validated" --body "**Acceptance criteria** - [ ] The archive delivered every requested scan. - [ ] The archive stated the reuse terms per record."Create E08-T7. It waits for E08-T6, so
--blocked-bygets the number of E08-T6. You can only exclude scans that you have received.gh issue create --title "E08-T7 Exclude the restricted scans of SYN-P021 from public outputs" --label kind:task --parent $(issue E08) \ --milestone "M2 Data documented and validated" --blocked-by $(issue E08-T6) --body "**Acceptance criteria** - [ ] No public file contains a scan of SYN-P021. - [ ] The data dictionary explains the restriction."
Set the new dates
gh can set a field value only with the internal IDs of the Project, the item, the field, and the option. To open your Project from the terminal, run gh project view 12 --owner @me --web.
- In the Project, open the view Backlog.
- Set E08-T6: Start date
2027-01-04, Target date2027-01-29(originally2027-01-15).
Choose one option
Discuss the options with a neighbour for three minutes. Choose one.
| Option | What you do | What it costs |
|---|---|---|
| A Release 29 records | Publish the release without the scans of SYN-P021. The data dictionary explains the gap. Mark E08-T3 (release) as blocked by E08-T7. | The release is incomplete. A reuser must read why. |
| B Release metadata only | Publish the metadata of all 30 records, but no scans. Update the rights decision (E08-T2). Mark E08-T3 as blocked by E08-T2. | The release is less useful, but complete and simple to check. |
| C Find a substitute | Ask a second fictional archive for a comparable record. Create E08-T8 Obtain a substitute record, blocked by E08-T6. Mark E08-T3 as blocked by E08-T8. |
More work and one more third party. A second delay can push the release towards M3. |
Apply your option
- Create the dependency that your option needs. Option C: create E08-T8 first.
- Open the view Roadmap. Check that E08-T6 and E08-T7 end before the marker of M2 (2027-03-01).
- If a bar ends after M2, move M2. M2 is a proposed date. Write the reason in the description of M2.
- Check that M3 (2027-06-01) did not move.
Create the dependency that your option needs. Run only the lines of your option.
# Option A: E08-T3 (release) waits for E08-T7 gh issue edit $(issue E08-T3) --add-blocked-by $(issue E08-T7) # Option B: E08-T3 waits for E08-T2 gh issue edit $(issue E08-T3) --add-blocked-by $(issue E08-T2) # Option C: create E08-T8, blocked by E08-T6; then E08-T3 waits for E08-T8 gh issue create --title "E08-T8 Obtain a substitute record" --label kind:task --parent $(issue E08) \ --blocked-by $(issue E08-T6) --body "Find a comparable record in a second fictional archive." gh issue edit $(issue E08-T3) --add-blocked-by $(issue E08-T8)Open your Project with the command below and select the view Roadmap. Check that E08-T6 and E08-T7 end before the marker of M2.
gh project view 12 --owner @me --webIf a bar ends after M2, move M2. M2 is a proposed date. The new description replaces the old one, so keep the justification and add the reason.
gh api -X PATCH repos/{owner}/{repo}/milestones/2 --jq .due_on -f due_on=2027-03-15T12:00:00Z \ -f description="<old justification> Moved on 2026-10-16: <reason>."Check that M3 did not move. The result is
2027-06-01T00:00:00Z.gh api repos/{owner}/{repo}/milestones/3 --jq .due_on
Record the decision
- Open
project-management/decisions.mdin your repository and click the pencil icon. - Add a record from the decision template below at the end. Fill in every line.
- Commit with the message
docs: record the decision on the delay and the restriction.
Get the latest state from GitHub:
git pullOpen
project-management/decisions.mdin a text editor.Add a record from the decision template below at the end. Fill in every line.
Save the file.
Save the change as a commit and send it to GitHub:
git add project-management/decisions.md git commit -m "docs: record the decision on the delay and the restriction" git push
Report the status
gh has no command for Project status updates. To open your Project from the terminal, run gh project view 12 --owner @me --web.
- In the Project header, click Add status update.
- Select a status, the start date
2026-10-19, and the target date2027-06-01. - Write two sentences: what changed and what did not change. Name the decision D-T02.
- Click Post update.
Optional: export a view
- Open the view Backlog.
- Click the arrow next to the view name. Do not use the View button.
- Select Export view data.
- Save the
.tsvfile (tab-separated values). It is a snapshot of the plan for your records or your supervisor. It is not a backup of the Project.
gh cannot export a view with its filters. It can save all items of the Project with their field values as JSON.
Save the items as
plan.jsonin the folder that containsprojm-thesis. Use the number of your Project.gh project item-list 12 --owner @me --format json > ../plan.json
The file is a snapshot of the plan for your records or your supervisor. It is not a backup of the Project.
Texts to copy
Example acceptance criteria
**E08-T6** Acceptance criteria
- [ ] The archive delivered every requested scan.
- [ ] The archive stated the reuse terms per record.
**E08-T7** Acceptance criteria
- [ ] No public file contains a scan of SYN-P021.
- [ ] The data dictionary explains the restriction.Decision template
## D-T02 Two-week delay of the scans and a reuse restriction
- **Date:** 2026-10-16 (workshop; fictional)
- **Context:** The fictional archive delivers the scans two weeks late. It restricts reuse of the scans of record SYN-P021.
- **Options considered:** A release 29 records; B release metadata only; C find a substitute.
- **Decision:** Option <A, B, or C>, because <reason>.
- **Changes:** <dates and dependencies that changed, with Issue numbers>
- **Consequences:** <what this means for M2, for the release, and for a reuser>
- **Not changed:** The official submission date (M3, 2027-06-01). An extension needs a formal decision (RSL Phil.-hist. 21 Art. 56).Expected state
There is no single correct plan. Check your plan against these criteria.
The solutions show one possible answer.
If something goes wrong
| Problem | Cause | Recovery |
|---|---|---|
| A bar ends after the M2 marker. | The delay does not fit. | M2 is a proposed date: move M2 and record why. Never move M3. |
| Add status update is missing. | The window is narrow. | Open the Project menu (…) or widen the window. |
| Export view data is missing. | You opened the wrong menu. | Use the small arrow on the view tab, not the View button. |
| You moved M3 by mistake. | — | Set the due date back to 2027-06-01. The Issue history shows the change. |
| Time runs out. | — | Write the decision record first. It is the most important output of X6. |
| A command fails. | Usually the installation, the sign-in, or the folder. | See Command-line problems, or do the step in the browser. |
Alternatives
- Pair: choose the option together. Then one person edits the Project, the other writes the decision.
- Private path: identical. A status update in a private Project is visible only to people with access.
Official documentation
Next
The exit check and the transfer to a private thesis.