Skip to content

linear-strict 0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Oct 18:02
· 10 commits to main since this release
  • linear-strict/library exports StrictLinear, linearGql and OverlapRefusal, so a script that files tickets goes through the same checks as an agent. An overlap refusal carries the close tickets as candidates.
  • create_issue needs parent or project_id, and a sub-ticket goes in its parent's project; a parent with no project is refused until it has one, with the project its neighbours suggest. Refusals list the team's open projects, the ones closest to the ticket's text first. A team with no open projects is exempt. Each close ticket in an overlap refusal says why it was named. Without a parent it finds the open tickets on the team the new one overlaps: with a judge key set, claude-sonnet-5-5 reads every open title and names them; otherwise Linear's semantic and keyword searches find the closest (LINEAR_STRICT_OVERLAP=search keeps the searches) and refuses until the filer files under one, widens one instead, or passes new_because with each in distinct_from; the reason is posted on the new ticket. The result lists the filer's own tickets on the team still waiting with no delegate (your_unclaimed). Agents had been splitting one change into several tickets and leaving what they filed for nobody.
  • linear-strict audit export and audit check: an offline check of the path:line and commit citations in a team's tickets against a git checkout. Each citation is dated by the description version or comment it first appeared in, and reported as holding, moved, changed or gone since.
  • set_fields can move a delegation off another agent when the ticket is assigned to the human this identity acts for (LINEAR_PRINCIPAL_ID), since that human could do the same in Linear's UI. It needs take_over: true and posts a "take over" comment naming the agent it was taken from. This is how a ticket comes back from an agent that has stopped running. Without a principal, or on anyone else's ticket, the refusal is unchanged.
  • mark_principal_notifications_read: marks notifications in the principal's inbox read, by id or every unread one an agent or integration caused (only_agent_actors, optionally before a date). It only marks notifications get_principal_notifications returned in the same server, since the principal token can otherwise write anything its human can. A read-only principal token is refused with linear-strict's own message.
  • get_principal_notifications: a second, explicitly separate notifications tool reading the inbox of the human an identity acts for, rather than the identity's own. Needs LINEAR_PRINCIPAL_TOKEN/LINEAR_PRINCIPAL_ID in the server's environment (pennon's onboard wires both when a principals.json entry exists); refuses if either is missing, and refuses if the token resolves to a different user than LINEAR_PRINCIPAL_ID names, rather than silently serving whoever it belongs to. mark_principal_notifications_read above is its write twin.
  • set_status refuses a completed state when the ticket's linked PRs merged, and every one of them merged into a branch other than the main one. Before, this only showed up afterwards as a not_on_main finding on the next read. The refusal says to use a state that isn't completed, or to confirm with git that the work is on main and link the PR that took it there.
  • set_fields takes link_prs, GitHub pull request URLs to link to the ticket, such as a promotion PR.
  • comment writes one header. The server builds the header from kind, so a header typed at the top of body is now dropped, including one that names a different kind. The same goes for a Description updated line typed at the end of a call that carries a patch. An author_label that is a whole header keeps only the name, and a body that is nothing but a header is refused. An ask no longer turns a typed header into its question row.

Install: npm install -g https://github.com/justinstimatze/linear-strict/releases/download/v0.2.0/linear-strict-0.2.0.tgz, then linear-strict install. See the README for setup.