Skip to content

Clarify import previews and certify CLI 2026.9.7 - #79

Merged
unbraind merged 3 commits into
mainfrom
fix/clarify-import-preview-and-certify-cli-2026-9-7
Sep 8, 2026
Merged

Clarify import previews and certify CLI 2026.9.7#79
unbraind merged 3 commits into
mainfrom
fix/clarify-import-preview-and-certify-cli-2026-9-7

Conversation

@unbraind

@unbraind unbraind commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Clarify import previews and certify CLI 2026.9.7.

Import previews now show an explicit action and label metadata without ambiguous punctuation.

Final local release:check passed using installed CLI/SDK 2026.9.7 and pm-changelog 2026.9.6. Final top-level test report: tests=299, pass=299, fail=0, skipped=0. ℹ all files | 92.57 | 82.94 | 92.27 | . Coverage is the current reported scope; complete four-dimensional source certification and independent production/privacy/review gates remain open.

PM: pm-github-5ow3, pm-github-github-ee4d59c27b67-35.

Closes #35.

Summary by Sourcery

Clarify dry-run import previews and update the local release tooling versions.

Bug Fixes:

  • Make dry-run import previews clearly distinguish the action from the issue title and omit empty label metadata.

Enhancements:

  • Use consistent preview formatting for atomic and non-atomic imports.

Build:

  • Update the CLI dependency to 2026.9.7 and pm-changelog to 2026.9.6.

Tests:

  • Add exact assertions covering labeled and unlabeled previews in atomic and non-atomic modes.

Chores:

  • Add project-management records for the related chore and issue.

Summary by cubic

Makes dry-run import previews unambiguous and certifies the updated local release tooling.

  • Previews now print action: title so the action no longer reads as the first word of the issue title.
  • Label metadata appears only when labels exist, so unlabeled issues no longer end with a dangling comma.
  • Atomic and non-atomic previews use the same formatting.
  • @unbrained/pm-cli bumps to 2026.9.7 and pm-changelog to 2026.9.6.
  • Tests now assert exact complete preview lines for labeled issues and both atomic and non-atomic output.

Written for commit a727304. Summary will update on new commits.

Review in cubic

Pin the published CLI/SDK 2026.9.7 and current changelog tooling, preserve consumer contracts, and record installed-tool validation with measured coverage limitations in the package tracker.
@unbraind

unbraind commented Sep 7, 2026

Copy link
Copy Markdown
Owner Author

@greptileai review

/gemini review

@coderabbitai full review

@sourcery-ai review

@cubic-dev-ai review

Please review the current pushed head and every changed area using the available free allowance. Check the actual dependency types and lockfile, PM history integrity, and compatibility evidence. Earlier-head results are historical evidence; report remaining findings against this head.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @unbraind, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 6 days and 15 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Review Change Stack

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 782e4c0e-772f-4bfa-9f27-fdc18f728b89

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: bf8a01db-2015-492e-862a-0303a084ec90

📥 Commits

Reviewing files that changed from the base of the PR and between b87faf4 and c91c2ce.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (7)
  • .agents/pm/chores/pm-github-5ow3.toon
  • .agents/pm/history/pm-github-5ow3.jsonl
  • .agents/pm/history/pm-github-github-ee4d59c27b67-35.jsonl
  • .agents/pm/issues/pm-github-github-ee4d59c27b67-35.toon
  • index.ts
  • package.json
  • test/dryrun-preview.test.ts

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


Summary by CodeRabbit

  • Bug Fixes

    • Improved dry-run import previews by separating the action from each issue title with a colon.
    • Removed the dangling comma and empty labels section for issues without labels.
    • Ensured atomic and non-atomic dry-run previews use consistent per-issue formatting.
  • Tests

    • Added regression coverage for dry-run preview formatting, including labeled and unlabeled issues.
    • Verified all 299 automated tests pass.

Walkthrough

The change fixes atomic and non-atomic dry-run import formatting, updates regression assertions, bumps release tooling versions, and records CLI and SDK release certification results.

Changes

Dry-run preview and release certification

Layer / File(s) Summary
Issue definition and regression criteria
.agents/pm/history/pm-github-github-ee4d59c27b67-35.jsonl, .agents/pm/issues/..., ...
Records the dry-run defects, acceptance criteria, regression test command, and issue lifecycle events.
Dry-run output formatting
index.ts, test/dryrun-preview.test.ts
Adds a colon after the action and omits empty labels from non-atomic output. Tests assert the updated atomic and non-atomic lines.
Release certification records
package.json, .agents/pm/chores/..., .agents/pm/history/pm-github-5ow3.jsonl
Updates CLI and changelog versions and records a passing release check with 299 tests and 92.57% coverage.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to c91c2

Dry-run import previews now clearly separate actions from issue titles and omit empty label metadata, with regression coverage for atomic and non-atomic output. The change is ready to merge.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the two main changes: clearer import previews and CLI release certification.
Description check ✅ Passed The description directly explains the preview formatting changes, dependency updates, validation results, tests, and linked issue.
Linked Issues check ✅ Passed The changes satisfy issue #35 by adding explicit action separators, omitting empty label metadata, and applying the format to atomic and non-atomic previews. The ignored package-lock.json is not requi…
Out of Scope Changes check ✅ Passed The changed source, tests, dependency versions, and project-management records all support the linked issue or the stated release-certification objective. No unrelated changes are evident.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. (5 skipped: 5 …
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/clarify-import-preview-and-certify-cli-2026-9-7

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-ai

cubic-dev-ai Bot commented Sep 7, 2026

Copy link
Copy Markdown

@greptileai review

/gemini review

@coderabbitai full review
...

@unbraind cubic can't start this review because your workspace has reached its free monthly review limit. cubic has reviewed 40,392 of the 40,000 allowed lines of code this month. Reviews resume on 1 October 2026 (in 24 days). Paid plans include much higher monthly review limits. Upgrade now to resume reviews.

To help optimise your usage, you can tune cubic to get the most out of your usage limits:

Learn more →

@sourcery-ai

sourcery-ai Bot commented Sep 7, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

The PR clarifies atomic and non-atomic import dry-run output by using explicit action labels and unambiguous metadata formatting, adds regression coverage for preview content, updates the certified CLI/changelog tooling versions to 2026.9.7/2026.9.6, and records the related PM artifacts.

Flow diagram for import dry-run preview formatting

flowchart TD
    runImport[runImport]
    dryRun{opts.dryRun}
    atomic[Atomic preview]
    standard[Standard preview]
    output["Explicit action: title (metadata)"]

    runImport --> dryRun
    dryRun -->|atomic plan| atomic
    dryRun -->|non-atomic import| standard
    atomic --> output
    standard --> output
Loading

File-Level Changes

Change Details Files
Make dry-run import previews explicitly distinguish the action from the issue title and present status/labels consistently.
  • Add a colon after the import/update action in atomic and non-atomic preview lines.
  • Render status alone when no labels exist, or status plus comma-separated labels when labels are present.
  • Extend preview tests to cover labeled and unlabeled issues and verify atomic output.
index.ts
test/dryrun-preview.test.ts
Certify the release against updated CLI and changelog tooling versions.
  • Upgrade the PM CLI to 2026.9.7.
  • Upgrade pm-changelog to 2026.9.6 and refresh the lockfile.
package.json
package-lock.json
Record the associated project-management chore, issue, and execution history.
  • Add PM chore and issue metadata plus JSONL history records.
.agents/pm/chores/pm-github-5ow3.toon
.agents/pm/issues/pm-github-github-ee4d59c27b67-35.toon
.agents/pm/history/pm-github-5ow3.jsonl
.agents/pm/history/pm-github-github-ee4d59c27b67-35.jsonl

Assessment against linked issues

Issue Objective Addressed Explanation
#35 Separate the import/update action verb from the issue title with clear punctuation in non-atomic dry-run previews.
#35 Avoid emitting a dangling comma when a dry-run issue has no labels, while preserving status and label metadata when labels exist.
#35 Apply the same action/title formatting clarification to atomic dry-run previews.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

@unbraind I will perform a full review of the current pushed head for #79. I will check all changed areas, dependency types and lockfile, PM history integrity, and compatibility evidence. I will treat earlier-head results as historical only.

✅ Action performed

Full review finished.

@greptile-apps

greptile-apps Bot commented Sep 7, 2026

Copy link
Copy Markdown

Greptile Summary

Clarifies dry-run import previews and completes release metadata for version 2026.9.8.

  • Separates import/update actions from issue titles and omits empty label metadata.
  • Applies consistent action formatting to atomic and non-atomic previews.
  • Strengthens preview tests with exact complete-line assertions.
  • Updates the certified CLI and changelog development tooling.
  • Aligns the package, lockfile, manifest, source export, and changelog release versions.

Confidence Score: 5/5

The PR appears safe to merge with no outstanding correctness, security, or repository-rule findings.

The preview formatting is consistently applied and covered by exact assertions, release metadata is aligned across all required files, and the prior test-strength finding was fixed and manually resolved.

Important Files Changed

Filename Overview
index.ts Makes atomic and non-atomic import previews unambiguous and updates the exported extension version.
test/dryrun-preview.test.ts Adds labeled fixture coverage and exact assertions for complete preview lines in both import modes.
package.json Aligns the package release version and pins the certified CLI and changelog tool releases.
package-lock.json Synchronizes the root package version and resolved development tooling.
manifest.json Aligns the extension manifest with release version 2026.9.8.
CHANGELOG.md Records the 2026.9.8 release using the expected version-derived date.

Reviews (3): Last reviewed commit: "Merge branch 'main' into fix/clarify-imp..." | Re-trigger Greptile

Comment thread test/dryrun-preview.test.ts Outdated
Greptile: tightened both non-atomic preview assertions to exact complete lines, matching the atomic checks, so trailing malformed metadata or punctuation cannot pass. Both preview regressions pass.
@unbraind

unbraind commented Sep 7, 2026

Copy link
Copy Markdown
Owner Author

@greptileai review

/gemini review

@coderabbitai full review

@sourcery-ai review

@cubic-dev-ai review

Please review the current pushed head and every changed area using the available free allowance. Check the actual dependency types and lockfile, PM history integrity, and compatibility evidence. Earlier-head results are historical evidence; report remaining findings against this head.

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@unbraind have exceeded the limit for the number of chat messages per hour. Please wait 38 minutes and 50 seconds before sending another message.

@cubic-dev-ai

cubic-dev-ai Bot commented Sep 7, 2026

Copy link
Copy Markdown

@greptileai review

/gemini review

@coderabbitai full review
...

@unbraind cubic can't start this review because your workspace has reached its free monthly review limit. cubic has reviewed 40,392 of the 40,000 allowed lines of code this month. Reviews resume on 1 October 2026 (in 24 days). Paid plans include much higher monthly review limits. Upgrade now to resume reviews.

To help optimise your usage, you can tune cubic to get the most out of your usage limits:

Learn more →

@unbraind

unbraind commented Sep 7, 2026

Copy link
Copy Markdown
Owner Author

Review dispositions for the retrieved head a56e0f0:

  • inline 3952592062: Accepted and fixed in a56e0f0: both ordinary preview assertions now require complete exact lines, matching atomic coverage. Both targeted regressions pass; Greptile subsequently confirmed the correction.
  • reviews 5135217571: Recorded as unavailable or summary-only review, not approval. Free-only operation is retained; no paid review is requested.
  • reviews 5135226163: Read and acknowledged. Compatibility evidence is scoped to the identified commit and current test gate; it does not clear separate whole-source coverage, historical privacy, hosted deployment or unavailable-review requirements.
  • comments 5575600453: Recorded as unavailable or summary-only review, not approval. Free-only operation is retained; no paid review is requested.
  • comments 5575600705: Recorded as unavailable or summary-only review, not approval. Free-only operation is retained; no paid review is requested.
  • comments 5575601293: Read and acknowledged. Compatibility evidence is scoped to the identified commit and current test gate; it does not clear separate whole-source coverage, historical privacy, hosted deployment or unavailable-review requirements.
  • comments 5575601764: Read and acknowledged. Compatibility evidence is scoped to the identified commit and current test gate; it does not clear separate whole-source coverage, historical privacy, hosted deployment or unavailable-review requirements.
  • comments 5575616925: Read and acknowledged. Compatibility evidence is scoped to the identified commit and current test gate; it does not clear separate whole-source coverage, historical privacy, hosted deployment or unavailable-review requirements.
  • comments 5575726645: Recorded as unavailable or summary-only review, not approval. Free-only operation is retained; no paid review is requested.
  • comments 5575727116: Recorded as unavailable or summary-only review, not approval. Free-only operation is retained; no paid review is requested.

@unbraind

unbraind commented Sep 7, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

Please review the current head a56e0f0 under included free OSS capacity only. Do not use usage-based billing. Earlier-head results do not clear this head; report any remaining actionable findings or explicitly state an availability limit.

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '=== checkout ==='
git rev-parse HEAD
git status --short
echo '=== remotes and merge base ==='
git remote -v
base="$(git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD origin/master 2>/dev/null || true)"
printf 'base=%s\n' "$base"
if [ -n "$base" ]; then
  echo '=== changed files ==='
  git diff --name-status "$base"...HEAD
  echo '=== diff stat ==='
  git diff --stat "$base"...HEAD
  echo '=== full diff ==='
  git diff --find-renames --find-copies --unified=80 "$base"...HEAD
fi

echo '=== package manifests and lockfiles ==='
fd -HI '^(package\.json|package-lock\.json|npm-shrinkwrap\.json|pnpm-lock\.yaml|yarn\.lock)$' . -E node_modules -E .git \
  -x sh -c 'echo "--- $1"; sed -n "1,260p" "$1"' sh {}

echo '=== index outline ==='
ast-grep outline index.ts --items all 2>/dev/null || true
echo '=== dry-run test outline ==='
ast-grep outline test/dryrun-preview.test.ts --items all 2>/dev/null || true

echo '=== dry-run formatting call sites ==='
rg -n -C 12 --glob 'index.ts' --glob 'test/dryrun-preview.test.ts' \
  '\[dry-run\]|labels\.join|previewImport|--link-deps|atomic' .

echo '=== PM records ==='
fd -HI -e toon -e jsonl .agents/pm -x sh -c 'echo "--- $1"; cat -n "$1"' sh {} 2>/dev/null || true

echo '=== JSONL validation and event summary ==='
python3 - <<'PY'
import json
from pathlib import Path
for path in sorted(Path(".agents/pm").rglob("*.jsonl")):
    print(f"--- {path}")
    for n, line in enumerate(path.read_text().splitlines(), 1):
        try:
            value = json.loads(line)
            print(f"{n}: OK keys={','.join(sorted(value)[:12])}")
        except Exception as exc:
            print(f"{n}: INVALID {exc}")
PY

echo '=== references to versioned release tools ==='
rg -n -C 4 --glob '!node_modules/**' --glob '!*.lock' \
  '`@unbrained/pm-cli`|pm-changelog|2026\.9\.[2567]|release:check' .

Length of output: 176537


🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected="a56e0f0f366f1225a245b0923e8e8a0f59a388a7"
actual="$(git rev-parse HEAD)"
printf 'HEAD=%s\nEXPECTED=%s\nHEAD_MATCH=%s\n' "$actual" "$expected" "$([ "$actual" = "$expected" ] && echo yes || echo no)"

base="$(git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD origin/master)"
printf 'MERGE_BASE=%s\n' "$base"

echo '=== exact changed paths ==='
git diff --name-status "$base"...HEAD

echo '=== exact diff ==='
git diff --find-renames --unified=25 "$base"...HEAD -- \
  index.ts package.json package-lock.json test/dryrun-preview.test.ts .agents/pm

echo '=== changed PM files at HEAD ==='
git diff --name-only "$base"...HEAD -- '.agents/pm/**' | while IFS= read -r path; do
  echo "--- $path"
  cat -n "$path"
done

echo '=== package and lock alignment ==='
python3 - <<'PY'
import json
from pathlib import Path
package = json.loads(Path("package.json").read_text())
lock = json.loads(Path("package-lock.json").read_text())
root = lock["packages"][""]
for name in ("`@unbrained/pm-cli`", "pm-changelog"):
    declared = package.get("devDependencies", {}).get(name)
    locked_declared = root.get("devDependencies", {}).get(name)
    installed = lock["packages"].get(f"node_modules/{name}", {})
    print(f"{name}: package.devDependencies={declared!r}; lock.root.devDependencies={locked_declared!r}; installed.version={installed.get('version')!r}; installed.dev={installed.get('dev')!r}")
PY

echo '=== changed JSONL hash continuity ==='
python3 - <<'PY'
import json, subprocess
base = subprocess.check_output(["git", "merge-base", "HEAD", "origin/main"], text=True).strip()
paths = subprocess.check_output(["git", "diff", "--name-only", f"{base}...HEAD", "--", ".agents/pm"], text=True).splitlines()
for raw in paths:
    if not raw.endswith(".jsonl"):
        continue
    path = raw
    records = [json.loads(line) for line in open(path, encoding="utf-8") if line.strip()]
    print(f"--- {path}: {len(records)} records")
    for index, (previous, current) in enumerate(zip(records, records[1:]), start=2):
        if previous.get("after_hash") != current.get("before_hash"):
            print(f"DISCONTINUITY at line {index}: prior after_hash={previous.get('after_hash')!r}; before_hash={current.get('before_hash')!r}")
    print("continuity=OK")
PY

echo '=== dry-run test assertions and relevant implementation ==='
sed -n '1,120p' test/dryrun-preview.test.ts
sed -n '2838,2875p' index.ts
sed -n '2948,2980p' index.ts

echo '=== relevant test discovery, without execution ==='
rg -n -C 3 --glob 'test/**/*.ts' \
  'dry-run.*labels|labels.*dry-run|previewImport\(|\[dry-run\]\[atomic\].*update:|\[dry-run\].*update:' test

Length of output: 98490


@unbraind Full static review completed for a56e0f0f366f1225a245b0923e8e8a0f59a388a7.

I found no remaining actionable findings.

Checks completed:

  • Reviewed all eight changed paths against merge-base b87faf4602f4ad08c5440aee1bbd0117e527b09d.
  • Confirmed both import preview paths use action: title.
  • Confirmed the non-atomic path prints only the status when labels are empty.
  • Confirmed complete-line regression assertions cover labeled and unlabeled non-atomic output and atomic output.
  • Confirmed @unbrained/pm-cli 2026.9.7 and pm-changelog 2026.9.6 are development dependencies. The lockfile declarations and resolved packages match.
  • Confirmed the new PM JSONL records parse successfully and their hash chains are continuous.

I did not run repository tests or release commands. The environment permits static inspection only.

You are interacting with an AI system.

@unbraind

unbraind commented Sep 7, 2026

Copy link
Copy Markdown
Owner Author

Review dispositions for the retrieved head a56e0f0:

  • comments 5576115726: Accepted as a static review of a56e0f0. Both exact complete-line preview regressions passed locally, and the full local release gate passed. PM history integrity was checked with the installed CLI; static adjacency alone is a narrower check. Other unavailable reviewers and full-source coverage remain open.

@unbraind
unbraind merged commit 544f85c into main Sep 8, 2026
9 checks passed
@unbraind
unbraind deleted the fix/clarify-import-preview-and-certify-cli-2026-9-7 branch September 8, 2026 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

github import --dry-run runs the action verb into the title and emits a dangling comma when an issue has no labels

1 participant