v0.8.8
Perth v0.8.8
Perth.jl v0.8.8 — a link that only shows, and an order you choose
Nothing breaks: two fields are new — order on a task, label_at on a marked day — and both default to 0, which is exactly the old behaviour. Projects saved before this release load unchanged, and a plan nobody reordered still comes out by date. Full changelog: https://github.com/dantebertuzzi/Perth.jl/blob/main/CHANGELOG.md
Added
-
A read-only share link (
view_key). A second key, independent of the access key: one link edits, the other only shows —Perth.run(view_key = "…"),Perth.view_key!, or the Share / QR dialog. Sharing was all-or-nothing, and that is what stopped a plan from being sent to a client, a director, the whole site.The refusal is the server's, decided by the method rather than by a list of routes, so a route added tomorrow is refused by default. That includes the door the interface does not use — the presence socket: the chat persists to disk and reaches everyone, so it is writing, and refusing the
PUTwhile leaving the socket open would be changing the lock and leaving the window open. The payload of/api/shareis written for whoever asks: the editing key cannot appear to someone who came in through the read-only link, which would undo the link on the first screen.The interface stops offering what the link cannot do — the editing menus, the drag gestures and the chat composer are gone rather than left there to fail — and viewers show up among the connected machines as a hollow ring: present, not writing. Changing either key disconnects only the machines it invalidated.
-
Order the plan by hand: drag a row up or down (
move_task!,order). Row order was derived — children under their parent, siblings by(start, name)— and stayed a good order right up to the day three tasks start together and the sequence on site is not alphabetical.Dropped in the gap between two rows, the task takes that position; dropped on top of a task, it becomes a subtask of it. One gesture, two destinations, decided by where you let go — the convention of every file tree, and one gesture fewer than making the WBS a separate operation.
orderis0until someone drags, so a plan nobody reordered still comes out by date; a drop renumbers the whole sibling group1, 2, 3, …, so a group is never half by hand and half by date, and the statement is about one group only. -
A
#column at the left of the task table: the row order written down, so it can be read and checked after a drag instead of counted with a finger. Its tooltip carries the task id — the thing you type in the REPL, which until now had to be fished out of an export. -
A new warning: "starts before its dependencies allow." A dependency never moves anything on its own in Perth — that is
schedule!'s job — so a plan can hold a task that starts before its predecessors let it, and until now the only sign of it was an arrow drawn backwards on the chart. The warning gives the earliest date the task could start and how many days early it is; when the start is pinned the row says so, because that is precisely the case auto-schedule will not fix. -
A slider for where a marked day's name sits (
label_at, 0–100 percent of the chart height; a slider per row in File → Marked days…, or the keyword onadd_marker!). The name lies along the line it names, so it always lands on something, and which bar it lands on depends on the plan. A percentage rather than pixels: the chart grows with the plan, and "a third of the way down" should stay a third of the way down. -
Help → What the words mean: a glossary of the vocabulary the interface speaks — task, summary, WBS, dependency, slack, critical path, baseline, S-curve, PERT, P80, overallocation, band, marked day.
⚠ 4 overallocations · ⚠ 1 past deadlineis only a warning to someone who already knows the words, and the only place they were explained was the package documentation, which whoever opens the browser does not read. -
Telling whose baseline a ghost bar is. The ghost lives on its task's own row, but a task that moved a long way leaves it far from its bar, and "same row" becomes guesswork on a busy chart. Hovering it names the task and gives the promised dates; selecting the task lights its ghost up and joins the two with a dotted line — which is the slippage drawn at actual size. Neither adds anything to the chart at rest.
Fixed
-
An error Perth raised for a human to read no longer arrives as "internal error." A project on a business-day calendar opened without
using BusinessDaysfailed every calendar-aware route with a generic 500, hiding the one sentence that solved it. Messages the package raises itself now reach the screen; anything else stays a 500 with no detail, because that is a bug of ours and not the browser's business. -
Lines and labels no longer cross each other. A dependency arrow leaves the end of the bar, which is exactly where the label starts, and struck the word through; a marked day's dotted line ran down through its own name. Pushing the text aside would detach it from what it names, so the line opens a gap instead — around every label it passes, on any row. The click target stays whole: what disappears is the stroke, not the sensitive area, so double-clicking an arrow to remove it still works anywhere along it.
-
The link dot no longer eats the first letter of the task's name. The dot you drag a dependency from is born at the end of the bar, where the label starts. The label now cedes it room, and only while the dot is there — only the selected bar has one, and moving every label away from every bar because of it would be paying for it across the whole chart.
Merged pull requests:
- Feat/link somente leitura e ordem manual (#5) (@dantebertuzzi)
- fix: sobreposições no gráfico e de quem é a barra-fantasma (#6) (@dantebertuzzi)