Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 21:39
· 3 commits to main since this release

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 comment and issue verify; verify --attach-output puts the full,
    untruncated output on the verify record. verify --list and --last can't
    be combined with --attach or --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 in attachments of
    report_verify or add_comment, and get_issue lists 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
    in X-Looptrack-Filename), GET /api/v1/issues/{id}/attachments,
    GET /api/v1/attachments/{id} and POST /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 adds attachments and
    attachment_purges, and deploy/grants.sql gives the app user SELECT and
    INSERT on both) and the files into a directory: LOOPTRACK_ATTACH_DIR, else
    $STATE_DIRECTORY/attachments, else attachments next 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 .env on install
    and on --upgrade. The compose.yaml from looptrack setup now mounts
    ./data:/data with MySQL too and sets /data/attachments; a MySQL
    compose.yaml written by an earlier setup has no writable volume, so
    --upgrade leaves it alone and prints what to do: add - ./data:/data to
    the volumes and LOOPTRACK_ATTACH_DIR: /data/attachments to the
    environment, create data owned 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 --upgrade takes doesn't include
    attachments. looptrack export writes 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), and looptrack verify-files checks the files
    against the SHA-256 in the manifest. An attachment whose file can't be
    exported is listed as missing and export exits with 1. looptrack import
    doesn't carry attachments and says so when it finds a manifest.
    looptrack repair-attachments reports files missing from the directory and
    files nothing points to; --apply removes 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 --upgrade checks every table in
    deploy/grants.sql with the new looptrack 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 run looptrack grants apply
    yourself. Raise the body limit of the proxy in front to
    the per-file limit, since nginx's client_max_body_size defaults to 1MB.
    See "添付の置き場とバックアップ" in docs/server/DEPLOY.md.
  • looptrack grants check tells whether the MySQL app user has every grant
    it needs.
    It checks each table in deploy/grants.sql for 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.sh runs it after
    the migration, and the last check of looptrack grants apply looks at
    every table too.
  • CLI: looptrack self-update updates from GitHub releases when no server
    URL is set.
    With neither --url nor LOOPTRACK_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 the looptrack inside is extracted, and that file is
    checked against its own line in the same SHA256SUMS before it replaces the
    running one (.old on Windows, as before). The signature is mandatory: a
    build without the public key stops without contacting GitHub, and so does any
    build with LOOPTRACK_UPDATE_CHECK=off. This path replaces the file only when
    a newer version exists, so it refuses --force (exit code 2).
    --from github|server picks the source explicitly, and a failure on one never
    falls back to the other. With --url or LOOPTRACK_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 answers favicon.ico under 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 the persistent column to
    web_sessions; the grants in deploy/grants.sql do 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_reason over MCP), which
    leaves a rule_override with rule: verify_evidence_required. A project
    that wants the old behavior sets "verify": {"require_evidence": false} with
    looptrack project rules set and gets a note instead of a rejection. The
    guide, the MCP instructions, the verify plan, the close step of next and 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-output or
    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 of docs/server/DEPLOY.md).
  • Windows: the server and client looptrack.exe carry version
    information.
    Both the amd64 and the arm64 looptrack.exe have a
    VERSIONINFO resource. Its ProductName is Looptrack and 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.exe still 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 setup no longer names a file that isn't
    there.
    Its header said it was based on deploy/compose.yaml, which the
    repository doesn't have. That sentence is gone; the rest of the header is
    unchanged.
  • The Japanese text that init writes, and the kit's rules and skills,
    use one consistent style.
    The section looptrack issue init puts into
    CLAUDE.md and AGENTS.md, the five rules of the loop layer and the
    issue, iterate and session-handoff skills 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 of cat <<EOF | sh
    and bash <<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 a close on the line after a comment, after a << inside quotes
    or arithmetic, or in the body of cat <<EOF | sh. It reads heredocs and
    comments the same way as the guards do.
  • looptrack handoff -h and --help print the usage. handoff append -h
    used to append -h to the handoff and succeed. -h and --help, before or
    after the subcommand, now print the usage and write nothing, and a word like
    -x is rejected as a mistyped option. Anything after -- still goes in as
    text.
  • In a clone of Looptrack's own repository, setup and init no longer end
    in an error.
    There, init used to fail, so the setup tool's
    download-and-init command ended in an error even though looptrack had
    already been replaced. For that repository the setup tool returns only the
    download step, and init writes nothing, says it isn't needed and
    exits with 0. doctor no longer suggests running it.
  • init writes 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 of init's output, read from
    LOOPTRACK_LANG, LC_ALL, LC_MESSAGES and LANG in that order. Running
    init again in the other language replaces the section rather than adding
    a second one, and anything written outside it stays.
  • The compose.yaml that setup writes no longer pulls an image of the same
    name from a registry.
    With Compose v5.5.1, docker compose up tried to
    pull looptrack:latest before building, although the comment in the file
    said that never happens. The file now sets pull_policy: build, so the
    image is always built from the Dockerfile next to it. On a server you set
    up earlier, add pull_policy: build under build: in compose.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 checking SHA256SUMS itself against SHA256SUMS.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
    by deploy/dev/screenshots.sh from a throwaway server that holds only
    made-up data.
  • The user guide has one entrance per edition. The pages for the server
    are under docs/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.md and updating.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.md and those
    for the desktop app in CHANGELOG-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 (attachments and attachment_purges)
    and migration 0008 (a persistent column on web_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, --upgrade checks 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 server LOOPTRACK_INSTALL_DB_ADMIN_PASSWORD_FILE
    can pass the password. looptrack grants check shows what is missing, and
    looptrack grants apply grants it.
  • On MySQL, run the --upgrade from 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 in LOOPTRACK_SETUP_MIGRATE_DSN.
    Without it, --upgrade lists the pending migrations and asks whether to
    stop the service and go on. The default answer is no, and --yes takes the
    default, so it ends without changing anything. sudo drops environment variables; "更新(--upgrade)"
    in docs/server/DEPLOY.md shows how to pass it.
  • Attachments need a directory. On a systemd server, install.sh --upgrade
    adds LOOPTRACK_ATTACH_DIR to .env. With a compose.yaml that has no
    place for them (a MySQL one written by an earlier setup), --upgrade
    prints the steps: two lines to add, then mkdir and chown for data.
  • Raise the body limit of the proxy in front to the per-file limit (20MiB by
    default). nginx's client_max_body_size is 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 --upgrade takes 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. next picks the issue to work on and enforces the
    rules for starting it; verify runs the commands written in the issue and
    records the result; summary reports 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 and verify.require_on_close apply to every access path
    (REST, MCP, CLI, Web) because they are checked in one place.
  • REST API at /looptrack/api/v1 with per-user access tokens (expiry,
    revocation, last-used time).
  • Remote MCP server at /looptrack/mcp, reachable with OAuth 2.1 or a token,
    including a setup tool that wires a project up from the MCP connection alone,
    and guide / review / loop prompts.
  • 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, and init to wire a project up in one
    command. looptrack issue login --browser signs in through the browser and
    refreshes the token from then on.
  • Hooks and the distribution kit. The core layer (session summary, issue
    freshness guard, token accounting) is always installed; the optional loop
    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 setup asks a handful of questions and
    writes .env (and compose.yaml for 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 --upgrade and --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. SHA256SUMS signed with minisign, macOS binaries
    signed with a Developer ID and notarized, and looptrack self-update verifying
    the signature before replacing the binary. Every artifact ships a NOTICE with
    the full license texts of the third-party components.
  • Markdown export. looptrack export writes issues back out as Markdown, so
    the data is never locked in.
  • Worktree housekeeping. looptrack worktree list shows 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 prune cleans 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 comment and issue verify; verify --attach-output puts the full,
    untruncated output on the verify record. verify --list and --last can't
    be combined with --attach or --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 in attachments of
    report_verify or add_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 the attachments folder inside the data folder,
    next to looptrack.db, which only holds their names and sizes, so copy that
    folder too when you back up. looptrack export with
    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 the attachments folder beside the database, and looptrack verify-files checks them; looptrack import doesn't carry attachments.
    Attachments can't be deleted; the admin page /admin/attachments purges 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 new Looptrack_<version>_windows_<arch>_setup.exe, checks
    it against the signed SHA256SUMS, 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 in updates\setup.log in the data folder. If
    you extracted the zip, the app downloads the new zip, checks it the same way,
    and replaces Looptrack.exe, cli\looptrack.exe, NOTICE and
    OFL-BIZUDGothic.txt one by one, keeping each old file as .prev beside 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-update checks GitHub releases instead of stopping
    with "No server URL".
    With neither --url nor LOOPTRACK_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 use looptrack self-update --check to 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, so self-update can replace that copy with the newer
    release's looptrack; the app itself is still updated as a whole. The
    replacement takes the server archive for your OS and CPU, checks it against
    the signed SHA256SUMS, extracts only the looptrack inside, and checks
    that file against its own line in the same SHA256SUMS before it replaces
    the running one (.old on Windows, as before). The signature is mandatory: a
    build without the public key stops without contacting GitHub, and so does any
    build with LOOPTRACK_UPDATE_CHECK=off. This path replaces the file only when
    a newer version exists, so it refuses --force (exit code 2).
    --from github|server picks the source explicitly, and a failure on one never
    falls back to the other. With --url or LOOPTRACK_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
    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_reason over MCP), which
    leaves a rule_override with rule: verify_evidence_required. A project
    that wants the old behavior sets "verify": {"require_evidence": false} with
    looptrack project rules set and gets a note instead of a rejection. The
    guide, the MCP instructions, the verify plan, the close step of next and 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-output or
    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.exe and cli\looptrack.exe carry version
    information.
    Both exes in the desktop zip have a VERSIONINFO resource. Its
    ProductName is Looptrack and 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 init writes, and the kit's rules and skills,
    use one consistent style.
    The section looptrack issue init puts into
    CLAUDE.md and AGENTS.md, the five rules of the loop layer and the
    issue, iterate and session-handoff skills 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.app showed 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 of cat <<EOF | sh
    and bash <<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 a close on the line after a comment, after a << inside quotes
    or arithmetic, or in the body of cat <<EOF | sh. It reads heredocs and
    comments the same way as the guards do.
  • looptrack handoff -h and --help print the usage. handoff append -h
    used to append -h to the handoff and succeed. -h and --help, before or
    after the subcommand, now print the usage and write nothing, and a word like
    -x is rejected as a mistyped option. Anything after -- still goes in as
    text.
  • In a clone of Looptrack's own repository, setup and init no longer end
    in an error.
    There, init used to fail, so the setup tool's
    download-and-init command ended in an error even though looptrack had
    already been replaced. For that repository the setup tool returns only the
    download step, and init writes nothing, says it isn't needed and
    exits with 0. doctor no longer suggests running it.
  • init writes 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 of init's output, read from
    LOOPTRACK_LANG, LC_ALL, LC_MESSAGES and LANG in that order. Running
    init again 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 checking SHA256SUMS itself 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-update replaces the
    CLI (cli\looptrack.exe and the copy in %LOCALAPPDATA%\Programs\looptrack)
    with the newest release's looptrack, and never touches Looptrack.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
    by deploy/dev/screenshots.sh from 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.md and those
    for the desktop app in CHANGELOG-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 attachments folder in the data folder along
    with looptrack.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 on PATH, 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. next picks the issue to work on and enforces the
    rules for starting it; verify runs the commands written in the issue and
    records the result; summary reports 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_close apply to every access path (REST, MCP, CLI, Web)
    because they are checked in one place.
  • MCP for AI agents, including a setup tool that wires a project up from
    the MCP connection alone, and guide / review / loop prompts.
  • 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, and init to wire a project up in one
    command.
  • Hooks and the distribution kit. The core layer (session summary, issue
    freshness guard, token accounting) is always installed; the optional loop
    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. SHA256SUMS signed with minisign, and macOS
    binaries signed with a Developer ID and notarized. Every artifact ships a
    NOTICE with the full license texts of the third-party components.
  • Worktree housekeeping. looptrack worktree list shows 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 prune cleans 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 のパス> で渡せば、アプリが持つデータをそのまま書き出せます。