Skip to content

feat(markdown): emit typed error envelopes across the markdown domain#1347

Merged
evandance merged 1 commit into
mainfrom
feat/errs-migrate-markdown
Jun 10, 2026
Merged

feat(markdown): emit typed error envelopes across the markdown domain#1347
evandance merged 1 commit into
mainfrom
feat/errs-migrate-markdown

Conversation

@evandance

@evandance evandance commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Migrates typed error envelopes across the Markdown shortcut domain. Scope is limited to shortcuts/markdown, Markdown error-contract guards, and Markdown guard tests.

Changes

  • Converts Markdown input, upload/download, patch, overwrite, diff, API, network, file, and invalid-response failures to typed errs.* envelopes.
  • Preserves structured params for content/file and folder/wiki target validation.
  • Adds Markdown coverage to .golangci.yml and lint/errscontract so legacy envelopes and common helpers cannot regress.

Test Plan

  • gofmt -l <changed go files> produced no output
  • go vet ./shortcuts/markdown/...
  • go test ./shortcuts/markdown/...
  • go test -C lint ./...
  • go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.1.6 run --new-from-rev=origin/main ./shortcuts/markdown/...
  • go run -C lint . ..
  • go build ./...

Related Issues

  • None

Summary by CodeRabbit

  • Refactor

    • Standardized Markdown command validation and error handling to use typed, param-aware markdown errors that preserve causes across validate, download, read, patch, overwrite, and upload flows.
  • Tests

    • Added and updated tests covering markdown validation, download error wrapping, parameter tagging, and legacy-detection coverage for migrated Markdown paths.
  • Chores

    • Adjusted linter configuration exclusions to reflect migrated Markdown paths.

@evandance evandance added size/M Single-domain feat or fix with limited business impact domain/ccm PR touches the ccm domain feature labels Jun 9, 2026
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Standardize error handling in shortcuts/markdown to use markdown-scoped errs types, add markdown error constructors and a download wrapper, update validations/read/save flows and tests, and include the markdown path in lint rules.

Changes

Markdown Error Handling Standardization

Layer / File(s) Summary
Linter configuration and rule enforcement
.golangci.yml, lint/errscontract/rule_no_legacy_common_helper_call.go, lint/errscontract/rule_no_legacy_envelope_literal.go, lint/errscontract/rules_test.go
Update .golangci.yml exclusions and add shortcuts/markdown/ to migrated-path lists; expand lint tests to cover markdown fetch path and aliased/function-value helper usages.
Markdown error builder functions
shortcuts/markdown/markdown_errors.go
Add markdown-specific ValidationError constructors, withMarkdownFileParam, and wrapMarkdownDownloadError to preserve or reclassify download errors with causes and message prefixes.
Markdown helpers validation refactor
shortcuts/markdown/helpers.go
Replace generic validation errors with typed markdownValidationError/markdownValidationParamError across spec parsing, token/resource validation, file/name/size checks, multipart part-read failures; attach causes and wrap input-stat errors with param context; remove unused imports.
Markdown diff validation and local-read handling
shortcuts/markdown/markdown_diff.go
Switch validateMarkdownDiffSpec and version/value checks to markdown-typed parameter errors; map local file open/stat/read errors via common.WrapInputStatErrorTyped and errs.ProblemOf; change content-size violation to markdownValidationError.
Diff tests and wrap behavior verification
shortcuts/markdown/markdown_diff_test.go
Add test asserting candidate params when versions/files are missing and a table-driven test verifying wrapMarkdownDownloadError behavior for typed API errors, markdown validation errors, and untyped transport errors.
Fetch/Overwrite/Patch command refactor
shortcuts/markdown/markdown_fetch.go, shortcuts/markdown/markdown_overwrite.go, shortcuts/markdown/markdown_patch.go
Use markdown-specific parameter and download error wrappers in Validate/Execute paths: --file-token, unsafe --output/--file, download/read failures, file-exists and save errors, and regex/pattern validation; remove unused output imports.
Markdown test helpers and updates
shortcuts/markdown/markdown_test.go
Add requireMarkdownValidationParam test helper and update create/overwrite missing-file tests to assert typed --file validation parameter; add multipart open-failure test.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • larksuite/cli#1248: Extends migratedCommonHelperPaths / migratedEnvelopePaths in errscontract rules for another shortcut domain.
  • larksuite/cli#1325: Overlaps multipart upload/error handling changes in shortcuts/markdown/helpers.go.
  • larksuite/cli#1346: Related edits to errscontract lint guards and migrated-path coverage.

Suggested labels

domain/ccm

Suggested reviewers

  • wittam-01
  • fangshuyu-768

Poem

🐰 I hopped through markdown code tonight,
typed errors now name each flag's small plight.
Downloads keep their causes, params point true,
tests and linters nod — the checks accrue.
A rabbit hums: structured errors, whoo-hoo!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.89% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: migrating typed error envelopes across the markdown domain.
Description check ✅ Passed The description covers all required sections with clear motivation, specific changes, comprehensive test plan, and follows the template structure.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/errs-migrate-markdown

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 and usage tips.

@github-actions github-actions Bot removed the domain/ccm PR touches the ccm domain label Jun 9, 2026
@evandance evandance added the domain/ccm PR touches the ccm domain label Jun 9, 2026
@github-actions github-actions Bot removed the domain/ccm PR touches the ccm domain label Jun 9, 2026
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

🚀 PR Preview Install Guide

🧰 CLI update

npm i -g https://pkg.pr.new/larksuite/cli/@larksuite/cli@c09814eb8f1019ba313da53276194a2807d782ca

🧩 Skill update

npx skills add larksuite/cli#feat/errs-migrate-markdown -y -g

@codecov

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 73.97260% with 19 lines in your changes missing coverage. Please review.
✅ Project coverage is 71.99%. Comparing base (6b48a39) to head (c09814e).

Files with missing lines Patch % Lines
shortcuts/markdown/markdown_diff.go 57.89% 8 Missing ⚠️
shortcuts/markdown/helpers.go 76.19% 5 Missing ⚠️
shortcuts/markdown/markdown_errors.go 89.47% 1 Missing and 1 partial ⚠️
shortcuts/markdown/markdown_fetch.go 66.66% 2 Missing ⚠️
shortcuts/markdown/markdown_overwrite.go 0.00% 1 Missing ⚠️
shortcuts/markdown/markdown_patch.go 85.71% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1347      +/-   ##
==========================================
+ Coverage   71.97%   71.99%   +0.02%     
==========================================
  Files         696      697       +1     
  Lines       65891    65899       +8     
==========================================
+ Hits        47424    47447      +23     
+ Misses      14811    14798      -13     
+ Partials     3656     3654       -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai 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.

🧹 Nitpick comments (1)
lint/errscontract/rule_no_legacy_envelope_literal.go (1)

24-24: ⚡ Quick win

Add a markdown-path regression test for this rule.

migratedEnvelopePaths now includes shortcuts/markdown/, but there’s no explicit CheckNoLegacyEnvelopeLiteral test asserting markdown is rejected. Adding one keeps this path-list contract from silently regressing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lint/errscontract/rule_no_legacy_envelope_literal.go` at line 24, Add a
regression test that ensures the new migratedEnvelopePaths entry
"shortcuts/markdown/" is covered: update or add a test for
CheckNoLegacyEnvelopeLiteral that constructs a sample markdown file path under
"shortcuts/markdown/" and asserts the rule rejects it (i.e., returns a
violation/error). Locate the test surrounding CheckNoLegacyEnvelopeLiteral and
migratedEnvelopePaths, add a case with a markdown file path (e.g., ending in .md
or appropriate test fixture) and assert the rule flags it so this path-list
contract cannot silently regress.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@lint/errscontract/rule_no_legacy_envelope_literal.go`:
- Line 24: Add a regression test that ensures the new migratedEnvelopePaths
entry "shortcuts/markdown/" is covered: update or add a test for
CheckNoLegacyEnvelopeLiteral that constructs a sample markdown file path under
"shortcuts/markdown/" and asserts the rule rejects it (i.e., returns a
violation/error). Locate the test surrounding CheckNoLegacyEnvelopeLiteral and
migratedEnvelopePaths, add a case with a markdown file path (e.g., ending in .md
or appropriate test fixture) and assert the rule flags it so this path-list
contract cannot silently regress.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: aac81858-9660-4f6b-8245-a5ad4595303b

📥 Commits

Reviewing files that changed from the base of the PR and between 03ea6e7 and 42eed2d.

📒 Files selected for processing (11)
  • .golangci.yml
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rules_test.go
  • shortcuts/markdown/helpers.go
  • shortcuts/markdown/markdown_diff.go
  • shortcuts/markdown/markdown_diff_test.go
  • shortcuts/markdown/markdown_errors.go
  • shortcuts/markdown/markdown_fetch.go
  • shortcuts/markdown/markdown_overwrite.go
  • shortcuts/markdown/markdown_patch.go

@evandance evandance force-pushed the feat/errs-migrate-markdown branch 2 times, most recently from 31e4096 to 7938980 Compare June 9, 2026 12:02

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
shortcuts/markdown/helpers.go (1)

410-416: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep --file param metadata consistent across upload modes.

Line 415 correctly tags local-open failures with --file, but the multipart counterpart still returns an untagged typed validation error. This makes large-file upload failures lose flag attribution compared to single-part uploads.

Suggested fix
@@
 	fileReader, err := openReader()
 	if err != nil {
-		return markdownUploadResult{}, common.WrapInputStatErrorTyped(err)
+		return markdownUploadResult{}, withMarkdownFileParam(common.WrapInputStatErrorTyped(err), "--file")
 	}

As per coding guidelines, user flag/arg validation failures should carry WithParam("--flag"), so both file-open paths should retain --file consistently.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shortcuts/markdown/helpers.go` around lines 410 - 416, The multipart upload
path currently returns an untagged typed validation error on local file open,
causing inconsistent flag attribution with single-part uploads; find the
multipart upload function (e.g., uploadMarkdownFileMultipart or the multipart
branch in uploadMarkdownFileAll) and change the openReader error return to wrap
the error using withMarkdownFileParam(common.WrapInputStatErrorTyped(err),
"--file") so both upload modes consistently attach the "--file" param metadata.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@shortcuts/markdown/markdown_test.go`:
- Around line 861-872: Update requireMarkdownValidationParam to use
errs.ProblemOf instead of errors.As so tests assert the typed problem metadata
and cause preservation: call errs.ProblemOf(err) to obtain the problem and
underlying cause, verify the problem is non-nil, check problem.Category ==
"validation" (or the expected category), problem.Subtype matches the validation
subtype if applicable, and problem.Param == want, and also assert that ProblemOf
returns a non-nil cause when present to ensure cause preservation; keep the
helper signature requireMarkdownValidationParam(t *testing.T, err error, want
string) and fail via t.Fatalf with clear messages when any of these checks fail.

---

Outside diff comments:
In `@shortcuts/markdown/helpers.go`:
- Around line 410-416: The multipart upload path currently returns an untagged
typed validation error on local file open, causing inconsistent flag attribution
with single-part uploads; find the multipart upload function (e.g.,
uploadMarkdownFileMultipart or the multipart branch in uploadMarkdownFileAll)
and change the openReader error return to wrap the error using
withMarkdownFileParam(common.WrapInputStatErrorTyped(err), "--file") so both
upload modes consistently attach the "--file" param metadata.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d5761bb4-99cf-4c8a-9b49-cb796d2c0c0a

📥 Commits

Reviewing files that changed from the base of the PR and between 31e4096 and 7938980.

📒 Files selected for processing (12)
  • .golangci.yml
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rules_test.go
  • shortcuts/markdown/helpers.go
  • shortcuts/markdown/markdown_diff.go
  • shortcuts/markdown/markdown_diff_test.go
  • shortcuts/markdown/markdown_errors.go
  • shortcuts/markdown/markdown_fetch.go
  • shortcuts/markdown/markdown_overwrite.go
  • shortcuts/markdown/markdown_patch.go
  • shortcuts/markdown/markdown_test.go
✅ Files skipped from review due to trivial changes (1)
  • .golangci.yml
🚧 Files skipped from review as they are similar to previous changes (8)
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rules_test.go
  • shortcuts/markdown/markdown_errors.go
  • shortcuts/markdown/markdown_diff_test.go
  • shortcuts/markdown/markdown_patch.go
  • shortcuts/markdown/markdown_overwrite.go
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • shortcuts/markdown/markdown_fetch.go

Comment thread shortcuts/markdown/markdown_test.go Outdated
@evandance evandance force-pushed the feat/errs-migrate-markdown branch from 7938980 to 2359bfd Compare June 9, 2026 12:28

@coderabbitai coderabbitai 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.

♻️ Duplicate comments (1)
shortcuts/markdown/markdown_test.go (1)

861-881: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Assert cause preservation in file-read/open error-path tests.

requireMarkdownValidationParam only validates category/subtype/param, so Line 893, Line 1339, and Line 1766 can pass even if .WithCause(err) gets dropped in the production path. The *_test guideline requires cause preservation checks for error paths.

Suggested focused fix
-func requireMarkdownValidationParam(t *testing.T, err error, want string) {
+func requireMarkdownValidationParam(t *testing.T, err error, want string, requireCause bool) {
 	t.Helper()
 	p, ok := errs.ProblemOf(err)
 	if !ok {
 		t.Fatalf("expected typed problem, got %T (%v)", err, err)
 	}
 	if p.Category != errs.CategoryValidation || p.Subtype != errs.SubtypeInvalidArgument {
 		t.Fatalf("classification = %s/%s, want %s/%s", p.Category, p.Subtype, errs.CategoryValidation, errs.SubtypeInvalidArgument)
 	}
 	var ve *errs.ValidationError
 	if !errors.As(err, &ve) {
 		t.Fatalf("expected *errs.ValidationError, got %T (%v)", err, err)
 	}
 	if ve.Param != want {
 		t.Fatalf("validation param = %q, want %q", ve.Param, want)
 	}
+	if requireCause && ve.Cause == nil {
+		t.Fatalf("expected validation cause to be preserved")
+	}
 }
@@
-	requireMarkdownValidationParam(t, err, "--file")
+	requireMarkdownValidationParam(t, err, "--file", true)
@@
-	requireMarkdownValidationParam(t, err, "--file")
+	requireMarkdownValidationParam(t, err, "--file", true)
@@
-	requireMarkdownValidationParam(t, err, "--file")
+	requireMarkdownValidationParam(t, err, "--file", true)

As per coding guidelines: "**/*_test.go: Error-path tests must assert typed metadata via errs.ProblemOf (category/subtype/param) and cause preservation, not message substrings alone."

Also applies to: 893-894, 1312-1340, 1755-1767

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@shortcuts/markdown/markdown_test.go` around lines 861 - 881, The helper
requireMarkdownValidationParam currently checks only ProblemOf and
ValidationError.Param; update it to also assert that the original cause is
preserved: after extracting ve via errors.As, ensure ve.Err (or the wrapped
cause) is non-nil and that errors.Unwrap(err) (or errors.Is(err, ve.Err))
confirms the cause is present; use the existing symbols errs.ProblemOf,
errs.ValidationError, errors.As, errors.Unwrap/errors.Is in the check so tests
at the error-path sites will fail if .WithCause(err) is dropped.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@shortcuts/markdown/markdown_test.go`:
- Around line 861-881: The helper requireMarkdownValidationParam currently
checks only ProblemOf and ValidationError.Param; update it to also assert that
the original cause is preserved: after extracting ve via errors.As, ensure
ve.Err (or the wrapped cause) is non-nil and that errors.Unwrap(err) (or
errors.Is(err, ve.Err)) confirms the cause is present; use the existing symbols
errs.ProblemOf, errs.ValidationError, errors.As, errors.Unwrap/errors.Is in the
check so tests at the error-path sites will fail if .WithCause(err) is dropped.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4a0f26ab-cee4-45ed-bda3-c8f28cb4b27e

📥 Commits

Reviewing files that changed from the base of the PR and between 7938980 and 2359bfd.

📒 Files selected for processing (12)
  • .golangci.yml
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rules_test.go
  • shortcuts/markdown/helpers.go
  • shortcuts/markdown/markdown_diff.go
  • shortcuts/markdown/markdown_diff_test.go
  • shortcuts/markdown/markdown_errors.go
  • shortcuts/markdown/markdown_fetch.go
  • shortcuts/markdown/markdown_overwrite.go
  • shortcuts/markdown/markdown_patch.go
  • shortcuts/markdown/markdown_test.go
✅ Files skipped from review due to trivial changes (2)
  • shortcuts/markdown/markdown_overwrite.go
  • .golangci.yml
🚧 Files skipped from review as they are similar to previous changes (7)
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • shortcuts/markdown/markdown_patch.go
  • shortcuts/markdown/markdown_errors.go
  • shortcuts/markdown/markdown_diff_test.go
  • shortcuts/markdown/markdown_fetch.go
  • shortcuts/markdown/markdown_diff.go

@evandance evandance force-pushed the feat/errs-migrate-markdown branch from 2359bfd to a4ef7cb Compare June 9, 2026 13:30

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@shortcuts/markdown/markdown_test.go`:
- Around line 861-881: requireMarkdownValidationParam currently only checks the
typed validation metadata but not that the original cause was preserved; change
its signature to requireMarkdownValidationParam(t *testing.T, err error, want
string, wantCause error) and inside after the existing checks assert that
errors.Is(err, wantCause) (or that errors.Unwrap chain contains wantCause) to
enforce the .WithCause(err) contract, then update the three file-open/read
failure tests that call requireMarkdownValidationParam to pass the expected
cause value.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a888da93-07f3-4875-a987-56f6922d900f

📥 Commits

Reviewing files that changed from the base of the PR and between 2359bfd and a4ef7cb.

📒 Files selected for processing (12)
  • .golangci.yml
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rules_test.go
  • shortcuts/markdown/helpers.go
  • shortcuts/markdown/markdown_diff.go
  • shortcuts/markdown/markdown_diff_test.go
  • shortcuts/markdown/markdown_errors.go
  • shortcuts/markdown/markdown_fetch.go
  • shortcuts/markdown/markdown_overwrite.go
  • shortcuts/markdown/markdown_patch.go
  • shortcuts/markdown/markdown_test.go
🚧 Files skipped from review as they are similar to previous changes (11)
  • .golangci.yml
  • shortcuts/markdown/markdown_overwrite.go
  • shortcuts/markdown/markdown_errors.go
  • lint/errscontract/rule_no_legacy_envelope_literal.go
  • lint/errscontract/rule_no_legacy_common_helper_call.go
  • shortcuts/markdown/markdown_diff_test.go
  • lint/errscontract/rules_test.go
  • shortcuts/markdown/markdown_fetch.go
  • shortcuts/markdown/markdown_patch.go
  • shortcuts/markdown/helpers.go
  • shortcuts/markdown/markdown_diff.go

Comment thread shortcuts/markdown/markdown_test.go
@evandance evandance force-pushed the feat/errs-migrate-markdown branch 3 times, most recently from cab8a51 to 04472c9 Compare June 10, 2026 04:05
@github-actions github-actions Bot added size/L Large or sensitive change across domains or core paths and removed size/M Single-domain feat or fix with limited business impact labels Jun 10, 2026
Emit structured validation, API, network, file, and internal error envelopes for Markdown shortcuts so users and agents can recover from failed markdown workflows using stable type, subtype, param, and code fields.

Add Markdown domain errscontract and golangci guards to prevent legacy envelope and common helper regressions.
@evandance evandance force-pushed the feat/errs-migrate-markdown branch from 04472c9 to c09814e Compare June 10, 2026 06:12
@evandance evandance merged commit e751a53 into main Jun 10, 2026
20 checks passed
@evandance evandance deleted the feat/errs-migrate-markdown branch June 10, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature size/L Large or sensitive change across domains or core paths

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants