Repository navigation
v1.0.0
Server(サーバ版)
1.0.0 is the first release that is not a release candidate. The changes below
are relative to v1.0.0-rc.5; "What 1.0.0 ships" at the end of this section
is an overview of the whole server and CLI, and the sections of the release
candidates below record what changed between them. The biggest change since
rc.5 is evidence: issues can carry attached files, and closing an issue that
has verify commands needs one by default. If you upgrade a server from rc.5,
read "Moving from 1.0.0-rc.5" first. A MySQL app user with the minimum grants
needs new ones.
Added
- Attach evidence files to an issue. Test output, screenshots and
generated reports can now be attached to an issue as files and kept on the
server, with who attached them and when. From the CLI, use
looptrack issue attach <ID> <file>..., or--attach <file>on
issue commentandissue verify;verify --attach-outputputs the full,
untruncated output on the verify record.verify --listand--lastcan't
be combined with--attachor--attach-output; the CLI says so and sends
nothing. The MCP tools take no files, so an
agent sends them with the CLI and passes the IDs inattachmentsof
report_verifyoradd_comment, andget_issuelists them. In the browser
the comment box takes a file you pick, drop or paste, and the drawer lists
the attachments and shows images in place. The REST API gains
POST /api/v1/issues/{id}/attachments(the body is the file, the name goes
inX-Looptrack-Filename),GET /api/v1/issues/{id}/attachments,
GET /api/v1/attachments/{id}andPOST /api/v1/attachments/{id}/purge.
The CLI refuses to send a text file that looks like it holds a secret, since
the server can't mask it. Attachments can't be deleted; an administrator
purges the file itself on the new admin page/admin/attachments, which
also sets the limits (20MiB per file and 1GiB per project by default) and
shows the usage per project. - Attachments live on disk, so backups now come in two parts. The records
go into the database (migration 0007 addsattachmentsand
attachment_purges, anddeploy/grants.sqlgives the app user SELECT and
INSERT on both) and the files into a directory:LOOPTRACK_ATTACH_DIR, else
$STATE_DIRECTORY/attachments, elseattachmentsnext to a SQLite
database. With none of them, the server runs and only attachments are
unavailable. install.sh adds
LOOPTRACK_ATTACH_DIR='/var/lib/looptrack/attachments'to.envon install
and on--upgrade. The compose.yaml fromlooptrack setupnow mounts
./data:/datawith MySQL too and sets/data/attachments; a MySQL
compose.yaml written by an earlier setup has no writable volume, so
--upgradeleaves it alone and prints what to do: add- ./data:/datato
the volumes andLOOPTRACK_ATTACH_DIR: /data/attachmentsto the
environment, createdataowned by 65534:65534, and run
docker compose up -d. Until then only attachments are unavailable. Back up the database first and
the attachment directory second. The backup--upgradetakes doesn't include
attachments.looptrack exportwrites the attachment files to
<slug>/attachments/<sha256>and a manifest to<slug>/attachments.json
(file name, size, SHA-256, author, time, issue, and the comment or verify
record it was attached to), andlooptrack verify-fileschecks the files
against the SHA-256 in the manifest. An attachment whose file can't be
exported is listed asmissingandexportexits with 1.looptrack import
doesn't carry attachments and says so when it finds a manifest.
looptrack repair-attachmentsreports files missing from the directory and
files nothing points to;--applyremoves the latter once they are an hour
old. A least-privilege MySQL app user needs grants on the two new tables.
After the migration,install.sh --upgradechecks every table in
deploy/grants.sqlwith the newlooptrack grants check, and when some
lack grants it asks for the admin credentials on the terminal and grants
them again. On a systemd server,LOOPTRACK_INSTALL_DB_ADMIN_PASSWORD_FILE
passes the password instead. You can also runlooptrack grants apply
yourself. Raise the body limit of the proxy in front to
the per-file limit, since nginx'sclient_max_body_sizedefaults to 1MB.
See "添付の置き場とバックアップ" indocs/server/DEPLOY.md. looptrack grants checktells whether the MySQL app user has every grant
it needs. It checks each table indeploy/grants.sqlfor the user in
LOOPTRACK_DSN. With every grant in place it exits with 0; otherwise it
prints the tables and the missing privileges and exits with 3. With SQLite
there is nothing to check, and it exits with 0.install.shruns it after
the migration, and the last check oflooptrack grants applylooks at
every table too.- CLI:
looptrack self-updateupdates from GitHub releases when no server
URL is set. With neither--urlnorLOOPTRACK_API_URL, it no longer
stops with "No server URL". It picks a version from the GitHub release list
the same way the desktop app and the server do (semver tags only, never
/releases/latest, rcs too when you run an rc) and downloads the server
archive for your OS and CPU. The archive is checked against the signed
SHA256SUMS; only thelooptrackinside is extracted, and that file is
checked against its own line in the sameSHA256SUMSbefore it replaces the
running one (.oldon Windows, as before). The signature is mandatory: a
build without the public key stops without contacting GitHub, and so does any
build withLOOPTRACK_UPDATE_CHECK=off. This path replaces the file only when
a newer version exists, so it refuses--force(exit code 2).
--from github|serverpicks the source explicitly, and a failure on one never
falls back to the other. With--urlorLOOPTRACK_API_URL, nothing changes. - The web UI remembers how you left the board. The view, the search
words and the filters (type, priority, ready only, hide closed, unanswered
feedback, label and assignee) are kept per project in the browser's
localStorage and come back the next time you open that project. The sort
order was already kept. A label or an assignee the project no longer has is
dropped when the board loads. - The browser tab shows the Looptrack icon. Every page, the first-run
setup page included, links the same picture as the desktop app's icon, and
the server answersfavicon.icounder its base path without sign-in. - The web sign-in page has a "Keep me signed in" checkbox. It is off by
default, and a session without it works as before: it ends 7 days after
sign-in, or after 12 hours without use. A session with it is not ended for
being idle. Its expiry, on the cookie and in the database, moves to 400 days
after the last access each time the last access is recorded (every 5
minutes); 400 days is the longest cookie lifetime Chrome accepts. The choice
carries through the two-factor step, registering and removing two-factor
auth on the account page, and a password change. Signing out, disabling the
user, making two-factor auth required and an administrator revoking
sessions all still end it. Migration 0008 adds thepersistentcolumn to
web_sessions; the grants indeploy/grants.sqldo not change.
Changed
- Closing an issue as Done needs evidence by default. On an issue whose body
holds at least one verify command, the server rejects Done unless the latest
verify record for the current body carries an attachment, and it rejects a
missing record too. This is the new per-project rule
verify.require_evidence, on by default even in a project with no rules at
all. It applies on every path (CLI, MCP, REST, Web) and can be overridden
with a reason (--override "reason",override_reasonover MCP), which
leaves arule_overridewithrule: verify_evidence_required. A project
that wants the old behavior sets"verify": {"require_evidence": false}with
looptrack project rules setand gets a note instead of a rejection. The
guide, the MCP instructions, the verify plan, the close step ofnextand the
kit tell the AI to attach the full test output, screenshots and generated
files.
An issue created directly as Done with a verify command in its body is
rejected the same way, since it can't have a record yet. A record whose
attachment is purged later still counts as having evidence.
Clients up to 1.0.0-rc.5 have no--attach,--attach-outputor
issue attach, even though the server's wording names them, so they can only
close such an issue with an override. Update the clients first. A server older
than this one rejects rules that contain the key, so remove it before going
back to an older version (see the upgrade section ofdocs/server/DEPLOY.md). - Windows: the server and client
looptrack.execarry version
information. Both the amd64 and the arm64looptrack.exehave a
VERSIONINFO resource. Its ProductName isLooptrackand its ProductVersion
is the build version as is, release candidates included. The release build
reads both values back from every exe it makes and stops if either is missing
or wrong. The tool that writes the resource changed from rsrc to go-winres
(0BSD, build-only).looptrack.exestill has no icon. - The server rejects comments with no text and no attachment. A comment
whose text is empty or only whitespace, with no attachment, now gets a 400
(comment_empty) from REST, MCP, the CLI and the web UI alike. Comments
cannot be deleted, so one empty comment would stay for good. An older client
or your own script that sent empty comments will now get that error.
Attachment-only comments still work (over REST, send"text": ""). When you
change an issue's status with a whitespace-only comment, no comment is
created: the status changes and the response has no "Comment added" line. - The compose.yaml from
looptrack setupno longer names a file that isn't
there. Its header said it was based ondeploy/compose.yaml, which the
repository doesn't have. That sentence is gone; the rest of the header is
unchanged. - The Japanese text that
initwrites, and the kit's rules and skills,
use one consistent style. The sectionlooptrack issue initputs into
CLAUDE.mdandAGENTS.md, the five rules of the loop layer and the
issue,iterateandsession-handoffskills were rewritten in the polite
form throughout, with asides in parentheses turned into sentences.
Commands, paths and line counts are unchanged, so the next init or kit
update changes only that wording. The English working-discipline rule had
the same asides rewritten.
Fixed
- The issue drawer in an English browser shows the comments heading in
English. Background, Details and the other sections already followed the
screen's language, but the comments section kept its Japanese heading. The
stored body still uses that heading as the marker that separates the body
from the comments, so only the browser swaps it for the screen's language
when it draws the drawer. Nothing stored changes. - The project picker in English says "1 project" when there is one. The
line under the heading read "1 projects". It now uses the singular for one
project and the plural otherwise. The Japanese line is unchanged. - English messages say "1 issue", not "1 issues", when the count is one.
More than 30 messages in the CLI, the REST API, the MCP tools and the
reports printed a count of one in the plural, such as "1 issues" or "1 files".
They now use the singular for one, and keep the plural for zero and for two
or more. Messages already written with "(s)" and all the Japanese text are
unchanged. - AI agent hooks: the guards catch commands hidden behind a heredoc,
$'…'or a comment, and decide on long commands too. The git, secrets,
wait-loop and scope guards dropped the line after a<<that the shell
does not read as a heredoc: part of<<<, inside quotes or a comment, or
inside$((…))and${…}. They also dropped the body ofcat <<EOF | sh
andbash <<EOF, which the shell runs, and lost track of quotes after
$'…'or an apostrophe in a comment. The scope guard didn't look past a
pipe with no space around it (echo a|git …). In each case a real command
went through unchecked. Each guard reads a command in several more ways and
stops it when any of them matches, so nothing it stopped before goes through.
Unwrapping a nested shell took time in proportion to the number of quotes
times the length, so a command of 20 to 30 KB reached the 4-second limit
and went through with no decision. After the rewrite, a 300 KB command was
decided in under a second and a 1 MB one in 2.3 seconds on the machine it
was measured on; a command that still runs past the limit goes through, as
before. The body of a heredoc whose terminator is quoted with a backslash
(<<\EOF) is still checked word by word, so if that stops you, write
<<'EOF'. - AI agent hooks: the handoff hook no longer misses a
close. The hook
that notices finished work, so that the handoff check asks for an update,
skipped acloseon the line after a comment, after a<<inside quotes
or arithmetic, or in the body ofcat <<EOF | sh. It reads heredocs and
comments the same way as the guards do. looptrack handoff -hand--helpprint the usage.handoff append -h
used to append-hto the handoff and succeed.-hand--help, before or
after the subcommand, now print the usage and write nothing, and a word like
-xis rejected as a mistyped option. Anything after--still goes in as
text.- In a clone of Looptrack's own repository, setup and
initno longer end
in an error. There,initused to fail, so the setup tool's
download-and-init command ended in an error even thoughlooptrackhad
already been replaced. For that repository the setup tool returns only the
download step, andinitwrites nothing, says it isn't needed and
exits with 0.doctorno longer suggests running it. initwrites the guidance section in CLAUDE.md and AGENTS.md in English
for English users. The section went in Japanese whatever the language. It
now follows the language of the rest ofinit's output, read from
LOOPTRACK_LANG,LC_ALL,LC_MESSAGESandLANGin that order. Running
initagain in the other language replaces the section rather than adding
a second one, and anything written outside it stays.- The
compose.yamlthat setup writes no longer pulls an image of the same
name from a registry. With Compose v5.5.1,docker compose uptried to
pulllooptrack:latestbefore building, although the comment in the file
said that never happens. The file now setspull_policy: build, so the
image is always built from the Dockerfile next to it. On a server you set
up earlier, addpull_policy: buildunderbuild:incompose.yaml. - The admin project list in English reads "your role here: admin". It
said "you are a admin here", because the article was wrong for any role
that starts with a vowel. The Japanese line is unchanged.
Docs
- Windows: what to do when it blocks the unsigned binaries outright.
Getting started, the README and the FAQ cover Smart App Control on Windows 11,
which blocks unsigned apps with no "Run anyway" and no way to allow a single
app, and PCs whose administrator blocks unsigned apps by policy. The FAQ also
points to checkingSHA256SUMSitself againstSHA256SUMS.minisig. - Screenshots in the user guide and the README. Getting started for the
desktop app and the server, the daily-use page and the README now show the
screens they describe, in the language of each page. Every picture is taken
bydeploy/dev/screenshots.shfrom a throwaway server that holds only
made-up data. - The user guide has one entrance per edition. The pages for the server
are underdocs/guide/server/and those for the desktop app under
docs/guide/desktop/; the desktop page is split into getting started,
using, updating and troubleshooting. The old pages (desktop.md,
getting-started.md,admin.mdandupdating.md) remain as short pages
that link to the new ones, so links in installers and READMEs up to rc.5
still work. - Two changelogs. Changes for the server are in
CHANGELOG.mdand those
for the desktop app inCHANGELOG-desktop.md, and a change that affects
both is in both. A GitHub release takes the same version from both files
and shows them under "Server" and "Desktop app".
Moving from 1.0.0-rc.5
- This version adds migration 0007 (
attachmentsandattachment_purges)
and migration 0008 (apersistentcolumn onweb_sessions). A MySQL app
user with the minimum grants needs SELECT and INSERT on the two new tables;
0008 needs no new grant, because the app user already has UPDATE on
web_sessions.
After the migration,--upgradechecks the grants on every table and, if
any are missing, asks for the admin credentials on the terminal and grants
them again; on a systemd serverLOOPTRACK_INSTALL_DB_ADMIN_PASSWORD_FILE
can pass the password.looptrack grants checkshows what is missing, and
looptrack grants applygrants it. - On MySQL, run the
--upgradefrom a terminal. The automatic upgrade (the
timer of--auto-upgrade on) doesn't replace a version that adds
migrations on MySQL, so it leaves the server on rc.5. With the minimum
grants the app user can't create the tables of 0007 or run the ALTER TABLE
of 0008, so pass a connection that can inLOOPTRACK_SETUP_MIGRATE_DSN.
Without it,--upgradelists the pending migrations and asks whether to
stop the service and go on. The default answer is no, and--yestakes the
default, so it ends without changing anything.sudodrops environment variables; "更新(--upgrade)"
indocs/server/DEPLOY.mdshows how to pass it. - Attachments need a directory. On a systemd server,
install.sh --upgrade
addsLOOPTRACK_ATTACH_DIRto.env. With acompose.yamlthat has no
place for them (a MySQL one written by an earlier setup),--upgrade
prints the steps: two lines to add, thenmkdirandchownfordata. - Raise the body limit of the proxy in front to the per-file limit (20MiB by
default). nginx'sclient_max_body_sizeis 1MB unless you set it; the
nginx example that install.sh prints already sets
client_max_body_size 20m;. - Update the clients first. Clients up to rc.5 can't attach files, so they
can close an issue with verify commands only with an override. A project
that wants the old behavior sets"verify": {"require_evidence": false}. - Back up the database first and the attachment directory second. The backup
that--upgradetakes doesn't include attachments.
What 1.0.0 ships
- Cross-project issue tracking. One server holds the issues of many projects.
Each project has its own ID prefix and zero-padded width (MYP-0001), its own
rules and its own guide document. The database is the source of truth; nothing
is committed into the source repositories being tracked. - Loop-shaped workflow.
nextpicks the issue to work on and enforces the
rules for starting it;verifyruns the commands written in the issue and
records the result;summaryreports three nested loops at the start of every
session (the current round, decisions waiting for a human, feedback coming from
outside). Comments and events are append-only, and closed issues are immutable. - Per-project rules enforced by the server. Required comments, forbidden
status transitions andverify.require_on_closeapply to every access path
(REST, MCP, CLI, Web) because they are checked in one place. - REST API at
/looptrack/api/v1with per-user access tokens (expiry,
revocation, last-used time). - Remote MCP server at
/looptrack/mcp, reachable with OAuth 2.1 or a token,
including asetuptool that wires a project up from the MCP connection alone,
andguide/review/loopprompts. - Web UI: project picker, board / list / trace views, forms to create
issues, change their status, comment, assign them and attach files,
account settings (tokens, password), and user administration.
Sign-in is ID + password (argon2id) with TOTP, required or optional per server.
A "Keep me signed in" checkbox on the sign-in page ends the idle timeout. - CLI (
looptrack issue): create, edit, comment, status, close, list, show,
next, verify, summary, guide, export, andinitto wire a project up in one
command.looptrack issue login --browsersigns in through the browser and
refreshes the token from then on. - Hooks and the distribution kit. The
corelayer (session summary, issue
freshness guard, token accounting) is always installed; the optionalloop
layer adds output/working/iteration discipline rules, task-mode and scope
guards, handoff freshness and a runaway-process guard. Wiring is described by
a manifest and generated for Claude Code, Codex and GitHub Copilot. - Token accounting. Usage is recorded per session, per agent and per stage of
the loop, attributed to issues, and rendered as a PDF report
(looptrack report pdf) with an embedded font. - Setup and installation.
looptrack setupasks a handful of questions and
writes.env(andcompose.yamlfor a team server) plus the first
administrator.deploy/install.sh(POSIX sh) does fetch → setup → start →
health check on a fresh Linux server, prints nginx and Caddy examples, and also
handles--upgradeand--uninstall. A Dockerfile and a Compose file are
provided as well. - Local mode. A single-user server bound to 127.0.0.1 with SQLite and no
sign-in, for people who do not want to run a shared server. The desktop app
(see its own changelog) is built on it. - Signed release artifacts.
SHA256SUMSsigned with minisign, macOS binaries
signed with a Developer ID and notarized, andlooptrack self-updateverifying
the signature before replacing the binary. Every artifact ships aNOTICEwith
the full license texts of the third-party components. - Markdown export.
looptrack exportwrites issues back out as Markdown, so
the data is never locked in. - Worktree housekeeping.
looptrack worktree listshows every git worktree
with the one thing you need to decide on it — merged or not, uncommitted
changes (ignoring build leftovers), locked, and when it last moved — and
looptrack worktree prunecleans up. It never deletes anything unless you pass
--yes, never touches the main worktree, and keeps anything that moved
recently, because another session may still be inside it.
1.0.0 はリリース候補ではない最初の版です。下の変更は v1.0.0-rc.5 からの差分で、この節の最後の「1.0.0 の全体像」にサーバと CLI の全体をまとめました。rc の間に何が変わったかは、下の各 rc の節にあります。rc.5 からのいちばん大きな変更は、エビデンスの添付。イシューにファイルを添付できるようになり、検証コマンドのあるイシューを Done にするには既定で添付が要ります。rc.5 のサーバを上げるなら、先に「1.0.0-rc.5 から上げるとき」を読んでください。MySQL のアプリ用の利用者を最小権限にしているなら、新しい権限が要ります。
追加
- イシューにエビデンスのファイルを添付できます。 テストの出力・画面のスクリーンショット・生成したレポートを、ファイルのままイシューに付けてサーバに残せるようになりました。誰がいつ付けたかも残ります。CLI では
looptrack issue attach <ID> <ファイル>...か、issue comment・issue verifyの--attach <ファイル>を使います。verify --attach-outputは、切る前の出力の全文を verify の記録に付けます。verify --list・--lastと--attach・--attach-outputは一緒に使えず、CLI はそう伝えて何も送りません。MCP のツールはファイルを受け取らないので、AI は CLI で送って、返った ID をreport_verifyかadd_commentのattachmentsに渡します。添付の一覧はget_issueにも載ります。ブラウザでは、コメントの欄でファイルを選ぶ・ドロップする・貼り付けるのどれでも添付でき、ドロワーに一覧が出て画像はその場で見られます。REST にはPOST /api/v1/issues/{id}/attachments(本文はファイルそのもので、名前はX-Looptrack-Filename)・GET /api/v1/issues/{id}/attachments・GET /api/v1/attachments/{id}・POST /api/v1/attachments/{id}/purgeが増えました。テキストのファイルに秘密らしいものがあれば、CLI は送らずに止まります。サーバでは中身を隠せないからです。添付は消せません。管理者が新しい画面/admin/attachmentsで本体を消去します。同じ画面で上限(既定は 1 ファイル 20MiB・1 プロジェクト 1GiB)を変え、プロジェクトごとの使用量も見られます。 - 添付の本体はディスクに置くので、バックアップが 2 系統になります。 記録は DB に入ります。migration 0007 が
attachmentsとattachment_purgesを作り、deploy/grants.sqlはアプリ用の利用者に 2 つの表の SELECT・INSERT だけを与えます。本体の置き場はLOOPTRACK_ATTACH_DIR、無ければ$STATE_DIRECTORY/attachments、それも無ければ SQLite の DB の隣のattachmentsです。どれにも当たらないとき、サーバは動いたまま添付だけが使えません。install.sh は、入れるときと--upgradeのときに.envへLOOPTRACK_ATTACH_DIR='/var/lib/looptrack/attachments'を足します。looptrack setupの compose.yaml は MySQL でも./data:/dataを入れ、置き場を/data/attachmentsに決めるようになりました。以前の setup が書いた MySQL の compose.yaml には書ける volume が無いので、--upgradeはそのファイルに触らず、直し方を示します。volumes への- ./data:/dataと environment へのLOOPTRACK_ATTACH_DIR: /data/attachmentsを足し、dataを作って 65534:65534 の持ち物にしてからdocker compose up -dを実行する手順です。それまでは添付だけが使えません。控えは DB を先に、添付の置き場を後に取ります。--upgradeが取る控えに添付は入りません。looptrack exportは添付の本体を<slug>/attachments/<sha256>に、目録を<slug>/attachments.jsonに書き出します。目録にはファイル名・大きさ・SHA-256・作者・日時・イシューと、どのコメントや verify の記録に付いたかが入ります。looptrack verify-filesは、本体が目録の SHA-256 と一致するかを確かめます。書き出せなかった添付は目録にmissingとして載り、exportは終了コード 1 で終わります。looptrack importは添付を運ばず、目録があればそう知らせます。looptrack repair-attachmentsは、置き場から欠けた本体と、どこからも指されない本体を報告します。--applyを付ければ、後者のうち書かれて 1 時間を過ぎたものを消します。MySQL のアプリ用の利用者を最小権限にしているなら、2 つの新しい表の権限が要ります。install.sh --upgradeは migrate の後に、新しいlooptrack grants checkでdeploy/grants.sqlの全部の表を確かめます。権限の足りない表があれば、管理用の資格情報を端末で尋ねて与え直します。systemd のサーバでは、LOOPTRACK_INSTALL_DB_ADMIN_PASSWORD_FILEでパスワードを渡せば尋ねません。looptrack grants applyを自分で実行してもかまいません。前段のプロキシの本文の上限も、1 ファイルの上限まで上げてください。nginx のclient_max_body_sizeは既定で 1MB です。手順はdocs/server/DEPLOY.mdの「添付の置き場とバックアップ」にあります。 looptrack grants checkで、MySQL のアプリ用の利用者に要る権限がそろっているかを確かめられます。LOOPTRACK_DSNの利用者について、deploy/grants.sqlの全部の表の権限を見ます。そろっていれば終了コード 0、足りなければ表と足りない権限を出して 3 で終わります。SQLite では確かめるものが無く、0 で終わります。install.shは migrate の後にこれを使い、looptrack grants applyの最後の確かめも全部の表を見ます。- CLI: サーバの URL が無くても、
looptrack self-updateが GitHub のリリースから更新します。--urlもLOOPTRACK_API_URLも無いときに「サーバの URL がありません」で止まらなくなりました。版の選び方はデスクトップ版やサーバと同じです。semver のタグだけを見て/releases/latestは使わず、rc を動かしていれば rc も追います。取るのは自分の OS と CPU に合うサーバ版の書庫で、署名つきのSHA256SUMSで照合したうえで中のlooptrackだけを取り出します。置き換える前には、同じSHA256SUMSにある自分の行とも照らし合わせます。Windows ではこれまでどおり.oldに退けます。署名は必須です。公開鍵を持たないビルドは GitHub に問い合わせずに止まり、LOOPTRACK_UPDATE_CHECK=offのビルドも問い合わせません。この経路は新しい版があるときだけ置き換えるので、--forceを受け付けません(終了コード 2)。取得元は--from github|serverで明示でき、片方で失敗してももう一方へは切り替えない作りです。--urlかLOOPTRACK_API_URLがあるときの動きは変わりません。 - Web の画面が、ボードを前回の表示のまま開きます。 表示形式・検索語・絞り込み(型・優先度・着手可能・クローズ済みを隠す・未応答の反応・ラベル・担当)を、プロジェクトごとにブラウザの localStorage に残します。次にそのプロジェクトを開くと、残した条件で表示します。並び順は以前から残っていました。プロジェクトに無くなったラベルや担当は、ボードを読み込んだときに外します。
- ブラウザのタブに Looptrack のアイコンが出ます。 初回設定の画面も含めたすべてのページが、デスクトップ版のアイコンと同じ絵を指します。ベースパスの下の
favicon.icoも、サインインなしで返します。 - Web のログイン画面に「ログインしたままにする」のチェックボックスが付きました。 既定はチェックなしで、付けないセッションはこれまでどおり、ログインから 7 日か無操作 12 時間で切れます。付けたセッションは無操作では切れません。期限は Cookie と DB の両方で、最終アクセスを記録するたび(5 分おき)に最終アクセスから 400 日へ延びます。400 日は Chrome が受け付ける Cookie の期限の上限です。チェックは二段階認証の段・アカウント画面の TOTP の登録と解除・パスワードの変更でも引き継ぎます。ログアウト・利用者の無効化・二段階認証の必須化・管理者による破棄では、これまでどおり切れます。migration 0008 が
web_sessionsにpersistentの列を足します。deploy/grants.sqlの権限は変わりません。
変更
- イシューを Done にするには、既定でエビデンスが要ります。 本文に検証コマンドが 1 つ以上あるイシューでは、いまの本文に対する最新の verify の記録に添付が無いと、サーバが Done を拒否します。記録そのものが無いときも拒否です。検証コマンドを書いた本文を Done のまま起票しても、まだ記録が無いので同じく拒否されます。記録の後で添付を消去しても、その記録は添付ありとして数えます。新しいプロジェクト別ルール
verify.require_evidenceの働きで、ルールを何も設定していないプロジェクトでも既定で入っています。CLI・MCP・REST・Web のどの経路にも効き、理由を付ければ上書きできます(--override "理由"。MCP はoverride_reason)。上書きするとrule: verify_evidence_requiredのrule_overrideが残ります。これまでの動きのままにしたいプロジェクトは、looptrack project rules setで"verify": {"require_evidence": false}を設定してください。拒否の代わりに注意だけが返ります。guide・MCP の案内文・verify の計画の文面・nextの close の段・kit も、テストの出力の全文やスクリーンショット、生成物を添付するよう AI に指示するようになりました。
1.0.0-rc.5 までのクライアントには--attach・--attach-output・issue attachがありません。サーバの文面はこれらを案内するのに旧版では使えず、この網の掛かるイシューは上書きでしか Done にできない状態です。クライアントを先に更新してください。このキーを知らない旧版のサーバは、キーを含む rules を拒否します。前の版に戻すときは、先にキーを外してください(docs/server/DEPLOY.mdの更新の節)。 - Windows: サーバ版とクライアントの
looptrack.exeが版の情報を持つように。 amd64・arm64 のlooptrack.exeに VERSIONINFO の資源を入れました。ProductName はLooptrack、ProductVersion はビルドの版そのままで、rc でも入ります。リリースのビルドは作った exe から 2 つの値を読み戻し、無いか違えば止まります。資源を書く道具は rsrc から go-winres(0BSD。ビルドにだけ使う)に替えました。looptrack.exeにはこれまでどおりアイコンを入れません。 - 本文の無いコメントを、サーバが 400 で断るようになりました。 本文が空か空白だけで添付も無いコメントは、REST・MCP・CLI・Web のどこから送っても
comment_emptyの 400 になります。コメントは消せないので、空のものが 1 件入ると残り続けるからです。旧版のクライアントや自作のスクリプトが空のコメントを送っていたなら、エラーが返ります。添付だけのコメントはこれまでどおり通ります(REST では"text": ""を付けてください)。状態の変更に空白だけのコメントを付けたときは、コメントを作らずに状態だけが変わり、応答に「コメント追記」の行は出ません。 looptrack setupが書き出す compose.yaml の見出しが、無いファイルを名乗らなくなりました。 見出しには「deploy/compose.yaml を元にした雛形」とありましたが、リポジトリにそのファイルはありません。この 1 文だけを外し、見出しのほかの行は変えていません。initが書く日本語と、kit の rules・skill の日本語の文体をそろえました。 対象は、looptrack issue initがCLAUDE.md・AGENTS.mdに入れる案内節と、loop の層の rules 5 本、skill のissue・iterate・session-handoffです。地の文を です・ます にし、括弧の補足は本文の文に直しました。コマンド・パス・行数は変えていません。次に init や kit を更新したときに変わるのは文面だけ。英語の working-discipline の rules も、同じ箇所の括弧の補足を文に直しています。
修正
- 英語の画面では、イシューの詳細のコメント節も英語の見出しで描きます。 背景・内容などの節は画面の言語に合わせて出ていましたが、コメント節の見出しだけが日本語のままでした。保存した本文では、この見出しは本文とコメントを分ける目印なので訳しません。描くときにだけ、ブラウザが画面の言語の見出しに替えます。保存した内容は変わりません。
- 英語のプロジェクト選択の画面: 1 件なら「1 project」と単数に。 見出しの下の行が「1 projects」になっていました。1 件のときは単数、それ以外は複数で出します。日本語の行は変わりません。
- 英語の文言で、件数が 1 のときに単数で出るようになりました。 CLI・REST・MCP・帳票の英語の文言のうち 30 件あまりが、「1 issues」「1 files」のように、1 件でも複数形で出ていました。1 件のときは単数にし、0 件と 2 件以上は複数のままです。日本語の文面と、「(s)」で書いていた文言には手を入れていません。
- AI エージェントの hook: ヒアドキュメント・
$'…'・コメントの陰に置いたコマンドをガードが見落とさず、長いコマンドも判定します。 git・秘密・待ちループ・scope の 4 つのガードは、シェルがヒアドキュメントと読まない<<の次の行を落としていました。<<<の一部、引用符やコメントの中、$((…))・${…}の中の<<がこれに当たります。シェルが実行するcat <<EOF | sh・bash <<EOFの本文も落とし、$'…'やコメントの中のアポストロフィの後ろでは引用符の組を見失っていました。scope のガードは、空白を挟まないパイプ(echo a|git …)の後ろを見ていません。どれも、本物のコマンドが確かめられずに通る形です。ガードには読み方を足し、どれか 1 つで当たれば止める形にしました。以前に止めていた形が通るようにはなっていません。入れ子のシェルをほどく段は、引用符の数と長さの積に比例して遅くなっていました。20〜30 KB のコマンドで 4 秒の打ち切りに届き、判定しないまま通していたわけです。書き直した後の実測では、300 KB のコマンドを 1 秒未満、1 MB を 2.3 秒で判定しました。打ち切りを越えたコマンドは、これまでどおり通します。終端をバックスラッシュで引用したヒアドキュメント(<<\EOF)の本文は、いまも語として判定します。それで止まったら<<'EOF'に書き換えてください。 - AI エージェントの hook: 引き継ぎの hook が
closeを取りこぼさなくなりました。 終わった作業に気づき、引き継ぎの更新を求めさせる hook のことです。コメントの次の行、引用符や算術の中の<<の後ろ、cat <<EOF | shの本文にあるcloseを数えていませんでした。ヒアドキュメントとコメントの読み方は、ガードと同じものにそろえました。 looptrack handoff -h・--helpが使い方を出します。 これまでのhandoff append -hは、-hを本文として引き継ぎに足し、成功で終わっていました。-h・--helpは、サブコマンドの前でも後でも使い方を出すだけで、何も書きません。-xのような語は、選択肢の打ち間違いとして止めます。--の後ろの語は、これまでどおり本文です。- Looptrack 自身のリポジトリの clone で、setup と
initがエラーで終わらなくなりました。 そこではinitが失敗していたので、setup ツールの取得と init のコマンドは、looptrackを置き換えた後でエラーになっていました。そのリポジトリに対して、setup ツールは取得の段だけを返します。initは何も書かず、要らない旨を出して終了コード 0 で終わります。doctorも init を勧めません。 initが CLAUDE.md・AGENTS.md に書く案内の節が、英語の利用者には英語で入ります。 言語に関わらず日本語だった節を、initのほかの出力と同じ言語で選ぶようにしました。言語を見る順はLOOPTRACK_LANG・LC_ALL・LC_MESSAGES・LANGです。別の言語で打ち直しても節は 2 つにならず、丸ごと差し替わります。節の外に書いた本文は残ります。- setup が書く
compose.yamlは、同じ名前のイメージをレジストリから引かなくなりました。 Compose v5.5.1 では、docker compose upがビルドの前にlooptrack:latestを引きにいきました。ファイルの注釈は、引くことはないと書いていました。ファイルにpull_policy: buildを入れたので、いつも隣の Dockerfile からイメージを作ります。以前に setup したサーバでは、compose.yamlのbuild:の下にpull_policy: buildを足してください。 - 英語の管理画面のプロジェクト一覧が、「your role here: admin」と出ます。 以前は「you are a admin here」で、母音で始まる役割では冠詞が誤っていました。日本語の行は変わりません。
文書
- Windows が署名の無い版をそのまま止めるときの案内。 始め方・README・FAQ に、Windows 11 のスマート アプリ コントロールと、管理者が方針で署名の無いアプリを止めている PC のことを書きました。スマート アプリ コントロールには「実行」の道も、アプリごとに許可する手段もありません。FAQ からは、
SHA256SUMS自体をSHA256SUMS.minisigで確かめる手順にも案内します。 - 利用者ガイドと README にスクリーンショットを入れました。 デスクトップ版とサーバ版の始め方・日々の使い方・README に、説明している画面の画像を、ページの言語に合わせて載せています。画像はどれも、架空のデータだけを入れた使い捨てのサーバから
deploy/dev/screenshots.shで撮ったものです。 - 利用者ガイドの入口を版ごとに分けました。 サーバ版のページは
docs/guide/server/、デスクトップ版のページはdocs/guide/desktop/にあります。デスクトップ版のページは、始め方・使い方・更新・困ったときの 4 本に分けました。元のページ(desktop.md・getting-started.md・admin.md・updating.md)は、移った先へのリンクだけを持つ短いページとして残しています。rc.5 までのインストーラや README のリンクも切れません。 - 変更履歴は 2 本です。 サーバ版の変更は
CHANGELOG.md、デスクトップ版の変更はCHANGELOG-desktop.mdに書き、両方に効く変更は両方に載せます。GitHub のリリースの本文は、2 本の同じ版の節を「Server」「Desktop app」の 2 節に並べたもの。
1.0.0-rc.5 から上げるとき
- この版はマイグレーション 0007(
attachments・attachment_purges)と 0008(web_sessionsのpersistentの列)を足します。MySQL のアプリ用の利用者を最小権限にしているなら、新しい 2 つの表の SELECT・INSERT が要ります。0008 に新しい権限は要りません。アプリ用の利用者はweb_sessionsの UPDATE を既に持っているからです。--upgradeは migrate の後に全部の表の権限を確かめ、足りなければ管理用の資格情報を端末で尋ねて与え直します。systemd のサーバなら、パスワードはLOOPTRACK_INSTALL_DB_ADMIN_PASSWORD_FILEでも渡せます。足りない権限はlooptrack grants checkで分かり、looptrack grants applyで与えられます。 - MySQL では
--upgradeを端末で実行してください。自動の置き換え(--auto-upgrade onの timer)は、MySQL でマイグレーションを足す版を置き換えません。サーバは rc.5 のまま残ります。最小権限のアプリ用の利用者は 0007 の表を作れず、0008 の ALTER TABLE も実行できないので、表を作れる接続先を環境変数LOOPTRACK_SETUP_MIGRATE_DSNで渡します。渡さずに上げると、--upgradeは未適用のマイグレーションを示し、サービスを止めて続けるかを尋ねます。既定の答えは「続けない」で、--yesでもこの答えになり、何も変えずに止まります。sudoは環境変数を落とすので、渡し方はdocs/server/DEPLOY.mdの「更新(--upgrade)」を見てください。 - 添付には置き場が要ります。systemd のサーバなら、
install.sh --upgradeが.envにLOOPTRACK_ATTACH_DIRを足します。置き場の無いcompose.yaml(以前の setup が書いた MySQL のもの)では、--upgradeが直し方を示します。足す 2 行と、dataのmkdir・chownの手順です。 - 前段のプロキシの本文の上限を、1 ファイルの上限(既定は 20MiB)まで上げます。nginx の
client_max_body_sizeは、設定しなければ 1MB です。install.sh が示す nginx の例にはclient_max_body_size 20m;が入っています。 - クライアントを先に更新してください。rc.5 までのクライアントはファイルを添付できず、検証コマンドのあるイシューを上書きでしか Done にできません。これまでの動きのままにしたいプロジェクトは、
"verify": {"require_evidence": false}を設定します。 - 控えは DB を先に、添付の置き場を後に取ります。
--upgradeが取る控えに添付は入りません。
1.0.0 の全体像
- プロジェクト横断のイシュー管理。 1 つのサーバが、多くのプロジェクトのイシューを持ちます。プロジェクトごとに、ID のプレフィックスとゼロ埋めの桁数(
MYP-0001)、ルール、ガイドの文書を持ちます。正はデータベースで、管理対象のソースのリポジトリには何もコミットしません。 - ループの形をした進め方。
nextは取り組むイシューを選び、着手の規則を守らせます。verifyはイシューに書いたコマンドを実行して、結果を記録します。summaryは毎セッションの初めに、入れ子になった 3 つのループを報告します。いまの回、人の判断を待つ決定、外から届くフィードバックの 3 つです。コメントとイベントは追記のみで、閉じたイシューは変更できません。 - サーバが強制する、プロジェクト別のルール。 必須のコメント、禁止した状態の遷移、
verify.require_on_closeは 1 か所で確かめるので、REST・MCP・CLI・Web のどの経路にも効きます。 - REST API。
/looptrack/api/v1にあり、利用者ごとのアクセストークン(期限・失効・最後に使った時刻)を使います。 - リモートの MCP サーバ。
/looptrack/mcpにあり、OAuth 2.1 かトークンでつなげます。MCP の接続だけでプロジェクトを配線できるsetupツールと、guide/review/loopのプロンプトもあります。 - Web UI: プロジェクトの選択、ボード / 一覧 / トレースの表示、イシューの起票・状態の変更・コメント・担当の変更・ファイルの添付、アカウントの設定(トークン・パスワード)、利用者の管理。サインインは ID とパスワード(argon2id)に TOTP を組み合わせ、TOTP を必須にするか任意にするかはサーバごとに決めます。ログイン画面の「ログインしたままにする」を付けると、無操作では切れません。
- CLI(
looptrack issue): 作成・編集・コメント・状態・close・一覧・表示・next・verify・summary・guide・export と、プロジェクトを 1 つのコマンドで配線するinit。looptrack issue login --browserはブラウザでサインインし、以後はトークンを更新し続けます。 - hook と配布の kit。
coreの層(セッションの要約・イシューの鮮度ガード・トークンの集計)は必ず入ります。任意のloopの層は、出力・作業・イテレーションの規律の rules、タスクモードと範囲のガード、引き継ぎの鮮度、暴走プロセスのガードを足します。配線はマニフェストで記述し、Claude Code・Codex・GitHub Copilot 向けに生成します。 - トークンの集計。 使用量をセッション・エージェント・ループの段階ごとに記録し、イシューに帰属させます。結果はフォントを埋め込んだ PDF のレポート(
looptrack report pdf)になります。 - セットアップとインストール。
looptrack setupがいくつかの質問をして、.env(チームのサーバならcompose.yamlも)と最初の管理者を書き出します。deploy/install.sh(POSIX sh)は、まっさらな Linux のサーバで取得 → setup → 起動 → ヘルスチェックまでを行い、nginx と Caddy の例を示します。--upgradeと--uninstallも扱います。Dockerfile と Compose のファイルも用意しています。 - ローカルモード。 127.0.0.1 に結び付けた、SQLite を使うサインインなしの 1 人用のサーバです。共有のサーバを動かしたくない人に向けたもので、デスクトップ版もこの上に作ってあります。
- 署名したリリースの成果物。
SHA256SUMSは minisign で署名し、macOS のバイナリは Developer ID で署名して公証を受けています。looptrack self-updateは、バイナリを入れ替える前に署名を確かめます。どの成果物にも、第三者のコンポーネントのライセンスの全文を収めたNOTICEが付きます。 - Markdown へのエクスポート。
looptrack exportがイシューを Markdown に書き戻すので、データが閉じ込められることはありません。 - 作業ツリーの片付け。
looptrack worktree listは、すべての git の作業ツリーを、それについて決めるのに要ることと一緒に並べます。マージ済みかどうか、未コミットの変更(ビルドの残りは無視する)、ロック、そして最後に動いた時刻。片付けはlooptrack worktree pruneで行います。--yesを渡さない限り何も消さず、本体の作業ツリーには決して触れません。最近動いたものは、ほかのセッションがまだ中にいるかもしれないので残します。
Desktop app(デスクトップ版)
1.0.0 is the first release that is not a release candidate. The changes below
are relative to v1.0.0-rc.5; "What 1.0.0 ships" at the end of this section
is an overview of the whole desktop app, and the sections of the release
candidates below record what changed between them. The biggest change since
rc.5 is evidence: issues can carry attached files, and closing an issue that
has verify commands needs one by default. On Windows, install this one update
by hand from the release page ("Moving from 1.0.0-rc.5" below).
Added
- Attach evidence files to an issue in the app. Test output, screenshots
and generated reports can now be attached to an issue as files, with who
attached them and when. From the app's CLI, use
looptrack issue attach <ID> <file>..., or--attach <file>on
issue commentandissue verify;verify --attach-outputputs the full,
untruncated output on the verify record.verify --listand--lastcan't
be combined with--attachor--attach-output; the CLI says so and sends
nothing. The MCP tools take no files, so an
agent sends them with the CLI and passes the IDs inattachmentsof
report_verifyoradd_comment. In the app's window the comment box takes a
file you pick, drop or paste, and the drawer lists the attachments and shows
images in place. The CLI refuses to send a text file that looks like it holds
a secret. The files go in theattachmentsfolder inside the data folder,
next tolooptrack.db, which only holds their names and sizes, so copy that
folder too when you back up.looptrack exportwith
LOOPTRACK_DSN=sqlite:<path to looptrack.db>writes the attachment files and
a manifest (<slug>/attachments.json) next to the Markdown, taking the files
from theattachmentsfolder beside the database, andlooptrack verify-fileschecks them;looptrack importdoesn't carry attachments.
Attachments can't be deleted; the admin page/admin/attachmentspurges a
file and sets the limits (20MiB per file and 1GiB per project by default). - Windows: "Update to version " replaces the app, too. On
Windows the tray menu and the strip in the web UI used to open the release
page; now they update the app in place, as on macOS and Linux, and "Install
updates automatically" appears in the tray. If you used the installer, the
app downloads the newLooptrack_<version>_windows_<arch>_setup.exe, checks
it against the signedSHA256SUMS, and runs it with no window. Your options
("Start at login", "Make the CLI available") carry over. The installer starts
the app again when it finishes, and if it fails and rolls back, it starts the
previous version; the reason is inupdates\setup.login the data folder. If
you extracted the zip, the app downloads the new zip, checks it the same way,
and replacesLooptrack.exe,cli\looptrack.exe,NOTICEand
OFL-BIZUDGothic.txtone by one, keeping each old file as.prevbeside it.
If any of them can't be replaced, the ones already done are put back. When the
folder isn't writable, the release page opens as before. The Windows files
carry no code signature, so the check is the signed SHA-256. Whether Smart
App Control, Microsoft Defender or SmartScreen stops such an update hasn't
been tried on a real PC yet; if an update doesn't finish, update by hand. - CLI:
looptrack self-updatechecks GitHub releases instead of stopping
with "No server URL". With neither--urlnorLOOPTRACK_API_URL, the
CLI picks a version from the GitHub release list the same way the desktop app
and the server do (semver tags only, never/releases/latest, rcs too when
you run an rc). What that means for the app's CLI depends on the OS. On macOS
and Linux the CLI is the app itself, which still refuses to replace itself:
update the whole app, and uselooptrack self-update --checkto see whether
a newer release exists. On Windows the CLI in the zip (cli\looptrack.exe,
and the copy the app places in%LOCALAPPDATA%\Programs\looptrack) is a
plain CLI build, soself-updatecan replace that copy with the newer
release'slooptrack; the app itself is still updated as a whole. The
replacement takes the server archive for your OS and CPU, checks it against
the signedSHA256SUMS, extracts only thelooptrackinside, and checks
that file against its own line in the sameSHA256SUMSbefore it replaces
the running one (.oldon Windows, as before). The signature is mandatory: a
build without the public key stops without contacting GitHub, and so does any
build withLOOPTRACK_UPDATE_CHECK=off. This path replaces the file only when
a newer version exists, so it refuses--force(exit code 2).
--from github|serverpicks the source explicitly, and a failure on one never
falls back to the other. With--urlorLOOPTRACK_API_URL, nothing changes. - The board in the app remembers how you left it. The view, the search
words and the filters (type, priority, ready only, hide closed, unanswered
feedback, label and assignee) are kept per project in localStorage and come
back the next time you open that project. The sort order was already kept.
A label or an assignee the project no longer has is dropped when the board
loads. - The browser tab shows the app's icon. Every page of the app's web UI
links the same picture as the app's icon.
Changed
- Closing an issue as Done needs evidence by default, in the app too. On an
issue whose body holds at least one verify command, the app's local server
rejects Done unless the latest verify record for the current body carries an
attachment, and it rejects a missing record too. This is the new per-project
ruleverify.require_evidence, on by default even in a project with no rules
at all. It applies on every path (CLI, MCP, REST, Web) and can be overridden
with a reason (--override "reason",override_reasonover MCP), which
leaves arule_overridewithrule: verify_evidence_required. A project
that wants the old behavior sets"verify": {"require_evidence": false}with
looptrack project rules setand gets a note instead of a rejection. The
guide, the MCP instructions, the verify plan, the close step ofnextand the
kit tell the AI to attach the full test output, screenshots and generated
files.
An issue created directly as Done with a verify command in its body is
rejected the same way, since it can't have a record yet. A record whose
attachment is purged later still counts as having evidence. Versions up to 1.0.0-rc.5 have no--attach,--attach-outputor
issue attach, and a version older than this one rejects rules that contain
the key, so remove it before going back to an older version. - Windows:
Looptrack.exeandcli\looptrack.execarry version
information. Both exes in the desktop zip have a VERSIONINFO resource. Its
ProductName isLooptrackand its ProductVersion is the build version as
is, release candidates included. The release build reads both values back
from every exe it makes and stops if either is missing or wrong. The tool
that writes the resource changed from rsrc to go-winres (0BSD, build-only).
The desktop exes keep their icon. - The app rejects comments with no text and no attachment, too. The
server inside the app now answers a comment whose text is empty or only
whitespace, with no attachment, with a 400 (comment_empty), whether it
comes from the app, the CLI or an AI agent. Comments cannot be deleted, so
one empty comment would stay for good. A script of your own that sent empty
comments will now get that error. Attachment-only comments still work (over
REST, send"text": ""). When you change an issue's status with a
whitespace-only comment, no comment is created: the status changes and the
response has no "Comment added" line. - The Japanese text that
initwrites, and the kit's rules and skills,
use one consistent style. The sectionlooptrack issue initputs into
CLAUDE.mdandAGENTS.md, the five rules of the loop layer and the
issue,iterateandsession-handoffskills were rewritten in the polite
form throughout, with asides in parentheses turned into sentences.
Commands, paths and line counts are unchanged, so the next init or kit
update changes only that wording. The English working-discipline rule had
the same asides rewritten.
Fixed
- macOS: the app's small icon no longer shows as noise in Finder. In the
small views (16 and 32 px, such as list view),Looptrack.appshowed a
garbled picture instead of the icon. The two smallest sizes in the icon file
were stored in a form macOS reads as raw pixels, not as images. They are now
stored in the form macOS reads correctly, and the larger sizes are unchanged.
Update the app as a whole, as usual. - The issue drawer in an English browser shows the comments heading in
English. Background, Details and the other sections already followed the
screen's language, but the comments section kept its Japanese heading. The
stored body still uses that heading as the marker that separates the body
from the comments, so only the browser swaps it for the screen's language
when it draws the drawer. Nothing stored changes. - The project picker in English says "1 project" when there is one. The
line under the heading read "1 projects". It now uses the singular for one
project and the plural otherwise. The Japanese line is unchanged. - English messages say "1 issue", not "1 issues", when the count is one.
More than 30 messages in the CLI, the REST API, the MCP tools and the
reports printed a count of one in the plural, such as "1 issues" or "1 files".
They now use the singular for one, and keep the plural for zero and for two
or more. Messages already written with "(s)" and all the Japanese text are
unchanged. - AI agent hooks: the guards catch commands hidden behind a heredoc,
$'…'or a comment, and decide on long commands too. The git, secrets,
wait-loop and scope guards dropped the line after a<<that the shell
does not read as a heredoc: part of<<<, inside quotes or a comment, or
inside$((…))and${…}. They also dropped the body ofcat <<EOF | sh
andbash <<EOF, which the shell runs, and lost track of quotes after
$'…'or an apostrophe in a comment. The scope guard didn't look past a
pipe with no space around it (echo a|git …). In each case a real command
went through unchecked. Each guard reads a command in several more ways and
stops it when any of them matches, so nothing it stopped before goes through.
Unwrapping a nested shell took time in proportion to the number of quotes
times the length, so a command of 20 to 30 KB reached the 4-second limit
and went through with no decision. After the rewrite, a 300 KB command was
decided in under a second and a 1 MB one in 2.3 seconds on the machine it
was measured on; a command that still runs past the limit goes through, as
before. The body of a heredoc whose terminator is quoted with a backslash
(<<\EOF) is still checked word by word, so if that stops you, write
<<'EOF'. - AI agent hooks: the handoff hook no longer misses a
close. The hook
that notices finished work, so that the handoff check asks for an update,
skipped acloseon the line after a comment, after a<<inside quotes
or arithmetic, or in the body ofcat <<EOF | sh. It reads heredocs and
comments the same way as the guards do. looptrack handoff -hand--helpprint the usage.handoff append -h
used to append-hto the handoff and succeed.-hand--help, before or
after the subcommand, now print the usage and write nothing, and a word like
-xis rejected as a mistyped option. Anything after--still goes in as
text.- In a clone of Looptrack's own repository, setup and
initno longer end
in an error. There,initused to fail, so the setup tool's
download-and-init command ended in an error even thoughlooptrackhad
already been replaced. For that repository the setup tool returns only the
download step, andinitwrites nothing, says it isn't needed and
exits with 0.doctorno longer suggests running it. initwrites the guidance section in CLAUDE.md and AGENTS.md in English
for English users. The section went in Japanese whatever the language. It
now follows the language of the rest ofinit's output, read from
LOOPTRACK_LANG,LC_ALL,LC_MESSAGESandLANGin that order. Running
initagain in the other language replaces the section rather than adding
a second one, and anything written outside it stays.- The admin project list in English reads "your role here: admin". It
said "you are a admin here", because the article was wrong for any role
that starts with a vowel. The Japanese line is unchanged.
Docs
- Windows: what to do when it blocks the unsigned app outright. Getting
started, the README, the FAQ and the desktop guide cover Smart App Control on
Windows 11, which blocks unsigned apps with no "Run anyway" and no way to
allow a single app, and PCs whose administrator blocks unsigned apps by
policy. The FAQ also points to checkingSHA256SUMSitself against
SHA256SUMS.minisig. - Windows: the guide now says the CLI can be updated with
self-update, and
what that leaves behind. On Windows,looptrack self-updatereplaces the
CLI (cli\looptrack.exeand the copy in%LOCALAPPDATA%\Programs\looptrack)
with the newest release'slooptrack, and never touchesLooptrack.exe. On
macOS and Linux it refuses, because the CLI is the app itself. A replaced
Windows copy is no longer refreshed when you update the app, so the CLI and
the app can end up on different versions. Uninstalling doesn't remove it
either. The desktop update page now covers this, including how to delete the
copy or go back to the one that comes with the app, and the server update
page and the design document no longer say the desktop app never uses
self-update. Nothing in the app's behavior changes. - Screenshots in the user guide and the README. Getting started for the
desktop app and the server, the daily-use page and the README now show the
screens they describe, in the language of each page. Every picture is taken
bydeploy/dev/screenshots.shfrom a throwaway server that holds only
made-up data. - The desktop app has its own pages in the user guide. They are under
docs/guide/desktop/: getting started, using, updating and
troubleshooting, split out of the one desktop page. The old pages remain as
short pages that link to the new ones, so links in the installers and
READMEs up to rc.5 still work. - Two changelogs. Changes for the server are in
CHANGELOG.mdand those
for the desktop app inCHANGELOG-desktop.md, and a change that affects
both is in both. A GitHub release takes the same version from both files
and shows them under "Server" and "Desktop app".
Moving from 1.0.0-rc.5
- Update the app as a whole, as usual. On Windows the rc.5 app still opens
the release page for this update, so install 1.0.0 from there by hand.
Updating in place works from the next update on. - When you back up, copy the
attachmentsfolder in the data folder along
withlooptrack.db.
What 1.0.0 ships
- Desktop edition. A double-clickable application for macOS, Windows and
Linux that starts the server locally, keeps a tray / menu-bar entry, offers to
put the CLI onPATH, and can start at login without administrator rights.
The server it starts is a single-user server bound to 127.0.0.1 with SQLite
and no sign-in. - Cross-project issue tracking. The app holds the issues of many projects.
Each project has its own ID prefix and zero-padded width (MYP-0001), its own
rules and its own guide document. The database is the source of truth; nothing
is committed into the source repositories being tracked. - Loop-shaped workflow.
nextpicks the issue to work on and enforces the
rules for starting it;verifyruns the commands written in the issue and
records the result;summaryreports three nested loops at the start of every
session (the current round, decisions waiting for a human, feedback coming from
outside). Comments and events are append-only, and closed issues are immutable. - Per-project rules. Required comments, forbidden status transitions and
verify.require_on_closeapply to every access path (REST, MCP, CLI, Web)
because they are checked in one place. - MCP for AI agents, including a
setuptool that wires a project up from
the MCP connection alone, andguide/review/loopprompts. - Web UI: project picker, board / list / trace views, forms to create
issues, change their status, comment and attach files, and account
settings. - CLI (
looptrack issue): create, edit, comment, status, close, list, show,
next, verify, summary, guide, export, andinitto wire a project up in one
command. - Hooks and the distribution kit. The
corelayer (session summary, issue
freshness guard, token accounting) is always installed; the optionalloop
layer adds output/working/iteration discipline rules, task-mode and scope
guards, handoff freshness and a runaway-process guard. Wiring is described by
a manifest and generated for Claude Code, Codex and GitHub Copilot. - Token accounting. Usage is recorded per session, per agent and per stage of
the loop, attributed to issues, and rendered as a PDF report
(looptrack report pdf) with an embedded font. - Signed release artifacts.
SHA256SUMSsigned with minisign, and macOS
binaries signed with a Developer ID and notarized. Every artifact ships a
NOTICEwith the full license texts of the third-party components. - Worktree housekeeping.
looptrack worktree listshows every git worktree
with the one thing you need to decide on it — merged or not, uncommitted
changes (ignoring build leftovers), locked, and when it last moved — and
looptrack worktree prunecleans up. It never deletes anything unless you pass
--yes, never touches the main worktree, and keeps anything that moved
recently, because another session may still be inside it. - Markdown export.
looptrack export --out <dir>writes issues back out as
Markdown, so the data is never locked in. Give it the app's database with
LOOPTRACK_DSN=sqlite:<path to looptrack.db in the data folder>and it writes
out what the app holds.
1.0.0 はリリース候補ではない最初の版です。下の変更は v1.0.0-rc.5 からの差分で、この節の最後の「1.0.0 の全体像」にデスクトップ版の全体をまとめました。rc の間に何が変わったかは、下の各 rc の節にあります。rc.5 からのいちばん大きな変更は、エビデンスの添付。イシューにファイルを添付できるようになり、検証コマンドのあるイシューを Done にするには既定で添付が要ります。Windows では、この版への更新だけはリリースのページから手で入れてください(下の「1.0.0-rc.5 から上げるとき」)。
追加
- アプリでも、イシューにエビデンスのファイルを添付できます。 テストの出力・画面のスクリーンショット・生成したレポートを、ファイルのままイシューに付けられるようになりました。誰がいつ付けたかも残ります。アプリの CLI では
looptrack issue attach <ID> <ファイル>...か、issue comment・issue verifyの--attach <ファイル>を使います。verify --attach-outputは、切る前の出力の全文を verify の記録に付けます。verify --list・--lastと--attach・--attach-outputは一緒に使えず、CLI はそう伝えて何も送りません。MCP のツールはファイルを受け取らないので、AI は CLI で送って、返った ID をreport_verifyかadd_commentのattachmentsに渡します。アプリの画面では、コメントの欄でファイルを選ぶ・ドロップする・貼り付けるのどれでも添付でき、ドロワーに一覧が出て、画像はその場で見られます。テキストのファイルに秘密らしいものがあれば、CLI は送らずに止まります。本体はデータのフォルダの中のattachmentsフォルダに入り、looptrack.dbには名前や大きさの記録しかありません。バックアップではこのフォルダも一緒に写してください。LOOPTRACK_DSN=sqlite:<looptrack.db のパス>でlooptrack exportを実行すると、DB の隣のattachmentsフォルダから添付の本体と目録(<slug>/attachments.json)も書き出し、looptrack verify-filesで確かめられます。looptrack importは添付を運びません。添付は消せません。管理者の画面/admin/attachmentsで本体を消去でき、上限(既定は 1 ファイル 20MiB・1 プロジェクト 1GiB)もそこで変えます。 - Windows でも「新しい版 <版> に更新する」でアプリが置き換わります。 これまで Windows のトレイのメニューと画面の帯はリリースのページを開くだけでした。この版からは macOS・Linux と同じくその場で置き換わり、トレイに「新しい版を自動で入れる」も出ます。インストーラで入れた人は、新しい
Looptrack_<版>_windows_<arch>_setup.exeを取得して署名つきのSHA256SUMSで照らし、画面を出さずに実行します。「ログイン時に起動する」「CLI を使えるようにする」の選択肢はそのまま。インストーラは終わったところでアプリを起動し直し、失敗して元に戻したときは前の版を起動します。理由はデータのフォルダのupdates\setup.logに残ります。zip を展開して使っている人は、新しい zip を同じように確かめてからLooptrack.exe・cli\looptrack.exe・NOTICE・OFL-BIZUDGothic.txtを 1 つずつ置き換えます。前のファイルは隣に.prevを付けて残します。どれかを置き換えられなければ、済んだ分を元に戻します。フォルダに書き込めないときは、これまでどおりリリースのページを開きます。Windows のファイルにはコード署名が無いので、確かめるのは署名された SHA-256 です。スマート アプリ コントロール・Microsoft Defender・SmartScreen がこの更新を止めるかどうかは、まだ実機で確かめていません。更新が終わらないときは手で置き換えてください。 - CLI:
looptrack self-updateが、「サーバの URL がありません」で止まらずに GitHub のリリースを確かめます。--urlもLOOPTRACK_API_URLも無いとき、CLI はデスクトップ版やサーバと同じ選び方で GitHub のリリースの一覧から版を決めます。semver のタグだけを見て/releases/latestは使わず、rc を動かしていれば rc も追います。アプリの CLI にとっての意味は OS で違います。macOS と Linux では CLI はアプリそのもので、これまでどおり自分を置き換えません。アプリごと更新し、新しいリリースがあるかはlooptrack self-update --checkで確かめられます。Windows の zip の CLI(cli\looptrack.exeと、アプリが%LOCALAPPDATA%\Programs\looptrackに置くコピー)は普通の CLI のビルドです。そのためself-updateでそのコピーを新しいリリースのlooptrackに置き換えられますが、アプリ本体はこれまでどおりアプリごと更新します。置き換えるときは、自分の OS と CPU に合うサーバ版の書庫を取り、署名つきのSHA256SUMSで照合したうえで中のlooptrackだけを取り出します。置き換える前には、同じSHA256SUMSにある自分の行とも照らし合わせます。Windows ではこれまでどおり.oldに退けます。署名は必須です。公開鍵を持たないビルドは GitHub に問い合わせずに止まり、LOOPTRACK_UPDATE_CHECK=offのビルドも問い合わせません。この経路は新しい版があるときだけ置き換えるので、--forceを受け付けません(終了コード 2)。取得元は--from github|serverで明示でき、片方で失敗してももう一方へは切り替えない作りです。--urlかLOOPTRACK_API_URLがあるときの動きは変わりません。 - アプリのボードが、前回の表示のまま開きます。 表示形式・検索語・絞り込み(型・優先度・着手可能・クローズ済みを隠す・未応答の反応・ラベル・担当)を、プロジェクトごとに localStorage に残します。次にそのプロジェクトを開くと、残した条件で表示します。並び順は以前から残っていました。プロジェクトに無くなったラベルや担当は、ボードを読み込んだときに外します。
- ブラウザのタブにアプリのアイコンが出ます。 アプリの Web の画面のどのページも、アプリのアイコンと同じ絵を指します。
変更
- アプリでも、イシューを Done にするには既定でエビデンスが要ります。 本文に検証コマンドが 1 つ以上あるイシューでは、いまの本文に対する最新の verify の記録に添付が無いと、アプリの中のサーバが Done を拒否します。記録そのものが無いときも拒否です。検証コマンドを書いた本文を Done のまま起票しても、まだ記録が無いので同じく拒否されます。記録の後で添付を消去しても、その記録は添付ありとして数えます。新しいプロジェクト別ルール
verify.require_evidenceの働きで、ルールを何も設定していないプロジェクトでも既定で入っています。CLI・MCP・REST・Web のどの経路にも効き、理由を付ければ上書きできます(--override "理由"。MCP はoverride_reason)。上書きするとrule: verify_evidence_requiredのrule_overrideが残ります。これまでの動きのままにしたいプロジェクトは、looptrack project rules setで"verify": {"require_evidence": false}を設定してください。拒否の代わりに注意だけが返ります。guide・MCP の案内文・verify の計画の文面・nextの close の段・kit も、テストの出力の全文やスクリーンショット、生成物を添付するよう AI に指示するようになりました。1.0.0-rc.5 までの版には--attach・--attach-output・issue attachがありません。このキーを知らない旧版は、キーを含む rules を拒否します。前の版に戻すときは、先にキーを外してください。 - Windows:
Looptrack.exeとcli\looptrack.exeが版の情報を持つように。 デスクトップ版の zip の 2 つの exe に VERSIONINFO の資源を入れました。ProductName はLooptrack、ProductVersion はビルドの版そのままで、rc でも入ります。リリースのビルドは作った exe から 2 つの値を読み戻し、無いか違えば止まります。資源を書く道具は rsrc から go-winres(0BSD。ビルドにだけ使う)に替えました。デスクトップ版の exe のアイコンはそのままです。 - アプリでも、本文の無いコメントは 400 で断られます。 アプリの中で動くサーバが、本文が空か空白だけで添付も無いコメントを
comment_emptyの 400 で拒否します。アプリの画面・CLI・AI エージェントのどこから送っても同じです。コメントは消せないので、空のものが 1 件入ると残り続けるからです。空のコメントを送っていた自作のスクリプトは、エラーが返ります。添付だけのコメントはこれまでどおり通ります(REST では"text": ""を付けてください)。状態の変更に空白だけのコメントを付けたときは、コメントを作らずに状態だけが変わり、応答に「コメント追記」の行は出ません。 initが書く日本語と、kit の rules・skill の日本語の文体をそろえました。 対象は、looptrack issue initがCLAUDE.md・AGENTS.mdに入れる案内節と、loop の層の rules 5 本、skill のissue・iterate・session-handoffです。地の文を です・ます にし、括弧の補足は本文の文に直しました。コマンド・パス・行数は変えていません。次に init や kit を更新したときに変わるのは文面だけ。英語の working-discipline の rules も、同じ箇所の括弧の補足を文に直しています。
修正
- macOS: アプリの小さいアイコンが、Finder でノイズの絵になる問題を直しました。 一覧表示などの小さい表示(16・32px)で、
Looptrack.appがアイコンの代わりに崩れた絵を出していました。アイコンのファイルのいちばん小さい 2 つの大きさが、macOS が画像ではなく生の画素として読む形で入っていたためです。2 つとも、macOS が正しく読める形に入れ直しました。ほかの大きさは変わりません。更新はいつもどおりアプリごと行ってください。 - 英語の画面では、イシューの詳細のコメント節も英語の見出しで描きます。 背景・内容などの節は画面の言語に合わせて出ていましたが、コメント節の見出しだけが日本語のままでした。保存した本文では、この見出しは本文とコメントを分ける目印なので訳しません。描くときにだけ、ブラウザが画面の言語の見出しに替えます。保存した内容は変わりません。
- 英語のプロジェクト選択の画面: 1 件なら「1 project」と単数に。 見出しの下の行が「1 projects」になっていました。1 件のときは単数、それ以外は複数で出します。日本語の行は変わりません。
- 英語の文言で、件数が 1 のときに単数で出るようになりました。 CLI・REST・MCP・帳票の英語の文言のうち 30 件あまりが、「1 issues」「1 files」のように、1 件でも複数形で出ていました。1 件のときは単数にし、0 件と 2 件以上は複数のままです。日本語の文面と、「(s)」で書いていた文言には手を入れていません。
- AI エージェントの hook: ヒアドキュメント・
$'…'・コメントの陰に置いたコマンドをガードが見落とさず、長いコマンドも判定します。 git・秘密・待ちループ・scope の 4 つのガードは、シェルがヒアドキュメントと読まない<<の次の行を落としていました。<<<の一部、引用符やコメントの中、$((…))・${…}の中の<<がこれに当たります。シェルが実行するcat <<EOF | sh・bash <<EOFの本文も落とし、$'…'やコメントの中のアポストロフィの後ろでは引用符の組を見失っていました。scope のガードは、空白を挟まないパイプ(echo a|git …)の後ろを見ていません。どれも、本物のコマンドが確かめられずに通る形です。ガードには読み方を足し、どれか 1 つで当たれば止める形にしました。以前に止めていた形が通るようにはなっていません。入れ子のシェルをほどく段は、引用符の数と長さの積に比例して遅くなっていました。20〜30 KB のコマンドで 4 秒の打ち切りに届き、判定しないまま通していたわけです。書き直した後の実測では、300 KB のコマンドを 1 秒未満、1 MB を 2.3 秒で判定しました。打ち切りを越えたコマンドは、これまでどおり通します。終端をバックスラッシュで引用したヒアドキュメント(<<\EOF)の本文は、いまも語として判定します。それで止まったら<<'EOF'に書き換えてください。 - AI エージェントの hook: 引き継ぎの hook が
closeを取りこぼさなくなりました。 終わった作業に気づき、引き継ぎの更新を求めさせる hook のことです。コメントの次の行、引用符や算術の中の<<の後ろ、cat <<EOF | shの本文にあるcloseを数えていませんでした。ヒアドキュメントとコメントの読み方は、ガードと同じものにそろえました。 looptrack handoff -h・--helpが使い方を出します。 これまでのhandoff append -hは、-hを本文として引き継ぎに足し、成功で終わっていました。-h・--helpは、サブコマンドの前でも後でも使い方を出すだけで、何も書きません。-xのような語は、選択肢の打ち間違いとして止めます。--の後ろの語は、これまでどおり本文です。- Looptrack 自身のリポジトリの clone で、setup と
initがエラーで終わらなくなりました。 そこではinitが失敗していたので、setup ツールの取得と init のコマンドは、looptrackを置き換えた後でエラーになっていました。そのリポジトリに対して、setup ツールは取得の段だけを返します。initは何も書かず、要らない旨を出して終了コード 0 で終わります。doctorも init を勧めません。 initが CLAUDE.md・AGENTS.md に書く案内の節が、英語の利用者には英語で入ります。 言語に関わらず日本語だった節を、initのほかの出力と同じ言語で選ぶようにしました。言語を見る順はLOOPTRACK_LANG・LC_ALL・LC_MESSAGES・LANGです。別の言語で打ち直しても節は 2 つにならず、丸ごと差し替わります。節の外に書いた本文は残ります。- 英語の管理画面のプロジェクト一覧が、「your role here: admin」と出ます。 以前は「you are a admin here」で、母音で始まる役割では冠詞が誤っていました。日本語の行は変わりません。
文書
- Windows が署名の無いアプリをそのまま止めるときの案内。 始め方・README・FAQ・デスクトップ版のガイドに、Windows 11 のスマート アプリ コントロールと、管理者が方針で署名の無いアプリを止めている PC のことを書きました。スマート アプリ コントロールには「実行」の道も、アプリごとに許可する手段もありません。FAQ からは、
SHA256SUMS自体をSHA256SUMS.minisigで確かめる手順にも案内します。 - Windows の CLI を
self-updateで新しくできることと、その後に残るもの。 Windows では、looptrack self-updateが CLI(cli\looptrack.exeと%LOCALAPPDATA%\Programs\looptrackの写し)を最新のリリースのlooptrackに置き換えます。Looptrack.exeには触りません。macOS と Linux では CLI がアプリそのものなので、断られます。置き換えた Windows の写しは、アプリを更新しても新しくならず、CLI とアプリの版がずれることがあります。アンインストールでも消えません。デスクトップ版の更新のページに、この動きと、写しの消し方・アプリ同梱のものに戻す方法を足しました。サーバ版の更新のページと設計文書も、「デスクトップ版はself-updateを使わない」とだけ書くのをやめています。アプリの動きは変わりません。 - 利用者ガイドと README にスクリーンショットを入れました。 デスクトップ版とサーバ版の始め方・日々の使い方・README に、説明している画面の画像を、ページの言語に合わせて載せています。画像はどれも、架空のデータだけを入れた使い捨てのサーバから
deploy/dev/screenshots.shで撮ったものです。 - 利用者ガイドに、デスクトップ版のページができました。 1 本だったデスクトップ版のページを、
docs/guide/desktop/の始め方・使い方・更新・困ったときの 4 本に分けています。元のページは、移った先へのリンクだけを持つ短いページとして残しました。rc.5 までのインストーラや README のリンクも切れません。 - 変更履歴は 2 本です。 サーバ版の変更は
CHANGELOG.md、デスクトップ版の変更はCHANGELOG-desktop.mdに書き、両方に効く変更は両方に載せます。GitHub のリリースの本文は、2 本の同じ版の節を「Server」「Desktop app」の 2 節に並べたもの。
1.0.0-rc.5 から上げるとき
- いつもどおりアプリごと更新します。Windows では rc.5 のアプリがこの更新でもリリースのページを開くので、1.0.0 はそこから手で入れてください。その場での置き換えが効くのは、次の更新からです。
- バックアップでは、データのフォルダの
attachmentsフォルダもlooptrack.dbと一緒に写してください。
1.0.0 の全体像
- デスクトップ版。 macOS・Windows・Linux 向けの、ダブルクリックで起動するアプリケーションです。サーバを手元で起動してトレイ / メニューバーに常駐し、CLI を
PATHに置くかを尋ねます。管理者の権限なしで、ログイン時に起動することもできます。起動するのは 127.0.0.1 に結び付けた、SQLite を使うサインインなしの 1 人用のサーバ。 - プロジェクト横断のイシュー管理。 アプリが、多くのプロジェクトのイシューを持ちます。プロジェクトごとに、ID のプレフィックスとゼロ埋めの桁数(
MYP-0001)、ルール、ガイドの文書を持ちます。正はデータベースで、管理対象のソースのリポジトリには何もコミットしません。 - ループの形をした進め方。
nextは取り組むイシューを選び、着手の規則を守らせます。verifyはイシューに書いたコマンドを実行して、結果を記録します。summaryは毎セッションの初めに、入れ子になった 3 つのループを報告します。いまの回、人の判断を待つ決定、外から届くフィードバックの 3 つです。コメントとイベントは追記のみで、閉じたイシューは変更できません。 - プロジェクト別のルール。 必須のコメント、禁止した状態の遷移、
verify.require_on_closeは 1 か所で確かめるので、REST・MCP・CLI・Web のどの経路にも効きます。 - AI エージェント向けの MCP。MCP の接続だけでプロジェクトを配線できる
setupツールと、guide/review/loopのプロンプトがあります。 - Web UI: プロジェクトの選択、ボード / 一覧 / トレースの表示、イシューの起票・状態の変更・コメント・ファイルの添付、アカウントの設定。
- CLI(
looptrack issue): 作成・編集・コメント・状態・close・一覧・表示・next・verify・summary・guide・export と、プロジェクトを 1 つのコマンドで配線するinit。 - hook と配布の kit。
coreの層(セッションの要約・イシューの鮮度ガード・トークンの集計)は必ず入ります。任意のloopの層は、出力・作業・イテレーションの規律の rules、タスクモードと範囲のガード、引き継ぎの鮮度、暴走プロセスのガードを足します。配線はマニフェストで記述し、Claude Code・Codex・GitHub Copilot 向けに生成します。 - トークンの集計。 使用量をセッション・エージェント・ループの段階ごとに記録し、イシューに帰属させます。結果はフォントを埋め込んだ PDF のレポート(
looptrack report pdf)になります。 - 署名したリリースの成果物。
SHA256SUMSは minisign で署名し、macOS のバイナリは Developer ID で署名して公証を受けています。どの成果物にも、第三者のコンポーネントのライセンスの全文を収めたNOTICEが付きます。 - 作業ツリーの片付け。
looptrack worktree listは、すべての git の作業ツリーを、それについて決めるのに要ることと一緒に並べます。マージ済みかどうか、未コミットの変更(ビルドの残りは無視する)、ロック、そして最後に動いた時刻。片付けはlooptrack worktree pruneで行います。--yesを渡さない限り何も消さず、本体の作業ツリーには決して触れません。最近動いたものは、ほかのセッションがまだ中にいるかもしれないので残します。 - Markdown へのエクスポート。
looptrack export --out <dir>がイシューを Markdown に書き戻します。だからデータが閉じ込められることはありません。アプリのデータフォルダにあるlooptrack.dbをLOOPTRACK_DSN=sqlite:<looptrack.db のパス>で渡せば、アプリが持つデータをそのまま書き出せます。