gitdone

io.github.ArtJack由 GitHub 帳號 ArtJack 發布v0.3.0更新於 Nov 3, 2026

Read-only project status: strict and weighted completion, each claim held to git.

已驗證STDIO僅桌面效率與工作流開發者工具

概覽

AI 產生的概覽

針對 gitdone 追蹤專案的唯讀狀態工具:嚴格與加權完成度、下一個工作流,以及每項聲明與 git 證據的核對。

可以做什麼
  • 報告專案現況:各分組的嚴格與加權百分比、下一個工作流及其所需條件
  • 列出各列(可只看尚未上線的列),並對照 git 與 gh 的說法呈現每列聲稱的證據
  • 以唯讀方式執行校驗:檢視是否與表格一致、計數是否相符、每個狀態是否都有證據
  • 查看自某日期、時間跨度或提交以來有何變化,以及近期提交的去向(計畫內、維護、計畫外)
  • 建立需求、列、證據與測試的可追溯性矩陣,並讀取某個資料夾下所有被追蹤的專案
  • 依表格的 git 歷史估算完成日期(實驗性)
適用情境
適用於已用 gitdone 追蹤範圍的專案,希望助理在不改動任何內容的前提下回報可受檢驗的進度、下一步與證據。它不是通用任務追蹤工具,也不讀取程式碼。
執行需求
以本機程序透過 stdio 執行,通常使用 uvx gitdone mcp。需要 Python 3.9 或更新版本以及 git;僅當某列引用拉取請求或合併請求時才需要 gh 或 glab。未宣告需要帳號、API 金鑰或環境變數。
安裝前請注意
唯讀:這些工具不寫入任何內容,狀態變更仍需使用 gitdone 命令列。結論取決於表格本身,引用到錯誤列的真實提交也可能通過檢核。eta 工具為實驗性,應視為推估而非承諾。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 gitdone,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

GitDone

[PyPI] [Python] [CI] [License: MIT] [its own status] [Sponsor]

Your agent says it shipped. Git decides.

One markdown table of what must exist for a project to be done, with every row held to git, and a percent you can defend. A row is Live only when a commit on the default branch or a merged pull request says so. A commit that would make the numbers lie is refused, and a claim stops holding the day its commit is reverted.

[A terminal session: a commit from a spike branch is refused, the commit on main is accepted, a hand-typed claim with no evidence stops the commit, and a reverted commit fails the gate.]

No account, no server, no model calls, no dependencies. The files live in your repository and stay readable without the tool.

The scale · Install · Instruction · The gate · Focus · Commands · FAQ · Sponsor

The scale: how far along is it?

Every project answers that question with two numbers, side by side.

  • Strict counts only the rows a commit on the default branch or a merged pull request says are Live. It is what an outside reviewer would count, and nobody can talk it up.
  • Weighted also credits work that stopped short of that, at weights written in the plan: by default a row built on a branch counts 0.8, and a partial row 0.4.

The gap between them is work that exists and has not shipped. Strict 25% with weighted 46% is a lot in progress and little out the door, and it is a different project from strict 40% with weighted 46%.

[A scale for a fictional project: all rows at 25 percent strict and 46 percent weighted, and one bar for each of its five domains.]

That is gitdone chart --scale --out scale.svg, for Bramble Kiosk, a fictional library kiosk partway through its work, whose history docs/demo/make_history.py generates. Here is the same state everywhere you would meet it.

When you open the project. Plain gitdone, with what comes next and where the recent commits went:

console
$ gitdoneAll: strict 25% (4/16), weighted 46% · next: S1 (Reading lists and renewals), needs the head librarian's word at release  All  strict ████░░░░░░░░░░░░  25%  weighted ███████░░░░░░░░░  46%Focus, last 14 days: 8 of 13 commits on plan, 3 off plan (printer, theme).

In STATUS.md. Generated and committed, so anyone who opens the repository can read it, and the gate refuses a view that no longer matches the table:

Bramble Kiosk: 16 rows

  • Strict: 4 of 16 live · █████░░░░░░░░░░░░░░░ 25%
  • Weighted: █████████░░░░░░░░░░░ 46%
  • Built on branches, not released: 2 · demo only: 1 · partial: 3 · not built: 6
DomainRowsLiveBuiltDemoPartialNot builtStrictWeighted
1. Catalogue search42101050%80%██████████░░
2. Lending41110125%57%███████░░░░░
3. Accounts31001133%47%██████░░░░░░
4. Reporting3000030%0%░░░░░░░░░░░░
5. Accessibility2000110%20%██░░░░░░░░░░

Workstreams, in the plan's order

#WorkstreamRowsStrictWeightedStateNeeds
1S1 Reading lists and renewals3, 70/280% ████████░░built and reviewed; released with the next kiosk updatethe head librarian's word at release
2S2 Returns6, 80/225% ██░░░░░░░░self-return shown at the open day; fines not startedthe fines policy from the library board
3S3 Accounts9, 10, 111/347% █████░░░░░card sign-in live; the override screen in progress

Next, in order: S1 → S2 → S3.

On every pull request that moves a row. The Action keeps one comment, and puts each finding on its row's line in the diff:

gitdone · gate: PASS

RowsStrictWeighted
All164 (25%)46%█████░░░░░░░

Against main: Since 54a3bd4 (2026-03-02): All strict 3→4 of 16 (19%→25%), weighted 39%→46%. Moved: 7 Partial→Built, not live; 9 Partial→Live. Workstreams moved: S1, S3; not moved: S2.

Next: S1 Reading lists and renewals. Needs the head librarian's word at release.

On your README. gitdone badge --keep writes the badge with the view, and the gate holds it to the table: [done: 25% strict, 46% weighted]

Over time. gitdone chart --out burnup.svg draws the table's own git history, with the scope line visible when it grows:

[A burn-up chart for a fictional project: 16 rows in scope, 46 percent weighted, 25 percent strict.]

Across every project you keep. gitdone portfolio ~/code, read offline, and a failing gate is hard to miss:

ProjectRowsStrictWeightedNextGate
bramble164 (25%)46%█████░░░░░S1 Reading lists and renewalspass
kiosk41 (25%)25%██░░░░░░░░row 2 Searchfail, 1 contradicted

For someone who will never open the repository. gitdone report --out report.md gives the evidence behind the numbers, row by row, as Markdown for a client or a manager.

Install

You need Python 3.9 or newer and git. GitDone has no dependencies of its own. gh is used only for a row that names a pull request, and glab for a merge request.

WithCommandGood for
pipxpipx install gitdoneThe usual way: its own environment, and on your PATH everywhere
uvuv tool install gitdoneThe same, if you use uv
pippip install gitdoneInside a project's virtual environment
uvxuvx gitdone --versionTrying it with nothing installed: put uvx in front of each command

gitdone --version says it worked. pipx upgrade gitdone moves to a new version, and pipx uninstall gitdone removes it. Your table and view stay, and they read fine without the tool. A hook lives in .git/hooks, in this clone only: delete pre-commit, pre-merge-commit and post-commit there to take it out.

With a coding agent

AgentCommand
Claude Code/plugin marketplace add ArtJack/gitdone, then /plugin install gitdone@gitdone. A session then opens with the numbers
Cursor, Codex, OpenCode and othersnpx skills add ArtJack/gitdone
Any MCP clientclaude mcp add gitdone -- uvx gitdone mcp, or {"mcpServers": {"gitdone": {"command": "uvx", "args": ["gitdone", "mcp"]}}} in its config. Read-only tools
Any agent that reads AGENTS.mdgitdone install-agents adds the rules, and keeps what is already there

What each one does.

As a gate

WhereHow
This clonegitdone install-hook, or init --hook. Another clone runs it once too
GitHubgitdone install-ci, or init --ci, adds the Action: the gate no flag can skip. It needs no key and no install
The pre-commit frameworkrepo: https://github.com/ArtJack/gitdone, rev: v0.3.0, hook id gitdone
Any other CIuvx gitdone check --strict, with the whole history checked out. Exit codes

Instruction

One project from nothing to a number you can defend. Run these in your repository, on your own rows. Every block is real output, trimmed where it runs long, and a test keeps it so.

1. Write down what done means

Rows are capabilities a stranger could check, like Sign-in, not tasks like refactor auth.

console
$ gitdone init --rows "Sign-in, Search, Export, Reports" --hookwrote .gitdone.json, status-table.md (4 rows) and STATUS.mdAll: strict 0% (0/4), weighted 0% · next: row 1 (Sign-in)
$ git add .gitdone.json status-table.md STATUS.md && git commit -q -m 'Track the scope'result: PASS

--hook guards the commits after this one, in this clone. --ci adds the Action, --agents the agents' rules, and --badge a badge.

Instead of --rows, start from a file's checklist or spec with --from-checklist TODO.md, or from GitHub issues with --from-issues. A checked item is Live only if what it names holds, and otherwise starts as Partial with the reason beside it, and an unchecked one starts as Not built, so the first number you see is already true.

2. Open the project with gitdone

console
$ gitdoneAll: strict 0% (0/4), weighted 0% · next: row 1 (Sign-in)  All  strict ░░░░░░░░░░░░░░░░   0%  weighted ░░░░░░░░░░░░░░░░   0%

It says where things stand and what comes next. gitdone next lists the rows to work on now, and gitdone rows --open lists everything left.

3. Work, and name the row in the commit message

console
$ git add signin.py && git commit -q -m 'row 1: sign-in'
$ git switch -q -c search && git add search.py && git commit -q -m 'row 2: search by title'
$ git switch -q main

The second commit is on a branch, for the next step. Naming the row is how gitdone focus knows where the work went, and nothing else depends on it.

4. Move a row when the work moves

console
$ gitdone shipped 1 b942cf2row 1: Not built → Live (verified: commit b942cf2 is on main)All: strict 25% (1/4), weighted 25% · next: row 2 (Search)to commit: git add status-table.md STATUS.md
$ gitdone mark 2 built --branch searchrow 2: Not built → Built, not liveAll: strict 25% (1/4), weighted 45% · next: row 2 (Search)to commit: git add status-table.md STATUS.md
$ gitdone mark 3 partial "CSV works, PDF does not yet"row 3: Not built → PartialAll: strict 25% (1/4), weighted 55% · next: row 2 (Search)to commit: git add status-table.md STATUS.md

Only these move the numbers, and each one is held to its rule. Git is asked, and shipped refuses a commit that is not on the default branch, or one that only reverts another.

The work isCommandStrictWeighted
On the default branchgitdone shipped 3 <commit>, or HEAD, 'PR #12', 'MR !12', 'tag v1.2'Counts1.0
Finished on a branch that existsgitdone mark 3 built --branch NAMENo0.8
Partly theregitdone mark 3 partial "what exists"No0.4
Not there after allgitdone mark 3 "not built"No0

The weights are yours to change in .gitdone.json, and so are the kinds. With a remote, shipped wants the commit pushed, and mark --branch wants the branch pushed.

5. Change the scope out loud

console
$ gitdone add "Password reset"added row 5All: strict 20% (1/5), weighted 44% · next: row 2 (Search)to commit: git add status-table.md STATUS.md
$ gitdone remove 4row 4 (Reports) is out of the scope; `week` will say soAll: strict 25% (1/4), weighted 55% · next: row 2 (Search)to commit: git add status-table.md STATUS.md

Adding a row lowers the percent, and that is the point: the cost of a feature is on the table when someone decides to take it. Rows and domains can also be edited by hand in status-table.md, followed by gitdone render --write.

6. Commit the table and the view together

console
$ git add status-table.md STATUS.md && git commit -q -m 'Sign-in is live'result: PASS

The gate runs here, and it stays out of any commit that does not touch the tracker. Each command's to commit: line names the files, including a badge if you keep one.

7. Read it back

console
$ gitdoneAll: strict 25% (1/4), weighted 55% · next: row 2 (Search)  All  strict ████░░░░░░░░░░░░  25%  weighted █████████░░░░░░░  55%
$ gitdone week "1 month"No commit of the table before 1 month ago; since its first commit (d72f82a, 2026-03-02): All strict 0→1 of 4 (0%→25%), weighted 0%→55%. Moved: 1 Not built→Live; 2 Not built→Built, not live; 3 Not built→Partial. 1 rows are new since then. Removed: 4 (was Not built). Focus: 1 of 1 commits on plan, 0 unclear, 0 upkeep, 0 off plan.

gitdone focus says where the commits went. gitdone chart, gitdone report and gitdone portfolio are above. gitdone doctor checks the whole setup on one screen.

8. When the gate says no, believe it

It names the row and what to do. A reverted commit fails until someone says what is true now, with gitdone mark, or with gitdone shipped on the new commit. The rules.

Going further: the status table, the plan file, and groups, workstreams and asks in a full example.

What the gate does

text
# Four things must exist for this to be done.$ gitdone init --rows "Sign-in, Search, Export, Reports" --hookwrote .gitdone.json, status-table.md (4 rows) and STATUS.mdAll: strict 0% (0/4), weighted 0% · next: row 1 (Sign-in)
# The agent says sign-in shipped, and names a commit from its spike branch.$ gitdone shipped 1 705af2arefused, nothing changed: commit 705af2a is not on mainStill on a branch? Record it with: gitdone mark 1 built --branch NAME
# The commit that really landed:$ gitdone shipped 1 660d81arow 1: Not built → Live (verified: commit 660d81a is on main)All: strict 25% (1/4), weighted 25% · next: row 2 (Search)to commit: git add status-table.md STATUS.md
# Someone types Live into the table by hand, with nothing behind it.$ git add -A && git commit -m 'Search is live'FAIL row 2 names no commit, pull request or tag; run `gitdone shipped 2 <commit>`result: FAIL in --strict, evidence is missing or partly disproved
# Later, sign-in is reverted on main. The claim stops holding.$ gitdone checkFAIL row 1 (Live): commit 660d81a was reverted on main by 3f6610b  what is true now? gitdone mark 1 <kind> <words>, or shipped 1 <the new commit>result: FAIL, 1 contradicted or inconsistent
# Your agent says it shipped. Git decides.

Every line above is real output, with the longer commands trimmed: docs/demo/record.py runs it, and a test keeps this copy true.

  • It reads what the commit will contain. The local hook judges git's index, not your disk, and stays out of every commit that does not touch the tracker. Sixty claims in a repository of a thousand commits take about 0.2 seconds.
  • Claims can stop holding. Each run checks each row again. A reverted commit, through git revert or GitHub's button, turns its row into a failure until someone says what is true now, and the headline says so.
  • No flag skips the Action. The hook is a courtesy that lives in one clone. The Action judges what arrived, whatever skipped the hook.
  • Agents are held to it. They read what they are told, and they stop when a command refuses. An agent that cannot get shipped to accept its commit has told you something true, before the review instead of after the release.

What it writes

FileWhat it isWho edits it
status-table.mdThe table: one row per capability, one status eachYou, or shipped, mark, add, remove
STATUS.mdThe view: the numbers, what is left, what is live and whyNobody: it is generated
.gitdone.jsonThe plan: the title, the repository, the kinds and their weightsYou, rarely

STATUS.md after the session in the gate's demo, in a project with no groups or workstreams:

kiosk: 4 rows

  • Strict: 1 of 4 live · █████░░░░░░░░░░░░░░░ 25%
  • Weighted: █████░░░░░░░░░░░░░░░ 25%
  • Built, not live: 0 · partial: 0 · not built: 3
DomainRowsLiveBuiltPartialNot builtStrictWeighted
1. Scope4100325%25%███░░░░░░░░░

What is left: 3 of 4 rows

#NameStatusNote
2SearchNot built
3ExportNot built
4ReportsNot built

Live: 1 of 4 rows

#NameEvidence
1Sign-in(Live 2026-03-04: 660d81a; was Not built)

Tracked with gitdone: every Live row names its evidence, and git holds it to that.

Where the work went

A percent does not say why a month became three. These do, from the same two files, and none of them can stop a commit.

console
$ gitdone focusLast 14 days: 13 commits, 1,437 lines changed.  On plan    8   62%    373 lines   26%  rows 7 (2), 10 (2), 3 (1), 6 (1), 9 (1), 15 (1)  Upkeep     2   15%     34 lines    2%  Off plan   3   23%  1,030 lines   72%  in printer (620 lines), theme (410 lines)
Off plan or unclear, newest first:  2fb7709 Rewrite the receipt printer driver again (280 lines, printer)  f8ebf86 Try a new theme engine for the kiosk (410 lines, theme)  1fbaa7d Rewrite the receipt printer driver (340 lines, printer)
Next on the plan: S1 (Reading lists and renewals). It needs the head librarian's word at release.Off plan is not wrong, only unplanned. If it belongs, `gitdone add "<what it is>"` puts it in the scope, and the percent moves.To tie a commit to a row, name the row in its message: `row <number>`.
  • focus sorts recent commits into on plan, unclear, upkeep and off plan, with the reason for each. Off plan is not wrong, only unplanned: the numbers are named while there is still time to ask why. A hook says one line when a commit was off plan, and --no-focus leaves it out.
  • next lists the rows to work on now, in the plan's order.
  • matrix ties each requirement in your spec to its row, evidence and tests, read from git each time, and names the two gaps: a requirement no row names, and a row nobody asked for.

How each is worked out, and what it cannot tell.

What installs, and when it runs

Measured from the code, and SECURITY.md has the rest.

DependenciesNone: Python 3.9 or newer and its standard library
Processes it startsgit. gh or glab, only for a row that names a pull request or merge request, and never with --offline
Files it writesThe table, the view and the badge (shipped, mark, add, remove, render --write), what init creates, the workflow (install-ci), what you pass to --out. Reading commands write nothing
Git hooksOnly with install-hook or init --hook. In .git/hooks, never committed, and it refuses to replace a hook it did not write. post-commit only ever says a line, and --no-focus leaves it out. With no engine left on the machine, a commit that touches the tracker falls back on uvx gitdone, which fetches the latest release
NetworkNone of its own, apart from that fallback
Telemetry, model callsNone
Claude Code pluginOne SessionStart hook that prints a line and can never stop a session, two skills, no agent

Commands

CommandWhat it does
gitdoneWhere the project stands, on the scale, what is next, and whether the gate holds. Also status, opener
initStart a tracker: --rows, --from-checklist FILE, --from-issues [LABEL], --hook, --ci, --agents, --badge
shipped <row> <evidence>Move a row to Live, or refuse. Evidence is a commit id, HEAD, PR #12, MR !12 or tag v1.2, quoted in a shell. --allow-unverified takes a claim nothing here could ever check, and the note says so
mark <row> <kind> [note]Move a row short of Live, held to that kind's rule. --branch NAME
add <name>, remove <row>Change the scope and keep the counts true. --domain, --new-domain, --kind, --note
rowsList rows. --open, --kind, --domain
checkThe gate. Plain, it fails only on a proven contradiction. --strict, what the hook and the Action run, fails on anything not checked. --offline, --if-staged. Rules and exit codes
nextWhat to work on now: the next workstream's open rows
focusWhere the commits went: on plan, unclear, upkeep or off plan. --days, --all
matrixA traceability matrix: requirement, row, evidence, tests. --out, --offline
link <row> <id>Tie a requirement to a row, by putting its id in the row's note. The status does not change
week [since]What moved since a date, a span or a commit, from the table's git history
render, countsPrint the view or the counts table. render --write writes the view; counts --write updates a counts table you pasted into the table
chartThe burn-up: --out FILE for an SVG, --csv, --json, --group. --scale draws how far along each part is today
badgeThe numbers as a badge: --svg FILE, --endpoint FILE, --keep, --label
reportThe evidence behind the numbers, row by row. --out, --offline
portfolio [folder...]Every tracked project under a folder. --out
doctorEverything the tracker needs here, on one screen. --offline
whereWhich plan this folder resolves to
install-hook, install-ci, install-agents, install-skillThe local gate (--lenient only warns about missing evidence, --no-focus leaves out the post-commit line), the GitHub Action, the AGENTS.md section, a project-level skill
ci, mcpWhat the Action runs, and read-only tools over stdio
etaExperimental: a line through the table's history, on request. --days, --group, and chart --burndown draws it. The FAQ says why it is off by default

--json works on gitdone, status, check, next, eta, focus, matrix, week, where, rows, report, doctor, chart and portfolio: the shapes.

The method, in one paragraph

The table is the one place a status changes, and only on a release or a reviewed branch, never because work started. The view is generated from it, and nobody edits it by hand. Rows are capabilities a stranger could check, not tasks, so the table is also your definition of done, reviewed like code. The whole method is a page, and it works without the tool. For more depth: the status table, the plan file, evidence and the gate, focus, traceability and the date.

How it compares

These tools are good at other jobs, and most pair well with this one.

The question it answers"Done" meansIs the claim checked against git?
gitdoneHow far along is this scope, provably?A commit on the default branch or a merged PR says soYes: at commit time, in the PR, and again after a revert
Task trackers for agents (beads, Backlog.md, Taskmaster)What should the agent do next?Someone closed the taskNo
Spec tools (spec-kit, OpenSpec)What are we building?The tasks under the spec got tickedNo
Issue boards (GitHub Projects, Linear)Who is doing what?The issue is closedA linked PR can close it; nothing checks it stayed merged
Claim checkers (agent-claimcheck)Did this agent do what it just said?The session's trace supports itAt claim time, for one claim, with no view of the project
Delivery forecasts (Jira, LinearB, Jellyfish)When will it ship?The ticket closedAgainst activity, not against what a row claims
Traceability tools (Jama, Polarion, DOORS)Is every requirement covered?Someone linked and approved itNo, and someone keeps it by hand
VerdictIs what shipped any good?A QA verdict with evidenceYes, about quality. The sibling of this tool, and a plan can show its record

FAQ

What gets past the gate? The hook is a courtesy and CI is the gate: --no-verify, a rebase or a cherry-pick skip the hook, and the Action judges what arrived. A real commit cited for the wrong row passes, and a reviewer sees that on one line of the diff. A pull request can edit the gate's own rules, and the Action says so out loud. The rules, and what the gate cannot tell.

A commit was reverted and the number did not drop? The number is what the table says, and only a person moves a row. The gate fails, and the headline says so, until someone says what is true now. Then the number moves, in a commit with their name on it. The view and the badge change the same way.

Can a row just be deleted? Yes: scope is a person's decision, in a diff with their name on it. week and the Action's comment say which rows left, the chart's top line moves, and rows_total in the plan makes it a deliberate edit.

Two branches moved rows, and the table conflicts? Resolve status-table.md as you would any file, then gitdone render --write. The gate names a conflict marker it finds. The view is generated, so either side will do.

Does it read my code? No. A status is a person's claim, and the engine holds the claim to its evidence. It proves a commit is on the default branch, not that the commit holds the feature. The claim and its commit sit on one line of the table's diff, where a reviewer sees them.

Will it say when the project will be done? Not unless you ask. No percentage is a date. gitdone eta draws a line through the table's own history and says what it is: a line, with a range, not a promise. It is experimental, so until 1.0.0 it shows only when asked for. "dates": true in a project's plan puts it beside the percent there. What it cannot tell.

Can focus stop a commit? No. Off plan is not wrong, only unplanned. The hook says one line after the commit, and --no-focus takes it out. The numbers exist so that someone can ask, while it still matters.

We squash-merge. Cite the squash commit, or the pull request. A branch's old tip is not on the default branch.

A monorepo? One tracker per package: the nearest .gitdone.json wins. repo can also point elsewhere, so a tracker may live apart from the code it measures.

GitLab? MR !12 is verified through glab. So far that path is tested against a stub of glab, not a real GitLab; a report from one is welcome.

Windows? The suite passes there in CI, on the oldest and the newest Python. The tests that need a POSIX shell are left out, so the hooks, which are sh and which Git for Windows runs, are the less proven part.

No git at all? It still renders and counts, and every claim stays unproven until there is a repository.

Do I need the plugin? No. The engine stands alone. Everything else is a thin layer over the same commands.

This repository tracks itself

STATUS.md is this project's own view, under its own gate, with this roadmap as its scope. The rows that are Live name the commits that made them so. Its scale and its burn-up, published by the Action on every push:

[This repository's own scale: how far along each part of it is.] [This repository's own burn-up chart, from its status table's git history.]

Contributing

CONTRIBUTING.md. The reports that matter most: a claim the gate accepted and should not have, or refused and should not have.

Sponsor

GitDone is free and MIT-licensed. If it keeps a false "done" out of your project, you can sponsor its development on GitHub.

License

MIT.

GitDone is an independent project, not affiliated with or endorsed by the Git Project. Git is a trademark of Software Freedom Conservancy.

來源:README.md,提交 0d76e35

工具

10

status

Where the project stands: strict and weighted percent per group, the next workstream, what it needs.

輸入參數project

rows

The rows of the status table, optionally only the ones not yet at the strict kind.

輸入參數openproject

evidence

Every row with what it claims as evidence, and what git and gh say about each claim.

輸入參數offlineproject

check

Run the gate: is the view true, do the counts sum, does each status have its evidence. Writes nothing.

輸入參數offlineproject

week

What moved since a date, a span like '2 weeks', or a commit, from the table's git history. Default: 7 days.

輸入參數sinceproject

eta

When it will be done if the work goes on as it has: a line through the table's git history, with a range, the scope's effect and the deadline. Experimental: give a date only when asked when it will be done, quote its words, and say it is a line.

輸入參數project

focus

Where the recent commits went: on plan, upkeep or off plan, with the reason for each. A signal, never a gate.

輸入參數daysproject

next

What to work on now: the next workstream's open rows. Anything else is a change of scope, so say so before starting it.

輸入參數project

matrix

A traceability matrix: each requirement, the row that holds it, its evidence and the tests on record. A test listed exists; passing is CI's word.

輸入參數offlineproject

portfolio

Every tracked project under a folder: strict, weighted, next, and the gate read offline.

輸入參數folder

版本歷史

2
  1. v0.3.0最新Nov 1, 2026
  2. v0.2.0Nov 1, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分