Skip to content

日本語クイックスタート

lidarslam_ros2は、rosbag2からAutowareで読み込める地図一式を作成します。 初めての場合は、手元の環境に合う入口を1つだけ選んでください。

まず選ぶ

手元にあるもの 最初のコマンド
インストール済みだが、状態が分からない lidarslam-map doctor
Dockerだけで固定デモを試したい Dockerで固定デモ
sourceから構築したい bash scripts/source_quickstart.sh
対応する自分のrosbag2がある lidarslam-map start /path/to/rosbag2
bagのtopicや互換性が分からない lidarslam-map doctor /path/to/rosbag2

インストール後に端末で引数なしのlidarslam-mapを実行すると、インストール確認、 固定デモ、自分のbag、過去のsessionから安全な入口を選べます。

日本語のDockerとsource経路を選ぶ

最初のfirst-mapでは、Dockerまたはsourceのどちらか1つだけを選びます。DockerはROS 2の workspaceを準備せずに公開済み固定デモを試すcontrol experiment、sourceはHumble/Jazzyの 環境でhelperを確認しながら構築する経路です。出力directoryやsessionを別経路で使い回さず、 経路を変える場合は新しいoutputを使ってidentityを記録します。

経路 こういう場合 最初の1コマンド ここで止めて確認
Docker fixed first-map ROS 2 workspaceなしで、公開済みの基準デモを先に試したい 下記のDocker route command 完了後にmap_verify: PASS、receiptのstatus: PASS--versionのidentityを確認する。PASSでなければ同じoutputをsourceで再利用しない
source quickstart Ubuntu 22.04/HumbleまたはUbuntu 24.04/Jazzyで、sourceから構築する bash scripts/source_quickstart.sh --dry-run dry_runのplanとrun.command_shellをreviewしてから実行へ進む。--versionのrevisionを記録し、Dockerのreceiptと混ぜない

Docker routeの最初のcommand(Humble)は次の1つです。Jazzyではimage tagだけを v0.9.0-jazzyに置き換えます。

docker run --rm \
  -e LIDARSLAM_HOST_UID="$(id -u)" \
  -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.9.0-humble

source routeの最初のcommandは、書き込み前にplanだけを確認する次の1つです。

bash scripts/source_quickstart.sh --dry-run

Dockerのidentityは公開済み安定版v0.9.0-humbleまたはv0.9.0-jazzyです。source helperは まだ公開・tag付けされていないv0.9.1候補を扱うため、sourceの結果を公開releaseやDocker identityとして報告しません。GLIMのようなPPA/package-manager経路は未対応なので、経路選択で これらを代替手段として追加しません。最初のcontrol experimentが失敗した場合は、表示された Details:Next:を読み、経路やoutputを手で混ぜずに保存済みの指示へ戻ります。

日本語の経路切替とfresh output復旧

Dockerまたはsourceのfirst-mapが途中で終わった後に経路を変える場合は、元のrunを別経路で 続けません。まず元のlocal-onlyのmap_session_recovery.jsonDetails:Next:を読み、 次の3つを区別します。

状態 進め方 証跡の境界
同じsessionでresume.available: true 保存されたnext_command--resumeを編集せずに実行する post-processingだけを再開し、経路変更やmapping再実行をしない
同じpinned setupでretry.available: true 保存されたretry.commandを編集せずに実行する retry.output_dirの新しいoutputだけを使い、元のmap・receipt・manifestを上書きしない
Docker/sourceの経路を変える、またはresume/retryがない doctorと新しい経路のfirst commandを確認し、fresh outputで新しいrunを開始する 古いmap、session、receipt、manifestを新runへコピー・再利用せず、identityもrunごとに記録する

--resumeは既存sessionの安全なterminal post-processing用であり、Dockerからsourceへ、または sourceからDockerへ切り替えるcommandではありません。保存済みretry.commandも元のpinned setupを 再試行するためのものなので、経路を変えるときは使わず、新しい経路の案内へ戻ります。変更後は たとえばoutput.dockeroutput.sourceのように新しいoutputを選び、v0.9.0 Dockerまたは v0.9.1 source候補のidentityをそれぞれ--versionなど実際の出力から記録します。

元の証跡は削除・uploadせず、旧runと新runのreceiptやhashを混ぜません。新しいsessionで reportREADY FOR REVIEWを返した場合だけ、その新runのreceiptを確認します。 viewerの見た目からcommandを再構成したり、古いreceiptを新しいmapへコピーしたりせず、支援が 必要ならlocal pathを含むrecovery JSONではなく、後述のprivacy-bounded support reportだけを使います。

1. インストールを確認する

lidarslam-map doctor

この確認はネットワークへ接続せず、ファイルも書きません。ROS 2、bag reader、 製品ファイル、デモ用の空き容量を確認します。不足が複数あっても、依存順で選んだ Do this nowを1つだけ先頭に表示し、残りは後続checkとして残します。その操作後に doctorを再実行すると、次のblockerが1つ選ばれます。JSONは全finding固有の復旧操作を 保持し、同じ選択をtop-levelのnext_actionでも返します。自分のbagを先に確認する場合は 次を実行します。

lidarslam-map doctor /path/to/rosbag2

これはtopic、PointCloud2のfield、timestamp順、利用可能なprofileを確認します。

JSON診断でreason-codeとNext-actionを読む

自分のbagをmappingへ渡す前に、診断結果を機械可読な形でも確認できます。 このコマンドはbagをread-onlyで読み、ネットワークへ接続せず、出力ファイルも作りません。

lidarslam-map doctor /path/to/rosbag2 --json

doctorのbag reportではfindings[].codeを安定したキーとして使います。startの dry-run JSONや保存済みsessionのrecovery JSONでは、全体のreason.codeと各項目の findings[].codeを使います。messageDetails:、viewerで見えた症状、英語の説明文を 手がかりにコードを推測したり、automationのキーにしたりしません。

診断結果のnext_actionNext:next_commandは保持された次の操作です。自分で pathやoptionを組み立て直さず、そのcommandを確認してからそのまま実行します。JSONには bagのlocal pathやtopic名が含まれる場合があるため、raw JSONをissueへ貼り付けません。 支援が必要なときは、後述のサニタイズ済みsupport reportだけを内容確認後に使います。

2. Dockerで固定デモ

ROS 2 workspaceを構築せず、固定MID-360デモから検証済み地図を作ります。

docker run --rm \
  -e LIDARSLAM_HOST_UID="$(id -u)" \
  -e LIDARSLAM_HOST_GID="$(id -g)" \
  -v "$PWD/lidarslam_output:/lidarslam_ws/output" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.9.0-humble

このコマンドは公開済み安定版v0.9.0-humbleに固定しています。developの 移動タグを使わないため、初回導線の内容が不意に変わりません。v0.9.1は まだ公開・tag付けされていない候補版なので、候補版を試す場合はsource helperを 使ってください。Ubuntu 24.04/Jazzyでは ghcr.io/rsasaki0109/lidar_slam_ros2:v0.9.0-jazzyを使います。初回は517 MBの公開bagを 取得し、最低8 GiBの空き容量を使います。目安は約30分ですが、回線とCPUで 変わります。出力先はlidarslam_output/mid360_demo/です。

公開済みv0.9.0 imageには、現在のlidarslam-map report handoff commandがまだ ありません。固定Dockerデモが完了したら、同じoutputの first_map_validation_receipt.jsonを開いてstatus: PASSと全checkを確認し、receiptだけを 独立validationのissue formへ添付します。sourceまたはreport対応済みimageでは、後述の lidarslam-map reportでreceipt-bound handoffを作成します。

summaryだけを再表示したい場合は、公開済みstable imageの次のread-only fallbackも使えます。 outputはread-only mountし、networkも無効にしています。

docker run --rm --network none \
  -v "$PWD/lidarslam_output:/output:ro" \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.9.0-humble \
  bash -lc 'helper="$(ros2 pkg prefix lidarslam)/share/lidarslam/product/scripts/create_first_map_validation_receipt.py"; python3 "$helper" /output/mid360_demo'

Ubuntu 24.04/Jazzyではimage tagをv0.9.0-jazzyへ置き換えます。表示されたPASS summaryを reviewし、すでに生成されたJSON receiptだけを添付します。 pull後にimmutable image identityも確認します。

docker image inspect \
  --format='{{index .RepoDigests 0}}' \
  ghcr.io/rsasaki0109/lidar_slam_ros2:v0.9.0-humble

ghcr.io/...@sha256:...が表示されない場合はidentity未検証として停止し、mutable tagを 代用しません。

lidarslam-map report /path/to/session-or-demo-output --json

固定デモのoutputはsession.jsonではなくreceiptを直接持つため、 /path/to/session-or-demo-outputにはlidarslam_output/mid360_demo/を指定します。

3. sourceから構築する

Ubuntu 22.04/HumbleまたはUbuntu 24.04/JazzyにROS 2を導入してから実行します。

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone --recursive https://github.com/rsasaki0109/lidar_slam_ros2.git
cd lidar_slam_ros2
bash scripts/source_quickstart.sh

helperはHumble/Jazzyを検出し、このrepositoryの6 packageだけを準備・buildして、 固定デモまで実行します。実行内容だけを先に確認する場合は次を使います。

bash scripts/source_quickstart.sh --dry-run

CIやwrapperから機械的に確認する場合は--jsonを追加します。

bash scripts/source_quickstart.sh --dry-run --json

これはversion付きのsource-quickstart-plan-v1 schema をstdoutだけに出します。network、APT、submodule checkout、build、demo、filesystemへの writeは行わず、不足しているbootstrap actionと実行予定のcommand arrayを返します。local pathを 含むため、raw JSONはissueへ貼らず手元で扱います。

buildだけなら--build-only、画面を開かない環境なら--viewer noneを追加します。 完了時に表示される絶対パスのlidarslam-mapは、新しい端末でも対応するworkspaceを 自動で有効化します。

固定デモを実行する前に計画を保存して確認する場合は、次を使います。

lidarslam-map demo ~/ros2_ws \
  --viewer none --dry-run --json \
  --output /tmp/mid360-demo-plan.json

--outputは計画JSONまたは人間向けカードを一度だけ作成し、既存ファイルを上書きしません。 これはread-onlyの確認用で、bagのdownload、mapping、公開操作は行いません。

現在の配布境界

GLIMのようなPPA/package-managerの導入経路は、依存packageのrosdistro審査が 完了するまで未対応です。現時点の正規経路はDockerまたは上記source helperです。

versionとsupport境界を記録する

supportや独立validationへ進む前に、実際に使ったCLIのversionとrevisionを記録します。 これはネットワークへ接続せず、mapやsessionを書き込みません。

lidarslam-map --version

Dockerの固定デモは公開済み安定版v0.9.0-humbleまたはv0.9.0-jazzyを使います。 v0.9.1はまだ公開・tag付けされていないsource候補なので、source helperで実行した 場合はcandidateとしてそのversion/revisionを報告します。developの移動tagを使ったり、 出力にないrelease identityを推測したりせず、--versionの出力をそのままsupport report やvalidation formへ転記してください。

4. 自分のbagを地図にする

インストール済みの場合は、metadata.yamlを含むrosbag2 directoryを渡します。

lidarslam-map start /path/to/rosbag2

startは書き込み前にsensor、topic、timestamp、profile、calibrationを説明し、 確認後にmapping、地図検証、offline reviewまで進みます。長時間処理の前に確認だけ 行うには次を使います。

lidarslam-map start /path/to/rosbag2 --dry-run

Ouster、Velodyne、RoboSenseなど別のPointCloud2 LiDARを使う

最初にこのpackageのlaunch fileやYAMLをfork・編集しないでください。実際のsensorや simulatorからrosbag2を記録し、先に lidarslam-map doctor /path/to/rosbag2、続いて上のstartを実行します。 doctorは記録済みtopicの型、header.frame_id、point field、timestamp順、利用できる maintained profileを確認します。startはその選択を保持し、書き込みやmapping開始前に calibrationのreviewを求めます。

安全なmaintained pathがない場合は、mapping前に安定したreason codeとcopy-readyな 次の1コマンドを表示して停止します。PointCloud2を検出できることは、そのvendorや hardwareの検証済み対応、または精度保証を意味しません。

自分のbagを先にdry-runで確認する

長時間のmappingやファイル作成へ進む前に、選択されるprofile、topic、frame、 calibration、実行予定のcommandをJSONで確認できます。

lidarslam-map start /path/to/rosbag2 \
  --yes \
  --dry-run \
  --json

--dry-runではsession bundle、sensor_setup.json、map outputを残さず、mappingも 開始しません。--yesはこの確認を非対話で実行するための指定であり、dry-runを外した 実行の書き込みを許可するものではありません。readyな結果ではJSONのstatusdry_runになり、run.command_shellに表示された保持済みの実行commandを確認できます。

安全なprofileを選べない場合は終了コード2になり、reason.codefindings[].code、 各findingのnext_actionnext_commandが診断を示します。sessionやmapはこの場合も 作成されません。next_commandがdoctorを示すときはそのcommandへ戻り、viewerの症状から mapping commandを組み立て直しません。

確認したplanで実際にmappingへ進むときは--dry-runを外し、端末では表示内容を確認して から開始します。ヘッドレス環境ではbrowserを起動せず成果物を保持するため、明示的に --viewer noneを使います。

lidarslam-map start /path/to/rosbag2 --viewer none

非対話で実行する場合も、planをレビューした後だけ--yes --viewer noneを追加します。 JSONや表示されたcommandにはlocal pathが含まれる場合があるため、確認結果はlocal-onlyで 扱い、raw outputをissueへ貼り付けません。

ROS 2をhostへインストールせず、checkout済みrepositoryからDockerを使う場合は 次の1コマンドです。bagはread-onlyでmountされます。

bash scripts/docker_map_bag.sh /absolute/path/to/rosbag2

実行前の確認結果をCIやwrapperから機械的に読む場合は、--dry-run--jsonを指定します。

bash scripts/docker_map_bag.sh --dry-run --json /absolute/path/to/rosbag2

出力はversion付きのdocker-map-bag-plan-v1 schema だけをstdoutへ返します。Docker呼び出し、network access、filesystem write、output directoryの 作成は行いません。inputはread-only mountとして記録され、image identityとcontract preflightは 実際のrunまで保留されます。JSONにはlocal pathが含まれるため、raw outputはissueへ貼らずlocal-only で扱います。

成功と失敗の見分け方

成功時はmap_verify: PASSとともに、次の場所が1画面に表示されます。

  • Autoware用pointcloud_map/
  • map_projector_info.yaml
  • 自動生成されたlanelet2_map.osm
  • 検証receiptとoffline review

失敗時は[reason-code]Details:Next:を探してください。保持された次の操作が 安全なterminal post-processingだけを再開する--resumeなら、表示されたcommandを そのまま実行します。

lidarslam-map demo /path/to/work_dir --resume

--resumeはmappingを再実行せず、安全なterminal post-processingだけを再開します。 bagのtopic、field、timestamp、profileが不明、または診断が入力修復を求めている場合は、 mappingやviewerを再試行せずlidarslam-map doctor /path/to/rosbag2 --jsonへ戻ってください。 reason.codefindings[].codeNext:が新しいoutput directoryでのretryを示す場合だけ、 保持されたcommandを使い、失敗したrunを上書きしません。

検証済みmapと表示できるmapを区別する

viewerでpointcloud_map/やpreviewが開けても、それだけではtrusted resultではありません。 表示できることはmap outputが存在することを示すだけで、Autoware verificationや証跡の整合性が 確認されたことは示しません。trusted resultとして扱えるのは、同じrunでmap_verify: PASSが 出て、保存されたfirst_map_validation_receipt.jsonstatus: PASS(receipt内の全checkもPASS)を 確認できる場合だけです。

表示・receiptの状態 意味 次の操作
map_verify: PASS とreceiptのstatus: PASS map、verification、manifestに結び付いた証跡が揃ったtrusted result versionとreceiptを確認してから、必要ならsupportまたは独立validationへ進む
viewerだけ表示される、またはNOT VERIFIED map outputはあってもverificationを実行していない・完了していない trusted evidenceとして共有せず、保存されたdiagnosisとinspect commandを先に読む
UNAVAILABLE、receiptの欠落・不正・FAIL receiptから検証結果を確定できない viewerの見た目からPASSを推測せず、同じsessionの証跡をinspectする

NOT VERIFIEDは「mapが失敗した」という推測ではなく、verificationが未実行または未完了という 境界です。UNAVAILABLEはreceiptがない、壊れている、または必要な証跡が揃っていない状態で、 近くにあるmapやpreviewからPASSを補いません。まず同じoutput/sessionの first_map_validation_receipt.jsonを開き、statusverification、checkの結果を読みます。 別sessionからコピーしたreceiptを現在のmapの証拠には使いません。

statusがPASSでない場合は、supportや独立validatorへ渡す前に、保存された autoware_map_diagnosis.md/JSON、verify_autoware_map.logrun_manifest.jsonを読み、保持された Details:Next:に従います。必要なら次のread-only診断を実行します。

lidarslam-map inspect /path/to/output --write

inspectの結果が示す原因を直して同じrunを再確認するまで、表示されたmapをverified resultとして 扱いません。独立validationへ進む場合も、内容をreviewしたPASS receiptだけを使い、map、bag、 raw log、preview、local pathを添付しません。

実行は終わったがmapの見た目がおかしい場合

launch fileやYAMLを推測で変更せず、元のsessionを残して、見えた症状を1つだけ既存の inspectへ渡します。

lidarslam-map inspect /path/to/session_bundle \
  --bag /path/to/rosbag2 \
  --symptom map-spins-or-spirals

指定できるcodeはmap-spins-or-spiralspose-drifts-or-oscillatesmap-stops-earlymap-is-too-sparsemap-is-not-visibleです。入力topic・時刻、 物理calibration、TF、runtime完了、map保存、viewerの順に確認し、保持済みpathを使った doctorinspectviewsupportだけを次のcommandとして返します。cardをsessionへ 保存する場合は--write、local automationでは--jsonを追加します。

これはユーザーが申告した症状の整理であり、原因の自動判定や精度結果ではありません。 parameterを自動変更せず、mappingを再実行せず、support bundleをuploadしません。見た目が 変わっただけでsensor対応や精度改善を主張せず、比較する場合は旧runを上書きしないfresh outputを使います。raw diagnosis JSONにはlocal pathが含まれ得るためissueへ貼りません。 --writeで保持した症状は、supportでは固定codeと「ユーザー申告」の境界だけが sanitized reportとissue bodyへ引き継がれます。title、check、command、自由記述はlocalに 残り、root causeの自動判定として共有されません。

receiptのsessionとstatusを確認する

first_map_validation_receipt.jsonだけを別のmap directoryへコピーしても、そのmapの証拠には なりません。receiptを読むときは、同じsessionのsession.jsonにある artifacts.validation_receiptのpathとmap_outputを基準にし、receiptのrun.run_idが 同じrun_manifest.jsonrun_idと一致することを確認します。receiptの verification.manifest_sha256は、そのsessionのrun_manifest.jsonに結び付いた値です。 別runのreceipt、古いsessionのreceipt、名前だけ変更したreceiptを混ぜません。

sessionを一覧から選ぶ場合は、local-onlyのJSONを確認します。

lidarslam-map sessions ./output --json

独立validationやsupportへ進む前の最終ゲートは、元のsession bundleに対する次のread-only 再検証です。

lidarslam-map report /path/to/session_bundle

固定Docker/source demoはsession.jsonを作らずreceipt-bound outputだけを残すため、その場合は lidarslam-map report /path/to/output/mid360_demo --jsonのようにoutput directoryを渡します。 どちらもmanifest、diagnosis、verification logのhashを再検証するread-only handoffです。

公開source checkoutがreport <output>対応前の場合は、checkout内のhelperでreceiptだけを read-only再生成・表示できます。

python3 scripts/create_first_map_validation_receipt.py \
  ~/ros2_ws/output/mid360_demo --json

PASSのJSON receiptだけをreviewして添付し、--writeは使いません。map、manifest、diagnosis、 logは添付しません。

このcommandは、sessionがverifiedであること、receiptがそのsession内の通常ファイルであること、 receiptのschemaと全check、manifest・diagnosis・verification logのhashが一致することを確認します。 READY FOR REVIEWが出た場合だけ、表示されたreceipt pathのJSONを内容確認して共有候補にします。 自動化ではreport --jsonを使えます。この再検証は書き込みもGitHubへの通信も行いません。 旧表記のsupport /path/to/session_bundle --first-mapも同じ検証として利用できます。

status: PASSのreceiptがあっても、再検証がreceipt mismatch、missing、invalid、またはnot PASSで 終了した場合は、その証拠をtrustedとして使いません。receipt、run_manifest.jsonsession.jsonを 手編集してhashを合わせたり、古いreceiptを新しいmapへコピーしたりせず、保存されたDetails:Next:retry.commandまたはverification-enabledな新しいoutput commandへ戻ります。元の証跡は 削除・uploadせず、support reportと公開添付のprivacy境界を守ります。

first-map検証パッケージの事前監査

source checkoutからDockerまたはsourceの経路を選ぶ前に、次の監査を実行します。

python3 scripts/check_first_map_verification_package.py --json

この監査はlocal-onlyかつread-onlyです。READYのときだけ先へ進みます。Docker/sourceのhandoff、 receipt schema、runtime互換性guard、公開ページのmarker、CI gate、release bundle inventoryが 一つの検証パッケージとして揃っていることを確認します。

receipt再検証に失敗したときの復旧

reportがrejectしても、元のmap、session、receipt、manifestは削除されません。 これは現在のevidenceがtrusted resultとして使えないという判定であり、mapが消えたという意味では ありません。旧outputを削除せず、receipt、run_manifest.jsonsession.jsonの内容やhashを手で 書き換えて再検証を通そうとしません。

まずlocal-onlyのsessionと保存された復旧情報を確認します。

lidarslam-map sessions ./output --status action_required --viewer none --json
lidarslam-map inspect /path/to/output --write

map_session_recovery.json、diagnosis、Details:Next:を順に読みます。resume.available がtrueでnext_command--resumeなら、表示されたcommandをそのまま実行し、mappingを再実行 しません。post-processingだけが完了すれば、同じsessionのreceiptをもう一度確認できます。

retry.availableがtrueなら、保存されたretry.commandを編集せずに実行します。これはpinned setup を保持したまま、通常はmap.retryまたはmap.retry-2のような新しいoutputへ書きます。旧sessionの 証跡と新しいretryの結果を混ぜず、新retryで新しく生成されたreceiptだけを再検証します。

resumeもretryも利用できない場合、または元のrunがverification offの診断だった場合は、doctorの 結果を確認してから、古いoutputとは別のpathにverificationをrequiredにした新しいrunを開始します。

lidarslam-map start /path/to/rosbag2 \
  --output-dir /path/to/output.verified \
  --verification required

viewerの見た目からcommandを再構成したり、古いreceiptを新しいmapにコピーしたりしません。新しい sessionでreportREADY FOR REVIEWを返し、receiptを内容確認できた場合だけ、 supportまたは独立validationの候補にします。旧証跡、bag、map、raw logは削除・uploadせず、公開時は review済みreceiptだけを使います。

失敗したrunを上書きせず再試行する

失敗したrunをもう一度mappingするときも、元のdirectoryを削除したり同じpathを指定したり しません。start--output-dirがすでに存在する場合はoutput directory already exists で停止し、既存のsessionやmapを上書きしません。

保存されたmap_session_recovery.jsonでは、次の3つを分けて読みます。

  • setup_bundle: sensor_setup.json、pinned parameter、session pageなどの保持されたsetup。
  • evidencefiles_preserved: true: 元のrunで得られたmanifest、diagnosis、log、receiptの証跡。
  • retry.available: true: retry.commandが同じpinned setupを使い、retry.output_dir (通常はmap.retryのような新しいdirectory)だけへ出力する再試行。

原因を直した後は、JSONに保持されたretry.commandをpathやoptionを編集せず、そのまま 実行します。viewerの見た目から新しいmapping commandを作りません。resume.available: truenext_command--resumeなら、まずpost-processingだけを再開し、mappingを再実行しません。 retryが無い場合に新しいstartを意図して行うときだけ、古いsessionとは別の新しい --output-dirを指定し、先にdoctorの診断を確認します。

recovery JSONとcommandにはbagやlocal pathが含まれるため、これらはlocal-onlyで扱います。 元のsession、map、raw logを削除・uploadせず、支援が必要な場合は後述のサニタイズ済み support reportだけを確認して共有します。

mapまたはviewerが空のとき: 3つの確認

初回は自分のbagやframeを変更する前に、固定公開デモをviewerなしで実行して 基準結果を確認します。

lidarslam-map demo ~/ros2_ws --viewer none

live入力を確認する場合は、まずtopicの型を確認します。

ros2 topic list -t

出力のうち[sensor_msgs/msg/PointCloud2]と表示された行のtopic名を選び、 <POINTCLOUD_TOPIC>をその名前に置き換えます。例えば /points [sensor_msgs/msg/PointCloud2]なら、コマンドには/pointsだけを入れます。 PointCloud2の行がない場合は、publisherまたはlaunchのremapを直してから再確認します。 山括弧を残したまま実行せず、次の順に確認します。

  1. PointCloud2が届いているか

bash timeout 5s ros2 topic hz --window 5 <POINTCLOUD_TOPIC>

average rate:が正の値で続けば入力は到達しています。0またはpublisherなしなら、 topicのremapまたはpublisherを直してから再確認します。

  1. frame_idが空でないか

bash timeout 5s ros2 topic echo --once --field header.frame_id <POINTCLOUD_TOPIC>

出力されたframe名を次のTF確認にそのまま使います。出力が空、または5秒で timeoutした場合は、publisherのheader.frame_idを修正してから再確認します。 viewerのframe名を推測して先に進めません。

  1. TFがつながっているか

check 2で出た空でないframe名を<POINTCLOUD_FRAME>に入れます。 <TF_TARGET_FRAME>にはruntimeまたはviewerが基準にするtarget frameを入れます。 例えばcheck 2の出力がlivox_frameなら、<POINTCLOUD_FRAME>だけを livox_frameに置き換えます。viewerでframe名を推測したり、山括弧を残したまま 実行したりしません。

bash ros2 run tf2_ros tf2_echo <TF_TARGET_FRAME> <POINTCLOUD_FRAME>

At time ...が繰り返し表示されることを確認します。利用できない場合は、 この2つのframeのsource/targetの向きとstatic extrinsicを直してから、同じ実際の frame名で再確認します。

3つが通ってもmap messageがない場合は、viewer設定を変える前に次を確認します。

timeout 5s ros2 topic echo --once /map/pointcloud_map
lidarslam-map inspect /path/to/output --write

messageがなければ生成されたautoware_map_diagnosis.mdの最初のfindingに従います。 messageがあればmapは存在するため、viewerのfixed frameをmap、topicを /map/pointcloud_mapに設定し、offline previewを確認します。bag、map、raw logを uploadする必要はありません。

ブラウザが開かない・ヘッドレス環境の場合

offline previewはネットワーク不要のself-contained HTMLです。ブラウザが自動で 開かない場合やヘッドレス環境では、HTMLの生成とブラウザを開く操作を分けます。 --no-openを付けるとブラウザを起動せず、コマンドが表示するHTML:の絶対パスを 使えます。

lidarslam-map view /path/to/output \
  --viewer browser \
  --no-open

出力例のHTML: /path/to/output/preview/mid360_robot_3d_map_preview.htmlにある 実際の絶対パスを確認します。デスクトップ環境で開く場合はそのHTMLをブラウザで 開き、ヘッドレス環境で生成した場合は管理下の方法でHTMLだけをデスクトップ 環境へコピーして開きます。previewの保存先を明示したい場合は--preview-dirを 追加します。

lidarslam-map view /path/to/output \
  --viewer browser \
  --no-open \
  --preview-dir /path/to/preview

--preview-dir--viewer browserと一緒に使います。生成されたHTMLにはmapの 表示データが含まれるため、bag、map、raw logと同じく非公開の成果物として扱い、 GitHub issueへuploadしません。共有が必要な場合は、先にサニタイズ済みのsupport reportを確認します。

保存したsessionを探して復旧する

前回の実行結果をtimestamp付きdirectoryから探す代わりに、session履歴を使います。 通常は./output直下の保存済みbundleだけを検査し、ローカルのcatalogを作ります。

lidarslam-map sessions

途中で止まったsessionだけを、ブラウザを開かずに確認する場合は次を使います。

lidarslam-map sessions ./output \
  --status action_required \
  --viewer none

catalogや端末出力にDetails:Next:が表示されたら、保存された診断結果を読み、 Next:の行に表示された実際のcommandをそのまま実行します。viewerを変更する前に map_verifyautoware_map_diagnosis.md、TF・topicのfindingを確認してください。 自動処理や確認だけなら、catalogを開かずJSONを読むこともできます。

lidarslam-map sessions ./output \
  --status action_required \
  --viewer none \
  --json

session履歴、catalog、診断、previewはlocal-onlyです。bag、map、raw log、preview HTMLをGitHub issueへuploadせず、支援が必要な場合はサニタイズ済みsupport report だけを内容確認後に共有します。

支援へ共有する前に確認する

まずsupport reportをJSONで確認します。これはread-onlyで、ZIPを作成せず、GitHubへ 送信もしません。

lidarslam-map support /path/to/session_bundle --json

ZIPが必要な場合はsession bundleの隣に作成される次の3ファイルだけを確認します。 README.txtissue-body.mdsupport-report.jsonにはstatus、diagnosis、証跡の hashが含まれますが、map geometry、bag、raw log、parameter内容、正確なlocal path、 credentialのようなcommand値は含まれません。3ファイルをすべて読んでから、必要な 部分だけをGitHub issueへ添付します。生成や添付は自動では行われません。

日本語のsupport reportとvalidation reportを分ける

困っているrunの原因を伝えるsupport reportと、利用者が公開手順を自分で実行した結果を 記録するvalidation reportは別のものです。目的に合わせて次のどちらか1つを選び、supportの 診断をvalidationの証拠として流用しません。

目的 安全な選択 公開するもの それが意味しないこと
動かない、止まった、または原因を切り分けたい lidarslam-map support /path/to/session_bundle --jsonでサニタイズ済みsupport reportを確認する 内容を確認してprivate pathを除いたsupport reportの必要部分だけ statusやdiagnosisがPASSに見えても、accepted validation evidenceではない
独立validatorとして自分のrunを報告したい 自分で公開手順を完了してからlidarslam-map report /path/to/session_bundleを実行する canonical independent-validation issue formのpublic fieldsと、内容をreviewしたreceiptだけ READY FOR REVIEWやissue提出だけでaccepted validationになるわけではない

通常のsupport --jsonは診断・再現・支援のためのlocal-onlyな入口で、JSONを表示するだけで ZIPを作りません。ZIPを作った場合は、生成されたREADME.txtissue-body.mdsupport-report.jsonをすべて読み、必要な診断情報だけを共有します。local path、recovery JSON (map_session_recovery.json)、map、bag、raw log、preview、trajectory、parameter、screenshot、 session bundle全体は貼りません。support reportはmaintainerが原因を調べるための資料であり、 receiptの代わりにも、公開validation reportの代わりにもなりません。

reportはsupport ZIPを作る操作ではなく、同じsessionに保存されたPASS receiptを 再検証して独立validationへ進むためのread-only handoffです。report --jsonのhandoff JSON、 receipt_path、local receipt pathはlocal-onlyで、public attachmentではありません。表示された canonical independent-validation issue formには、自分で実行したrunのrelease/commitまたは immutable image digest、OS・architecture・ROS環境、private pathをredactしたexact command、 findingsを記入します。receiptを添付する場合は、formで名前が示された first_map_validation_receipt.jsonを内容確認したもの1つだけにします。公開reportを提出しても、 maintainer reviewとvalidation ledgerのaccepted記録が済むまではaccepted evidenceではありません。

どちらのreportでも、identityはviewerの表示や移動するdevelop tagから推測しません。Dockerは 公開済み安定版v0.9.0-humbleまたはv0.9.0-jazzy、sourceは公開releaseではないv0.9.1候補と そのexact commit/revisionをlidarslam-map --versionとreceiptから記録します。Dockerのsupport report、source候補のvalidation report、別runのreceiptやhashを1つの報告へ混ぜず、足りない値を 推測せずに共有を止めます。

検証済みfirst mapを独立validatorへ渡す場合だけ、次のread-only handoffを使います。 reportはreceipt-boundのPASSを再検証し、ZIPを作らず、GitHubへ連絡しません。

lidarslam-map report /path/to/session_bundle

出力されるverification summaryとsafe environment hintsを確認し、公開添付には review済みのfirst-map receiptだけを使います。report --jsonのhandoff JSONは local receipt pathを含むため、公開添付には使いません。

独立validator向けのissue formへ送る場合は、同じ出力に含まれるcanonical independent-validation issue formを確認します。issue formには自分で実行したrunの release/commitまたはimmutable image digest、実行command、OS・architecture・ROS環境、 statusを記入し、commandからprivate pathをredactします。receiptを添付する前に内容を 読み、PASSなら名前が示されたfirst-map receiptだけを添付します。map、bag、preview、 raw log、trajectory、parameter、スクリーンショットは添付しません。

report --jsonのhandoff JSONとlocal receipt pathはpublic attachmentではありません。 このcommandはuploadしないため、自分でissue formへ入力して共有します。独立validationは 公開手順を自分で実行した結果だけを対象にし、maintainerのlive step-by-step guidanceは validationとして扱いません。詳しい判定条件はIndependent First-map Validation を参照してください。

公開共有前の5項目チェック

READY FOR REVIEWが表示されても、session bundle全体を公開するわけではありません。同じ sessionについて次の5項目を確認し、1つでも不明なら共有を止めます。5つすべてを確認できた 場合に限り、最後のreceiptだけを公開添付の候補にします。

- [ ] 1. version/revision: `lidarslam-map --version`を実行し、receiptの
      `run.product_version`と`run.git_commit`(値がある場合)を記録した。
- [ ] 2. same session/output: `run.run_id`、`map_output`、receipt path、
      `verification.manifest_sha256`が同じsessionの証跡に結び付いている。
- [ ] 3. revalidation: `report`が`READY FOR REVIEW`を返し、
      receiptの`status: PASS`と全checkのPASSを内容確認した。
- [ ] 4. privacy: receiptの`shareability`を読み、issue formへ貼るcommandから
      private pathをredactした。handoff JSONとlocal receipt pathはlocal-onlyのままにした。
- [ ] 5. attachment: 公開添付は内容確認済みの
      `first_map_validation_receipt.json`だけにした。

1では移動するdevelop tagやviewerの表示からversionを推測せず、公開release、commit、または immutable image digestを使います。2では別runのreceiptをコピーせず、session.jsonmap_outputとreceiptのrun.run_id、manifest hashを同じsessionで照合します。3がrejectしたら、 receiptを編集せず、前述の「receipt再検証に失敗したときの復旧」へ戻ります。

4のhandoff JSON、receipt path、session JSON、support reportのlocal pathは、共有用の資料では ありません。5以外に、map、bag、raw log、preview HTML、trajectory、parameter、screenshot、 session bundle全体も添付しません。issue formのversion、environment、redacted command、 verification summaryは自分のrunから転記し、receiptのJSONだけをレビュー済みの添付として使います。

公開共有用のreceiptテンプレート

5項目を確認した後は、reportが表示するcanonical issue formを開き、次の templateを自分のrunの値で埋めます。READY FOR REVIEWとreceiptのPASSが確認できない場合は、 このtemplateを公開用に使いません。

公開ドキュメント経路: <Docker First Map / Source quickstart / Own-bag golden path>
release/commit/image digest: <immutable release, commit, or image digest>
environment: <OS> / <architecture> / <ROS> / <install method>
exact command (private paths redacted):
<public documentation command with private paths removed>
result: PASS — verified first map completed
verification summary:
manifest_status=succeeded
diagnosis_status=success
autoware_status=PASS
manifest_sha256=<64 lowercase hex characters>
findings:
<what was unclear, slow, surprising, broken, or helpful>
attachment: first_map_validation_receipt.json (reviewed)

日本語の公開reportのfield provenanceを確認する

templateの各fieldは、report作成者が自分のrunから入力する値と、同じsessionのreceiptまたは report handoffから転記する値に分かれます。値の出どころが確認できないfieldは推測せず、 reportを提出しません。

fieldの種類 自分で確認する出どころ 該当するfield 入力ルール
operator-supplied public fields 自分が実行した公開手順、環境、観察 公開ドキュメント経路、environment、private pathをredactしたexact command、findings 自分のrunの事実だけを書く。viewerの表示やexampleの値で補わず、local path・credential・raw artifactを除く
receipt-derived validation fields 同じrunのreport handoffと、名前が示されたreview済みreceipt release/commit/image digestresult、verification summary、manifest_sha256、receipt attachment receipt/handoffの値をそのまま照合して転記する。別session、別output、別versionの値を混ぜない
review / acceptance status 公開issueの状態、maintainer review、validation ledger READY FOR REVIEW、public report submitted、maintainer review、accepted ledger evidence 自分でacceptedと名付けない。ledgerの明示的なaccepted記録がない間はaccepted validationと書かない

次の順序で同じsessionを照合します。まずlidarslam-map --versionとreceiptの run.product_versionrun.git_commit(値がある場合)を比較し、次にrun.run_idmap_outputverification.manifest_sha256をhandoff・session・receiptで突き合わせます。 result: PASS、verification summary、hash、またはreceipt pathがmissing、UNAVAILABLE、 mismatch、example-only、viewer-onlyの場合は、reportを公開せずDetails:Next:、または 保存されたretry指示へ戻ります。receipt、manifest、session JSONを編集して値を合わせません。

identityが曖昧な場合も停止します。Dockerなら公開済みv0.9.0-humbleまたはv0.9.0-jazzy、 sourceなら未公開v0.9.1候補とexact commit/revisionを、receiptまたはhandoffで確認できた場合 だけ記録します。develop tag、viewer、架空例からidentityやhashを作りません。handoff JSON、 local path、recovery JSON、map、bag、raw log、preview、trajectory、parameter、screenshot、 session bundle全体はreportにも添付にも含めず、公開添付はreview済みreceiptだけにします。

release/commit/image digestはreceiptのrun.product_versionrun.git_commitまたはhandoffの release referenceに対応させます。environment、redacted command、findingsは自分で入力する 公開fieldです。verification summaryはreceipt markdownのPASS blockから転記し、hashを推測・ 編集しません。

report --jsonのhandoff、receipt_pathmarkdown_pathsession.json、support reportの local pathはtemplateに貼りません。map、bag、raw log、preview、trajectory、parameter、 screenshotも添付せず、PASSを確認して内容をreviewした first_map_validation_receipt.jsonだけをpublic attachmentにします。

日本語のvalidation reportのfindingsを安全に書く

findingsは、自分のrunで気付いた一件の観察をmaintainerが再現・改善するための operator-supplied fieldです。result、verification summary、manifest hash、receipt attachment、 review statusを変更したり、root causeやaccepted statusを推測したりするfieldではありません。 一つの観察につき、次の4項目を自分の値で埋めます。

findings:
step: <公開ドキュメントのstepまたはcommand名。private pathは書かない>
expected: <公開ドキュメントが示す期待動作を1つ>
observed: <自分のrunで実際に観察した動作を1つ>
impact: <first-run userが何に困るか、または再現に何が必要か>

stepにはDocker First Mapsource quickstartSession summaryなど公開名を使い、 必要なら安定したreason.codeを添えます。local path、credential、bag/map名、raw logの行、 preview HTML、screenshot、session bundleの内容を貼らず、viewerで見えた症状だけから診断を 断定しません。expectedは公開手順から、observedは自分のrunから、impactは利用者への 影響または再現条件から書き分けます。root causeが不明なら不明と書き、support reportへ 戻します。

複数の観察がある場合も、4項目のblockを観察ごとに分けます。同じreceiptのhashやPASSを findingsへ再掲して証拠を増やしたり、findingを理由にresult、verification summary、 manifest_sha256、receipt JSON、review statusを書き換えたりしません。自分で公開手順を 完了していない、またはmaintainerのlive guidanceだけに基づく観察は独立validation reportへ 入れず、前述のサニタイズ済みsupport reportとして扱います。

日本語のvalidation reportのfinding follow-upを安全に行う

findingsunresolvedまたはrejectedになった後は、元のreportとreceiptを編集せず、 まず保存されたDetails:Next:retry.commandを読みます。次の二つの経路を混ぜずに 選びます。

経路 使う条件 進め方 してはいけないこと
support follow-up 元のrunの原因を切り分ける、またはretryの結果を相談する 保存されたDetails:/Next:を確認し、同じpinned setupのretry.commandが使える場合だけlocalで編集せず実行する。新しいretry.output_dirのfresh outputをサニタイズ済みsupport reportへ要約する 元のreport、receipt、manifest hash、review statusを編集する。support reportをaccepted validationにする
new independent validation 自分で公開手順を最初から完了し、独立した新しいrunの結果を報告する 公開routeを新しいoutputとsessionで実行し、そのrunに結び付いたreportとreview済みreceiptを1組だけ準備する 古いmap、session、receipt、hashを新runへコピーする。maintainerのlive guidanceだけの結果を独立validationと呼ぶ

support follow-upで公開するのは、private pathを除いた観察と再現条件だけです。保存された retry.commandにlocal pathやcredentialが含まれる場合は、command全体をreportへ貼らず、安定した reason.code、command名、サニタイズ済みのDetails:/Next:だけを記録します。retryは新しい outputへ書き、元のoutput、report、receipt、manifest_sha256を上書きしません。次のような 形で一件のfollow-upを要約できます。

follow-up route: support follow-up
original report/receipt: unchanged
reason.code: <保存された安定code>
Details: <private pathを除いた保存済みの説明>
Next: <private pathを除いた保存済みの次の操作>
fresh output: <新しいoutputで観察した事実と影響>
review status: unresolved / retrying — not accepted validation

new independent validationへ進む場合も、元のreportとreceiptはそのまま保持します。Dockerは 公開済みv0.9.0-humbleまたはv0.9.0-jazzy、sourceは未公開v0.9.1候補とexact commit/revisionを、その新しいsessionとreceiptから確認します。identity、session、または 同じrunへの結び付きを確認できない場合は停止し、viewerの表示、古いreceipt、架空のhashで 補いません。新しいreportを提出しても、maintainer reviewとledgerのaccepted記録までは READY FOR REVIEWまたはunresolvedのままで、accepted validationとは書きません。

一つのrunにつきreportとreceiptは1組だけにし、同じfollow-upを複数issueへ重複添付しません。 map、bag、raw log、preview、trajectory、parameter、screenshot、session bundle全体、handoff JSON、local receipt pathは公開せず、前述のサニタイズ済みsupport reportまたは内容をreviewした receiptだけを使います。

日本語のvalidation reportのfollow-up証跡を一組で保つ

follow-upを監査するときは、元のrunのreport + reviewed receipt、follow-upの要約、別runの independent-validation reportを別のものとして記録します。follow-upの要約は新しいreceiptや 新しいaccepted evidenceではありません。元のreport、receipt、manifest_sha256、review status を変えず、同じrunなら元の一組を参照し、新しいrunならそのrunだけの一組を作ります。

記録 意味 receiptの扱い 監査で確認すること
original report/receipt pair 一つのrunから作った公開reportと内容をreviewしたreceipt そのまま保持し、再生成・編集・hash変更をしない Docker/source identity、session/output、reportとreceiptの対応が同じrunである
follow-up note 元のfinding後に行ったsupport相談またはretryの要約 新しいreceiptを作らず、元の一組に対するnoteとして扱う route、保存済みreason.code、sanitized Details:/Next:、fresh-output facts、review statusが分かる
new independent-validation report 公開手順を自分で完了した別runの報告 新しいrunに結び付くreportとreview済みreceiptを1組だけ使う 古い一組を新runへ混ぜず、acceptedはledgerの明示記録がある場合だけ書く

次のblockはfollow-up noteの入力用です。local path、credential、raw command、receipt hashを そのまま貼らず、保存された情報を公開用にサニタイズしてから使います。

follow-up audit:
original report/receipt pair: <one unchanged pair; no local path>
original identity: <v0.9.0 Docker identity or v0.9.1 source candidate + exact revision>
follow-up route: <support follow-up / new independent validation>
reason.code: <saved stable code>
Details: <sanitized saved explanation>
Next: <sanitized saved next action>
fresh-output facts: <one fact and its user impact; no raw artifact>
review status: <unresolved / retrying / READY FOR REVIEW — not accepted>
duplicate check: <no duplicate issue or session artifact>

同じrunのsupport follow-upでは、original report/receipt pairを1組のまま保ち、fresh-output factsだけを新しいoutputから追記します。Details:Next:retry.commandの値が元の sessionやlocal pathを含む場合は、公開にはstable code、command名、影響だけを残します。 別runのindependent validationでは、Dockerなら公開済みv0.9.0-humbleまたはv0.9.0-jazzy、 sourceなら未公開v0.9.1候補とexact commit/revisionを新しいsessionとreceiptから確認し、 古いreport、receipt、map、hashをコピーしません。

identity、session、output、またはreportとreceiptが同じrunに結び付くことを確認できない場合は 監査を止めます。viewerの見た目、古いreceipt、架空のhashで不足を埋めず、acceptedや independent validationとも書きません。support相談やmaintainerのlive guidanceだけを行った 場合は、follow-up noteまたはサニタイズ済みsupport reportとして扱い、公開validation evidence の一組に昇格させません。

日本語のvalidation reportのfollow-up要約を監査可能にする

maintainerがfollow-up要約を受け取ったら、要約だけを見てPASSやacceptedを決めず、元の report + reviewed receiptと照合します。照合は次の順序で行い、どれか一つでも確認できない 場合はSTOPにします。

順序 確認するもの 一致・不足の判定
1. identity Dockerの公開済みv0.9.0-humble/v0.9.0-jazzy、またはsourceの未公開v0.9.1候補とexact commit/revision viewer、develop tag、example-only値から補わない。missing/mismatchならSTOP
2. same run 元のreport、receipt、session/output、manifest_sha256が同じrunに結び付く local pathやsession bundleを公開せず、同じrunを確認できなければSTOP
3. route support follow-up、または新しいindependent validationのどちらか noteを新しいreport/receiptに変換せず、別runなら古い一組と混ぜない
4. provenance reason.code、sanitized Details:/Next:、fresh-output factsの出どころ receipt-derived result、verification、hash、review statusをfollow-up factsで上書きしない
5. review status unresolvedretryingREADY FOR REVIEW、maintainer review、ledger ledgerの明示的なaccepted記録がない限りacceptedと分類しない

照合結果は、次の3分類だけを使います。MATCHED FOLLOW-UPは、元の一組が不変で、同じrunに 結び付いたサニタイズ済みnoteとして扱える場合だけです。NEW RUNは、公開手順を自分で完了した 別sessionのreportとreceiptが新しく1組そろい、古い一組と混ざっていない場合だけです。identity、 session、output、route、またはfieldの出どころが不明ならSTOPであり、viewerの見た目やnoteの 文面から推測して先に進みません。

follow-up audit disposition:
original pair: matched / missing / mismatch
identity: <public Docker identity or source candidate + exact revision>
same run/output: matched / stop
route: support follow-up / new independent validation
provenance: <reason.code + sanitized Details:/Next: + fresh-output facts>
evidence change: none — original report, receipt, and hash unchanged
review status: <unresolved / retrying / READY FOR REVIEW — not accepted>
disposition: MATCHED FOLLOW-UP / NEW RUN / STOP

このdispositionはmaintainerの監査メモであり、新しいvalidation resultやreceiptではありません。 MATCHED FOLLOW-UPでもoriginal report/receipt pairは1組のまま、NEW RUNでも新しいrunの report/receiptは1組だけにします。複数issueへ同じnoteやsession artifactを重複添付せず、map、 bag、raw log、preview、trajectory、parameter、screenshot、handoff JSON、local receipt path、 session bundle全体は公開しません。STOPの結果をaccepted、再現成功、またはroadmap evidenceと 書かず、保存されたDetails:Next:retry.commandへ戻ります。

日本語のvalidation reportのfollow-up監査結果を安全に分類する

分類の後に何をしてよいかも固定します。MATCHED FOLLOW-UPNEW RUNSTOPは操作の許可証 ではなく、元のevidenceをどう扱うかを示す監査結果です。どの分類でも、receipt、 run_manifest.jsonsession.jsonmanifest_sha256を手編集したり、follow-up noteを accepted validationへ変換したりしません。

分類 許可される対応 evidenceの扱い 公開status
MATCHED FOLLOW-UP 元のrunのsupport相談、または保存されたDetails:/Next:/retry.commandに従うsafe retry。fresh outputの事実はサニタイズ済みnoteへ追記する original report/receipt pairは変更せず、新しいreceiptを作らない unresolvedretrying、またはREADY FOR REVIEW — not accepted
NEW RUN exact identity、session、outputが確認できる新しいindependent validationだけを別runとして確認する 新しいrunのreport + reviewed receiptを1組だけ作り、古いpairと混ぜない maintainer review前はREADY FOR REVIEW — acceptedはledgerの明示記録後だけ
STOP サニタイズ済みsupportを依頼し、保存されたDetails:Next:retry.commandへ戻る original evidenceはそのまま保持し、新しいreportやreceiptを作らない STOP — not accepted、公開validation noteを作らない

MATCHED FOLLOW-UPでは、同じrunの原因確認や保存済みretryだけを行います。retryで新しいoutputが 得られても、元のreceiptのresult、verification、hash、review statusを上書きせず、観察した事実と 影響だけをサニタイズしてnoteにします。NEW RUNでは、Dockerなら公開済みv0.9.0-humbleまたは v0.9.0-jazzy、sourceなら未公開v0.9.1候補とexact commit/revisionを確認できる場合だけ、 新しいreport + reviewed receiptを一組にします。identity、session、outputのどれかが不足する 場合はSTOPです。

STOPでは、文面やviewerの見た目から原因、PASS、再現成功を推測せず、public validation noteを 作りません。supportへ渡すときもprivate path、credential、bag、map、raw log、session bundleを 含めず、保存されたDetails:/Next:と安全なretry条件だけを使います。acceptedは、maintainer reviewとledgerの明示的なaccepted記録がある場合だけ書きます。どの分類でも一つのrunにつき report + reviewed receiptは一組だけで、複数issueへ同じnoteやsession artifactを重複添付しません。

次のblockは、分類後の許可された対応を記録するためのものです。local pathやprivate artifactは 書きません。

follow-up action:
disposition: MATCHED FOLLOW-UP / NEW RUN / STOP
allowed action: <saved Details:/Next:/retry.command or new-run review>
original evidence: unchanged
new evidence: none / one new run report + reviewed receipt / none
next step: <sanitized Details: or Next:; no private path>
public status: unresolved / READY FOR REVIEW — not accepted / STOP — not accepted
duplicate check: <one pair per run; no duplicate issue or session artifact>

このaction blockは新しいvalidation resultや受理記録ではありません。MATCHED FOLLOW-UPは元の 一組に対するnote、NEW RUNは新しい一組、STOPは保留とsupport依頼です。分類後の操作が元の identity、session、outputに結び付かない場合や、既存のpairを編集・複製しそうな場合は、操作を 進めずSTOPに戻します。

日本語のvalidation reportのfollow-up分類後の対応を監査可能にする

分類を記録しただけでは、実際に何をしたかは決まりません。action resultを別に記録し、 許可された操作だけが行われたことを確認します。action resultが分類と一致しない場合や、 identity、session、outputを再確認できない場合は、元の証跡を編集せずSTOPPEDとして扱います。

disposition action result 許可されるevidence変更 公開status
MATCHED FOLLOW-UP NOTE ONLYSUPPORT REQUESTED、またはRETRY STARTED 変更なし。元のpairを参照し、retryのfresh factsだけをnoteへ追記する unresolvedretrying、またはREADY FOR REVIEW — not accepted
NEW RUN NEW PAIR PREPARED exact identity、session、outputがそろった新runのreport + reviewed receiptを1組だけ作る READY FOR REVIEW — acceptedはledgerの明示記録後だけ
STOP STOPPED 変更なし。新しいreport、receipt、公開validation noteを作らない STOP — not accepted

MATCHED FOLLOW-UPNOTE ONLYSUPPORT REQUESTED、またはRETRY STARTEDを記録した場合も、 元のreport、receipt、hash、review statusは変更しません。NEW RUNNEW PAIR PREPAREDは、 Dockerなら公開済みv0.9.0-humbleまたはv0.9.0-jazzy、sourceなら未公開v0.9.1候補と exact commit/revisionを新しいsessionから確認できる場合だけ許可します。古いpairのコピー、 receiptの再利用、同じrunの二重pairは認めません。

STOPSTOPPEDは、support依頼または保存されたDetails:/Next:/retry.commandへ戻る ための結果です。原因、PASS、再現成功、acceptedを推測せず、private path、credential、bag、 map、raw log、session bundleを公開しません。acceptedは、maintainer reviewとledgerの明示的な accepted記録がある場合だけ書きます。

次のblockは、分類後の実行結果を記録するためのものです。local pathやprivate artifactは書かず、 new artifact countは許可された一組の数だけを記録します。

follow-up action audit:
disposition: MATCHED FOLLOW-UP / NEW RUN / STOP
action result: NOTE ONLY / SUPPORT REQUESTED / RETRY STARTED /
               NEW PAIR PREPARED / STOPPED
identity/session/output: matched / missing / mismatch
allowed evidence change: none / one new report + reviewed receipt / none
original evidence: unchanged
new artifact count: 0 / one report + reviewed receipt / 0
public status: unresolved / READY FOR REVIEW — not accepted / STOP — not accepted
reason.code: <saved stable code>
Details: <sanitized explanation; no private path>
Next: <sanitized next action; no private path>
handoff: <support / maintainer review / stop>
audit result: completed / STOPPED — no acceptance

実行結果がこのblockの許可範囲と違った場合は、既存のreportやreceiptを書き換えて整合させず、 新しい監査メモをSTOPPEDとして残します。一つのrunにつきreport + reviewed receiptは一組だけ、 複数issueへ同じnoteやsession artifactは重複添付しません。NEW RUNでもledgerの受理前は READY FOR REVIEWであり、MATCHED FOLLOW-UPSTOPをindependent validationへ昇格させません。

日本語のvalidation reportのfollow-up実行結果を安全に引き継ぐ

handoffは、次の担当者へ監査結果を渡すためのroutingであり、acceptanceやreceipt編集の許可では ありません。action resultごとに引き継ぎ先と公開statusを固定すると、外部contributorはprivate artifactやmaintainerのlive guidanceに頼らず、同じ安全境界で相談・reviewを続けられます。

action result handoff target handoff status 引き継ぎ先がしてよいこと してはいけないこと
NOTE ONLY / SUPPORT REQUESTED / RETRY STARTED support READY FOR SUPPORT — not accepted サニタイズ済みreason.codeDetails:Next:、fresh factsを確認し、保存済みretry条件を案内する 新しいaccepted evidenceやreceiptを作る。live guidanceだけをindependent validationと呼ぶ
NEW PAIR PREPARED maintainer review READY FOR REVIEW — not accepted 新runのidentity、session、output、report + reviewed receiptを照合し、不足なら差し戻す 古いpairをコピーする。ledger前にaccepted、PASS、roadmap evidenceと書く
STOPPED stop / recovery STOP — not accepted 不足・mismatchをサニタイズして返し、保存済みDetails:/Next:/retry.commandへ戻す 原因や再現成功を推測する。公開validation noteや新しいreceiptを作る

READY FOR SUPPORTはsupportの入口であり、結果の受理ではありません。READY FOR REVIEWでも、 maintainer reviewとledgerの明示的なaccepted記録までは受理されません。STOPは失敗を隠すstatus ではなく、identity、session、output、またはfieldの出どころが確認できないときの再確認経路です。 どのhandoffでも元のreport、receipt、hash、review statusは変更せず、Dockerの公開済み v0.9.0-humble/v0.9.0-jazzyとsourceの未公開v0.9.1候補のidentity境界を保ちます。

次のblockは、担当者へ渡す最小情報を記録するためのものです。roleだけを使い、local path、 credential、bag、map、raw log、session bundleは書きません。

follow-up handoff:
original audit: <sanitized stable code; no private path>
disposition: MATCHED FOLLOW-UP / NEW RUN / STOP
action result: NOTE ONLY / SUPPORT REQUESTED / RETRY STARTED /
               NEW PAIR PREPARED / STOPPED
handoff target: support / maintainer review / stop
handoff status: READY FOR SUPPORT / READY FOR REVIEW — not accepted /
                STOP — not accepted
original evidence: unchanged
new evidence: none / one new report + reviewed receipt / none
owner role: operator / support / maintainer
next review: <date or not scheduled>
reason.code: <saved stable code>
Details: <sanitized explanation>
Next: <sanitized next action>
privacy check: <no private path or artifact>
duplicate check: <one handoff per action audit; no duplicate issue or session artifact>

引き継ぎ先がこのblockのstatusや許可範囲を変更したい場合は、既存のaudit blockを上書きせず、 新しいaction resultを別の監査メモとして記録します。一つのaction auditにつきhandoffは一つ、 一つのrunにつきreport + reviewed receiptは一組だけです。missing/mismatchを埋めるための架空の hash、viewerの見た目、古いreceiptは使わず、STOPから安全なsupport/retryへ戻ります。

validation reportのreview statusを区別する

READY FOR REVIEWは、元のsessionに対するlocal-onlyの再検証が完了し、canonical issue formへ 進める状態です。これは公開報告の提出済みでも、独立validationのacceptedでもありません。 次の状態を混同しないでください。

状態 意味 次の操作
local READY FOR REVIEW 同じsessionのreceipt、manifest、diagnosis、verificationを再確認でき、公開レビューへ進めるlocal handoffがある 5項目チェックとreceiptの内容確認を行い、private pathをredactして1つのreportを準備する
public report submitted canonical issue formにreportとreview済みreceiptを提出した 提出済みのreportとreceiptを保持し、maintainer reviewを待つ。提出だけではacceptedにならない
maintainer review 公開されたidentity、report、receipt、privacy、ledger条件をmaintainerが確認している 公開手順と保存されたNext:に従い、liveなstep-by-step validation helpを依頼せず、既存receiptを編集しない
accepted ledger evidence maintainer reviewと公開ledgerの受理条件が通り、ledgerにacceptedとして記録された この明示的なledger記録がある場合だけ、独立validationのaccepted evidenceとして扱う
unresolved / rejected 情報不足、receipt mismatch、未解決、または明示的なrejectで、ledgerの受理条件を満たしていない acceptedと表示せず、元の証跡を保持してDetails:Next:、保存されたretry指示を確認する

localのREADY FOR REVIEW handoffやpublic receiptは、公開reviewとledgerの受理条件が通るまで accepted validationではありません。公開issueを提出しただけ、maintainerが確認中であるだけ、 receiptのstatus: PASSだけ、またはviewerにmapが表示されたことだけから、acceptedやroadmapの matrix evidenceを推測しません。

提出後は、同じ内容のreportと同じreview済みreceiptを1組だけ使います。receipt、 run_manifest.jsonsession.json、hashを手編集して受理条件に合わせたり、同じevidenceを 複数issueへ重複添付したりしません。READY FOR REVIEWのhandoff JSON、local receipt path、 session bundle、map、bag、raw log、previewは引き続きlocal-onlyです。reviewがunresolvedまたは rejectedになった場合もmapが削除されたという意味ではなく、保存された安全なretryや新しい outputの指示がある場合だけそれに従います。

日本語のprivacy-safe validation report例

次は、公開formの項目と値の出どころを理解するための説明用の架空例です。実際のrun、receipt、 ledgerから作ったものではないため、実際のvalidation result、review済みevidence、accepted ledger evidenceではありません。値やhashを自分のreportへコピーせず、自分の reportとreview済みreceiptから実際の値を確認します。

[説明用の架空例 — not a real validation result / not accepted ledger evidence]
公開ドキュメント経路: Docker First Map (example)
release/commit/image digest: example-image@sha256:<example-only-64-hex-digest>
environment: Ubuntu 22.04 / amd64 / ROS 2 Humble / Docker
exact command (private paths redacted):
docker run --rm ghcr.io/rsasaki0109/lidar_slam_ros2:<immutable-example-release>
result: PASS — verified first map completed (example only)
verification summary:
manifest_status=succeeded
diagnosis_status=success
autoware_status=PASS
manifest_sha256=<example-only; copyしない>
findings:
説明用: 固定された公開経路の前提を確認できた
attachment: first_map_validation_receipt.json (reviewed) [example only]
review status: EXAMPLE ONLY — not submitted / not maintainer-reviewed / not accepted

この例でreport作成者が入力するoperator-supplied public fieldsは、公開ドキュメント経路、 environment、private pathをredactしたcommand、findingsです。result、verification summary、 manifest_sha256、receipt attachmentは実際のreview済みreceiptから転記する receipt-derived fieldsであり、見た目やviewerから補いません。架空のexample-only値を 実際のevidenceとして扱わず、実runのhashやrelease identityが確認できない場合はreportを 提出しません。

実際のreportにもlocal path、map、bag、raw log、preview、session bundleは含めません。公開添付は 前述の条件を満たして内容をreviewしたreceiptだけです。review statusnot submittednot maintainer-reviewed、またはnot acceptedの例は、GitHub issueや validation ledgerの証拠として使いません。

詳細

このページは最短経路だけを示します。すべてのoption、対応input、校正、復旧、 自動化contractは英語版のGetting StartedOperator Workflowsを参照してください。正規コマンドや安全境界に 差がある場合は英語版が優先されます。