You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
taskmgr tree prints the open issues nested under their parents. Each
line carries [ready] or [blocked by <ids>], read from the same views as taskmgr ready and taskmgr blocked. taskmgr tree <id> prints one issue
and the open issues below it. --format mermaid prints the tree as Mermaid
flowchart text, and --json prints nested objects with ready, blocked
and children. No command showed the graph: to read an epic took one taskmgr show for each child.
taskmgr create --from <file> files a set of issues, all or nothing.
The file is a YAML list of 1 to 256 entries, and - reads it from stdin.
An entry takes ref, title, type, priority, assignee, labels, description, parent, blocked_by and related. An edge names the ref
of another entry or the ID of an existing issue, in any order. A refused
entry writes nothing and is named: entry 3 (ref "schema"): .... An unknown
key, an empty list item and a second YAML document are errors.
taskmgr create --from <file> --json prints the map from each ref to
the new ID. It is an array of {ref, id, store, hints, warnings} in file
order. When a hook denies the set, the hook_denied object carries entry,
the 1-based position in the file, and ref in place of issue_id. Beside --from, only --creator, --agent and --session are accepted.
A pre-create hook runs for each entry of a set before the first
write. The payload can name a parent or a blocker of the same file that
is not on disk yet. A hook that looks up such an ID gets issue not found,
and a hook that denies on that denies the whole set.
taskmgr show takes several IDs. It prints one detail block for each
ID, in argument order, with a blank line between two blocks. An ID that
does not exist fails the whole command with issue not found: <id> and
prints nothing on stdout. It took one ID.
Action required for a script that reads taskmgr show <id> --json: the
command prints an array with one element for each ID, also for one ID. It
printed a bare object. Read one issue as .[0]: .[0].title in place of .title.
taskmgr show --fields <name,...> prints only the named fields. A name
is a top-level key of the --json output of show. JSON carries id and
the named keys. Human output prints the header line and the lines of the
named fields. --fields description prints the complete body, where human
output cuts a body at 4096 bytes. store, creator and body_external
have no human line and need --json.
taskmgr commands carries the shape of the --json output of each
command. The key output gives type (object or array) and fields,
each with its name, its type and optional: true when the field is
omitted while empty. with_flag lists the shape under a flag that replaces
it: create --from, import --batch and guide --list. The catalog listed
flags only, so a caller without the spec guessed the key names.
taskmgr commands <name>... prints only the named entries. A subcommand
is one quoted argument: taskmgr commands show "comment add". An unknown
name is refused with the entries it is a part of, as unknown command "add": did you mean "comment add" or "dep add" .... The
command took no arguments.
taskmgr list and taskmgr search answer a filter field given as a flag
with the -q expression.taskmgr list --status open --type bug prints To filter by status and type: taskmgr list -q 'status == "open" && type == "bug"' under unknown flag: --status. The line is your own command, with
every field flag folded into one -q. The command still fails, and no flag
was added. It printed the error and the help block only.
Store.Watch signals a change to a store. It returns a channel that
carries a value when the store changes, from this handle, another process
or an edit by hand. A value means "read again" and carries nothing else.
Changes within 100 ms give one signal, and a signal that is not received
yet absorbs the next one. The channel closes when the context is done or
the store directory is removed or renamed. A consumer had to poll. The SDK
module now requires github.com/fsnotify/fsnotify.
Store.CreateBatch creates a set of issues that reference each other, all
or nothing. A BatchEntry is a CreateInput with a Ref, and Parent, BlockedBy and Related accept the Ref of another entry. The engine
validates every entry and runs every pre-create hook under one lock,
before the first write. A refused entry returns a *BatchEntryError with
the zero-based Index, Ref and Err. A set holds at most 256 entries.
Store.Graph returns every issue that is not closed with its ready and
blocked marks, from one read. A GraphNode holds Issue, Ready, Blocked and BlockedBy. Store.Details returns the Detail of several
IDs over one read. A caller of Ready and then Blocked made two reads,
which can disagree when a write lands between them.
tasks.QueryFields() and tasks.QuoteQueryValue() are public. The
first returns the comparison fields of the filter language, sorted. The
second quotes a value as a string literal of that language, as Criteria.Build does.
Action required for a caller that passes a parent, blocked_by or related value that is not an issue ID: every write refuses it. taskmgr create --blocked-by ../at-0042ab says blocked_by: "../at-0042ab" is not a valid issue ID, and taskmgr update --parent says the same on parent. taskmgr dep add and taskmgr rel add say referenced issue "<value>" does not exist. The SDK
returns a *ValidationError on the field of the edge. A value such as ../<open-id> was accepted when it named a file, and any other value got
the does not exist message from every command. Pass the bare ID, and
match the new message for a value that is not one.
Action required for a store that holds a blocker value that is not an
issue ID: the issue is blocked. It was listed by taskmgr ready while its
blocker was open. taskmgr blocked --json shows the value in blocked_by.
Remove it with taskmgr dep rm <id> <value>.
Action required for a script that reads packages from taskmgr package repo rm --json: the key is still_used, and the output
is {name, path, still_used}. It names the packages of the removed
repository that the per-user config still uses, and is omitted when there
are none. Read still_used in place of packages.
A write that makes a parent cycle is refused.taskmgr update <id> --parent <descendant> fails with parent: parent cycle: <id> -> <descendant> -> <id>. It was written, and
the issues on the cycle had no root.
An issue with a dangling reference or a cycle already on disk can be
edited. Only a write that changes parent, blocked_by or related is
checked on that field, so the write that removes the bad edge is the
repair. taskmgr update of such an issue was refused, also a title edit,
with referenced issue "<id>" does not exist or dependency cycle: ....
A list no longer fails when another process closes or reopens an issue
during the read. The issue is left out of that result. The read failed
with the error of the file that moved.
taskmgr import --batch --json prints [] for an input with no
records. It printed null.
taskmgr blocked --json prints "blocked_by_refs": [] for an issue whose
only blocker does not exist. It printed null.