JIRA Triage LedgerRuns the triage → report → comment → state cycle over a JIRA backlog, in whatever project the editor has open. It is not a JIRA client and it does not replace anybody's judgement. It does the part a prompt cannot: it prepares a deterministic input, enforces the steps, keeps state the whole team shares, and shows the result. What it doesRenders a report as something to work with. A report written to one of the forms is one scrolling page: the verdict and the figures at the top, a row of anchors under them, and the sections in the order they are acted on, each drawn by what the form says it is – a table of load as bars, a list of items with named fields, a line of comments to send. A word the form knows is coloured; a word it does not know is left plain rather than guessed into a colour. A report in the older lettered shape opens as before: one tab per section, keyed on the section letter so a report and its translation are read the same way, with verdict tables painted rather than reproduced – the decision cell is a pill, the decisions are counted into tiles above the grid, and the long columns are clamped to two lines so the eye can travel down the column that matters. A table fills the panel and wraps inside it: no table scrolls sideways and neither does the page, because a reader who has to drag a bar to reach the last column loses the column the row is about. Each column is as wide as what it holds: a key, a figure or a name is drawn exactly as wide as it is, a word is never broken in the middle, and the rest of the width goes where it makes the table shortest – in every report, in the panel and in a saved page. Opens a report in the same tick as the click. The tree node carries the path, the file is read synchronously, and the Markdown is rendered by a renderer compiled into the bundle. No loading screen, nothing waiting on a scan. Separates "we looked and there is nothing" from "nobody looked". A group nobody established renders differently from an empty one and never shows a zero. An empty list read as a real zero is a wrong answer that looks like a right one. Will not run on sources nobody fetched. The remote-tracking refs are refreshed first, because ahead/behind figures are exactly as old as your last fetch — without that, a checkout nobody has fetched reports level whatever the server holds, and the report describes a tree the team does not have. Repositories that are behind are fast-forwarded; one that will not fast-forward is reported rather than merged, and a dirty one is never touched at all. A repository that is behind, unreadable, at odds with its remote or that could not be refreshed stops the run, because a triage is worth what the code it read is worth and a report from a five-day-old tree is worth less than none — it looks current. What it says when it stops is one sentence: what went wrong, said once however many repositories share it, why that matters here, and what clears it. Never "pull them", which is advice that cannot be taken on the morning pulling is the thing that failed. Stop means the run did not happen. Stop – in the view title, on the run panel, or offered beside “a run is already in progress” – ends the whole run at once: the step in progress is left where it is, a scan of the code or of the SonarQube server ends at the next file or project it reaches, nothing is handed to the agent after it, and Run works again straight away. A run still starting – levelling the reports, preparing the working directory, asking about a freeze date or a token – does not begin, and the question it asked is closed. The agent is closed with its console, and Stop waits until the agent's processes have ended – killing what would not end on its own – before it touches a file. Where the system will not list its processes they are followed by number, and on Windows the whole tree is ended with Records who decided what. The working directory is shared, so a run one person files is read by another. Reports name whoever filed them, and verdicts, acknowledgements and runs carry the address git already knows you by — nothing to set up, and nothing that can disagree with the commit carrying the record. Where git has no address, records are written without an author rather than with a guessed one. Shows every proposed comment as its own row, with the reason beside it. Which ones go out is the reader’s judgement on the text in front of them; nothing here measures a comment or refuses one. The evidence belongs in the report, and the procedure says so — because evidence in a comment is noise, not because it takes up room. Deletes a report only when you say so, and says what it is not deleting. Right-click a report — or several — and it names every file it is about to take, including the translation, because half a report is worse than none. The files go to the recycle bin and anything committed is still in the history. The verdicts, the comment register and the answered corrections stay: they are the decisions the report describes, not the report. Says whether a report has left this machine. A row says not committed, changed since commit or not pushed; one already in the upstream says nothing, because that is the ordinary end and a mark on every row is a mark nobody reads. One report goes out from its own context entry, or everything waiting goes in one commit from the title bar — confined to the working directory, so nothing half-finished elsewhere in the repository is swept up with it. When somebody else has filed reports this checkout has not got, the list says so and offers to fast-forward. When both sides have filed – a colleague pushed while your run worked – sending, getting and Refresh put your unpushed commits on top of the server's without a second question, as long as those commits hold nothing but the working directory and every file both sides changed is one this extension joins on its own: a seen-list, the comment and sprint-note registers, a sprint snapshot. Edits and staged changes elsewhere in the repository are carried across as they are; where one sits in a file the server's commits change, or an untracked file sits where they put one, it stops and changes nothing. A commit that also changes the project around the working directory is asked about first, and two edits of one report or verdict are left to you. Beyond that it does not touch your history: what is committed, when, and by whom is your workflow. Says one thing in the status bar, and it is the most urgent one. Three facts compete for that line: somebody else has filed reports this checkout has not got, nothing of any kind has run here for too long, and the kind you run has fallen behind while something else has not. The first is cleared by pressing, and nothing else on screen says it. Red is spent on the second and nothing else, because it is the only one that means nobody is looking at the backlog at all; your own kind lagging while the team works is amber, and reports waiting are neither, because news in red is how a warning becomes furniture. Days are counted in working days, so a weekend does not turn the alarm into furniture either. Shows every kind of run at once, in the State view. One line per kind with the date of the last one and how long ago, the kind you run marked as yours, and a line for what other people have filed that has not reached this checkout. The strip has room for one of those and picks it; the pane has room for all of them. A kind nothing has ever run and nobody here runs is left out rather than listed as never run — a project that does not do sprint plans is not behind on sprint plans. Where nothing could count what is waiting it says which of the three reasons that was, rather than a nought. Checks the reports repository on a timer, every fifteen minutes, so a report a colleague pushed this morning appears without anybody starting a run. Refs only: no branch moves, nothing is merged, and the working tree is left byte for byte — which is why a timer may do it unasked. Refresh does more: it is somebody asking for the current state in as many words, so it fetches and then brings the reports onto this disk – a fast-forward, or the replay described above. One press, not a press and then a second press for the thing the first one told you about. A local change the server's commits would overwrite stops it, and it says so. Configures itself in a form. Every project fact this extension reads has a field behind the gear: the tracker, the repositories, the documentation, the evidence, the languages, the team, the SonarQube server and the projects its report covers, what the code consistency report leaves out, and the working directory. Values are read from the file's own words and written back into it value by value, so the comments beside each key survive. The whole file exports to one path and replaces from another, which is how a second project starts from a worked example rather than a list of key names. Says what the button is about to do. The run panel opens with one sentence naming the whole arc, and it names the destination, because the two are different experiences: Run starts the agent in a console with the task attached, and Copy Prompt goes through the same steps for a technical triage and puts the procedure on the clipboard instead, for an agent you start yourself. Reads JIRA itself. This extension needs JIRA — the comments a run drafts are posted there, and the backlog snapshot everything else is measured against comes from there — so a stored token is the whole of what it needs and there is no second switch. When JIRA cannot be read, the State view says so and why. It takes the backlog snapshot itself — every issue, finished ones included, folded into what is already there and never replacing it, because a key that has been seen must never stop having been seen; a read that came back short, or empty, is not written at all. A run reads the threads and says in its panel how many are waiting on us, and checks your priority anchors against what JIRA holds, so an epic somebody closed last week is named as drift instead of silently producing confident verdicts; its report is the wider answer. Between runs, Refresh sweeps the threads this account is in – the issues assigned to you or that you raised, still open, changed recently, because JIRA cannot be searched for the threads you only commented in – and Show Log says what it found. An issue counts as finished when its status is called Audits the documentation as a run of its own. The documentation audit, under Run, asks the other question: every documented capability against the code that was meant to build it, in one matrix, with the coverage arithmetic reconciled rather than declared. It files its own report beside the triages and reads in the same panel. Runs the procedure in a console of its own. The agent is started on the task, or handed it when one is already working; the console closes itself when the agent finishes cleanly, and stays open when it does not. Starting a run is the instruction to run it, so nothing waits for a keypress. The reportEvery proposed comment is a row of its own with the reason beside it, and which ones go out is your judgement on the text in front of you — nothing here measures a comment or refuses one. Tick the ones to post and press Hand the ticked comments to the agent (the command Publish Ticked Comments): the extension asks once, naming the issues, and hands them to the agent, which posts them under your account. A comment the route gate stops cannot be ticked, and says why. Once comments are sent their boxes stay locked, in every open panel of that report, and a newer report of the same kind locks every comment in the older one. Where a report exists in more than one language the header offers both, and switching keeps your ticks and the tab you were on. The − and + buttons size the report and nothing else in the editor. Zapisz jako MD and Zapisz jako HTML save the report as a file to send: the Markdown as it is, or one self-contained page with no script and nothing fetched, which a browser can also print to PDF. The State viewA notification window, and only that. A configuration that cannot be used is said first, with the value that is wrong. Then the alerts – a run that stopped, at which step and why; JIRA not being read, and why; work on this disk nobody else can see until it is pushed; reports somebody else filed that this checkout has not got – one line each, coloured down the side, with a button only where a command really does that thing. Under them, the switch for a second-language copy of each report, the dev freeze the last sprint check was given, then when each kind of run last happened here, and at the foot one line saying how old the figures are: the refs are refreshed every quarter of an hour, so a server that stops answering is visible here rather than at the next run that will not start. It lists nothing else. A runWhat the button is about to do, said before it does it, and then who is being waited on. A step that reads for minutes before the handoff – the code of every repository for the consistency report, the SonarQube server for its assessment – says what it is reading and that the agent starts when it is done. Stop the run stays on the panel for as long as the run holds the working directory – while it works and until the agent has finished the task, whether or not the console reports the agent working. Once the report is written, an agent that is only holding its session open can be ended with Close the agent console, which keeps everything it wrote. Show Run Progress opens the panel again after it was closed. InstallFrom the Marketplace, or build a package and install it:
Getting startedOpen the folder you work in and run Set Up JIRA Access from the view title. It is five steps on one page, each saying what it is for, with a button that does it and a badge saying whether it is behind you. The first step asks for the two values nothing can guess — the address you open JIRA at, and the letters your issues start with — in two input boxes, and writes them into The rest of the configuration is that file, which Configure This Project creates from a commented template and opens as a form:
The folder holding that file is the project root and every path is relative to it. The form has a field for every key, in this order:
The working directory is the extension's only footprint in your project. It holds no copy of your code, your issues or your documentation — it holds what the runs produced. Setting up JIRA accessReading JIRA starts as soon as a token is stored. Set Up JIRA Access walks through it in five steps on one page; the short version:
A token belongs to one account and carries exactly that account's permissions. This extension only ever reads with it — RunsRun asks which, and remembers the answer. Eight kinds, each asking a
different question of the same project, and the last one you ran is offered
first so Enter repeats it. Every report is written in English unless
Technical triage — what each issue actually is, judged against your own documentation and code before it is judged against the reporter's wish, with proposed comments to tick and send. Management triage — what needs your decision, in the order the newest technical triage gives, who is waiting on whom, what came in and what it really is, and what is filed under the wrong type. Its comments carry decisions rather than claims about code: a comment that cites code is written by whoever read the code. Estimation check — what work costs here, calibrated on issues this team has already closed. The calibration is the first table in the report, and a band with too little closed work behind it stays unset and says so. With nothing to calibrate on the report is one section long, because pricing without calibration is not a worse estimate, it is guessing in a table. Sprint plan — what fits in the next sprint, ordered by priority anchor and by dependency. The first item that does not fit is shown rather than dropped: where the line falls is the answer you are looking for. Sprint check — how the sprint that is running is going, several times a day
if you want. Six detectors are computed rather than sensed: the issue that
closes the sprint, what has stopped moving, what went backwards, what was added,
an estimate zeroed with work still to do, and what changed hands. How long a
thing has stood still is counted across checks, which no single fetch can see.
Nothing about the sprint is configured: the workflow order is the board's
columns, the priorities are in JIRA's own order, and the issue that closes the
sprint is the one whose title carries the sprint's name. It asks once per
sprint when work stops – the date it counts working days to – and files the
answer under the sprint the check reads from JIRA. A later check uses that date
without asking only while the sprint the last check read is still running:
before its freeze, or past it but before the sprint's end on the board. The
first check of the next sprint asks again, rather than counting to last
sprint's. The load is measured for the people in Documentation audit — every documented capability against the code that was meant to build it. SonarQube assessment – what SonarQube reports for each project
Code consistency – places that solve the same problem in different ways,
found mechanically and then judged by what they do. First come divergences
that give a different result for data that really arrives – each followed in
the code from the input to where the result is read, and offered as a
candidate for an issue – then divergences nothing triggers today, and only
then several ways of doing one thing that cost upkeep but behave the same. A
way counts as adopted only where a document in the repositories says so –
instructions for coding agents, contribution guides, read-me files,
specifications, architecture decisions, the documentation folder – and only
those become rules for coding agents; where no document says, the choice is
left to the team. Every finding says how sure it is – one word, with what was
not verified in a line of its own – and which commit brought it in, without
anybody's name, and a change from the last two weeks is marked
as work in progress. Demo and example code, copies in separately deployed
parts that have not drifted apart, and matters of taste are listed outside the
assessment. When a SonarQube report of the same day exists, the findings are
set beside it. What None of them writes anything to JIRA or SonarQube, and none of them re-judges what another has decided: the verdicts live in the ledger and the later runs read them. The sprint plan and the sprint check need to know who the team is. That
lives in Reports you already havePoint Nothing is copied or converted. The files stay where they are and are read in place, so a directory shared through git stays shared, and nothing in it is rewritten by being listed. CommandsEvery command is in the Command Palette under JIRA Triage Ledger, and most are also where they are used. In the title bar of the Runs and State views:
On a report in the Runs list:
In a report, Publish Ticked Comments is the button that hands the ticked comments to the agent. Only in the Command Palette: Forget SonarQube Token, and Write a Translated Copy of Each Report, the same switch as the box in the State view. ProceduresThe procedures each run hands the agent are compiled into the extension, and nothing in the project replaces them. A copy kept in the working directory goes stale the day the extension changes, and a run that quietly follows old instructions is worse than one that follows none, so a file in SettingsThere are no editor settings. Everything specific to one project lives in The agent started in the console is The route gate, and the hole it leavesA comment that says how the system behaves is a claim about a path: where a value is written, which route the surface in the report actually takes, and where the effect is read. Reading one end and assuming the middle is how a comment goes out under your name with a premise a colleague refutes in the same issue half an hour later. So before a comment like that is drafted, the procedure asks for a file —
A comment that asserts nothing about behaviour — "yes, we are closing this" —
needs no table. It carries one line saying so, and then it may cite nothing: a
What this does not do. It checks the form, not the truth. Writing The hole. Publication is the agent's, through its own JIRA access, so this gate stops what goes through the panel and nothing else. An agent asked "just post this" in its own console never meets it. Closing it, if your agent supports hooksClaude Code can refuse a tool call before it runs. The extension does not write
this for you — it writes nothing outside its working directory — so it is yours
to add, in your project's
The script reads the same files under the same rules and answers
What it deliberately is notNot a JIRA client. No backlog browsing, no issue editing, no sprint management. One cycle, done properly. Not universal, and it says so. The method assumes a documentation repository treated as the source of truth, with an issue judged against it before it is judged against the reporter's wish. Without such documentation the sieve degenerates into "everything is a wish", which is why leaving Not a writer to JIRA. It reads, when you let it. It never posts: comments are drafted by the agent, approved by you in the report, and go out through the agent. A comment is practically irreversible and a worklog is completely irreversible, so the write path stays where a person is already looking. RequirementsVS Code 1.104 or later, and Reading JIRA needs an Atlassian API token, stored through Set Up JIRA Access in the editor's secret store — never in settings, never in a file, never in a URL. The SonarQube assessment needs What leaves your machineYour JIRA site, and only once a token is stored: searches and comment threads, over HTTPS, authenticated as you. Your SonarQube server, when a SonarQube assessment runs: read-only requests, authenticated as you. Nothing else. There is no telemetry, no update check and no service belonging to this extension — it has no runtime dependencies to phone home with. What the agent does with the task it is handed is between you and your agent. Building from source
Every surface is decided in a module that does not import
That prints the tree, the State view, the badge, the status bar and the gate results from the same functions the editor calls. LicenceMIT. |