Skip to content

Improve mobile pull request UI#899

Merged
arul28 merged 6 commits into
mainfrom
ade/start-skill-lane-going-about-eacc99d2
Jul 24, 2026
Merged

Improve mobile pull request UI#899
arul28 merged 6 commits into
mainfrom
ade/start-skill-lane-going-about-eacc99d2

Conversation

@arul28

@arul28 arul28 commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • compact the iOS PR list and detail summary
  • make the unmapped notice collapsible and remove the mobile AI review card
  • render GitHub HTML descriptions as safe native Markdown/disclosures
  • add focused parser regression tests and update internal mobile PR docs

Validation

  • targeted iOS parser suite: 7 tests passed
  • iOS app compiled through the ADE test target
  • docs validation: 201 files passed

Open in ADE: https://ade-app.dev/open?type=pr&repo=arul28%2FADE&number=899

Summary by CodeRabbit

  • New Features

    • Enhanced PR detail summaries with status, checks, changes, and an expandable recent commits list.
    • PR bodies containing embedded <details> now render as expandable sections with extracted titles.
    • Unmapped PR banners gained richer actions (mapping/other options) and remember expansion within the current scene.
  • Improvements

    • Removed the AI review summary experience from PR details.
    • Refreshed PR list/detail layouts and loading skeletons for better visual consistency.
  • Tests

    • Added automated tests for parsing and HTML normalization.

Greptile Summary

This PR updates the iOS pull request experience for a more compact mobile flow. The main changes are:

  • Compact PR list rows and detail summary metrics.
  • Replace the mobile AI review card with native summary and description sections.
  • Render GitHub HTML descriptions as safe native Markdown and disclosures.
  • Add an expandable unmapped-lane banner with mapping and GitHub actions.
  • Preserve warm cached PR detail sidecars, including deployments.
  • Add parser tests and update internal mobile PR documentation.

Confidence Score: 5/5

Safe to merge with low risk.

The changes are mostly UI refactoring plus a focused parser covered by tests. No blocking correctness or security issues were identified.

No files require special attention.

T-Rex T-Rex Logs

What T-Rex did

  • Reviewed the general-contract-validation proof and verified that the proof log captured the command, working directory, tool availability checks, skipped XCTest rationale, and project/test reference checks.
  • Confirmed that no severity-bearing findings were produced due to the environment/tooling blocker.
  • Documented the recommended next step to complete PR validation on macOS with Xcode by running the specified xcodebuild test command.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
apps/ios/ADE/Views/PRs/PrDetailScreen.swift Wires the compact summary, collapsible unmapped banner, description card, and warm-cache sidecar preservation into the detail screen.
apps/ios/ADE/Views/PRs/PrDetailHeaderComponents.swift Adds compact PR detail summary, native disclosure description rendering, and an expandable unmapped-lane banner.
apps/ios/ADE/Views/PRs/PrGitHubDescriptionParser.swift Adds GitHub HTML-to-safe-Markdown parsing with details extraction, HTML normalization, entity decoding, and Markdown syntax protection.
apps/ios/ADETests/PrGitHubDescriptionParserTests.swift Adds parser tests for details blocks, unsafe HTML stripping, Markdown angle brackets, fences, and nested or malformed details.
apps/ios/ADE/Views/PRs/PrsRootScreen.swift Updates the PR root list, filters, and navigation behavior for the compact GitHub surface.
apps/ios/ADE/Views/PRs/PrRowCard.swift Compacts PR row layout and indicators for mobile list density.
apps/ios/ADE/Models/RemoteModels.swift Removes the mobile AI review summary model after the UI no longer requests it.
apps/ios/ADE/Services/SyncService.swift Removes the unused AI summary fetch API while leaving PR detail sidecar loading paths intact.

Sequence Diagram

sequenceDiagram
participant User
participant PRList as iOS PR List
participant Detail as PrDetailView
participant Sync as SyncService
participant Host as ADE Host

User->>PRList: Open GitHub or ADE PR
PRList->>Detail: Navigate with PR id or repo coordinates
Detail->>Sync: Load list item, snapshot, and sidecars
alt Unmapped GitHub route
    Sync->>Host: prs.getMobileGithubDetail
    Host-->>Sync: item, snapshot, threads, runs, activity, unavailable parts
    Sync-->>Detail: Aggregate detail payload
    Detail->>Detail: Merge snapshot and preserve cached deployments/capabilities
else Mapped ADE route
    Sync->>Host: prs.getSnapshot and sidecar commands
    Host-->>Sync: snapshot, threads, runs, deployments, capabilities
    Sync-->>Detail: Hydrated detail state
end
Detail->>Detail: Render summary metrics and parsed description disclosures
User->>Detail: Expand unmapped actions or commit list
Loading

Reviews (6): Last reviewed commit: "ship: iteration 5 — preserve PR Markdown..." | Re-trigger Greptile

@vercel

vercel Bot commented Jul 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
ade Ignored Ignored Preview Jul 24, 2026 7:02pm

@arul28 arul28 changed the title mobile-prs-github-data -> Primary Improve mobile pull request UI Jul 24, 2026
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Changes

PR detail UI

Layer / File(s) Summary
Remove AI summary flow
apps/ios/ADE/Models/RemoteModels.swift, apps/ios/ADE/Services/SyncService.swift, apps/ios/ADE/Views/PRs/..., apps/ios/ADETests/ADETests.swift
Removes the AI review summary model, remote request, card, screen state, refresh action, cache fields, and related fixture data while adding deployments to warm entries.
Parse GitHub descriptions
apps/ios/ADE/Views/PRs/PrGitHubDescriptionParser.swift, apps/ios/ADETests/PrGitHubDescriptionParserTests.swift
Adds HTML-to-Markdown parsing with disclosure support, nested-details handling, code protection, entity decoding, and focused parser tests.
Build PR detail header components
apps/ios/ADE/Views/PRs/PrDetailHeaderComponents.swift, apps/ios/ADE/Views/PRs/PrDetailScreen.swift, apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift, apps/ios/ADE/Views/PRs/PrDetailOverviewPreviews.swift
Adds reusable description, summary, commit, skeleton, and unmapped-banner components and wires them into the detail screen with persisted expansion state and updated previews.
Update PR list cards
apps/ios/ADE/Views/PRs/PrRowCard.swift, apps/ios/ADE/Views/PRs/PrsRootScreen.swift, apps/ios/ADE/Views/PRs/PrRowCardPreviews.swift
Adjusts row presentation and signals, adds a row skeleton, and updates list insets and preview appearance.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • arul28/ADE#701: Also modifies the PR detail Overview composition and the AI summary card area.

Suggested labels: ios, docs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.52% 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
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main theme of the changes: improving the mobile PR UI in the iOS app.
✨ 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 ade/start-skill-lane-going-about-eacc99d2

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.

@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

🧹 Nitpick comments (1)
apps/ios/ADE/Views/PRs/PrGitHubDescriptionParser.swift (1)

20-111: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Cache parsed PR description blocks and compiled regexes.

PrThreadDescriptionCard rebuilds blocks = parsePrGitHubDescriptionBlocks(text) from its initializer after SwiftUI state changes, so scrolling/other detail-screen updates can re-parse the description. Store the parsed blocks in the card instead, and hoist the repeated NSRegularExpression patterns (details, summary, code blocks, fenced code, script/style, tag normalization, blank-line collapse) into static constants so body updates don’t recompile them.

🤖 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 `@apps/ios/ADE/Views/PRs/PrGitHubDescriptionParser.swift` around lines 20 -
111, Cache the result of parsePrGitHubDescriptionBlocks in
PrThreadDescriptionCard rather than rebuilding it during state-driven updates.
Hoist the detailsRegex and summaryRegex patterns in
parsePrGitHubDescriptionBlocks, along with the code-block, fenced-code,
script/style, tag-normalization, and blank-line-collapse regexes used by
prProtectMarkdownCode and normalization helpers, into reusable static constants
so they are compiled once.
🤖 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 `@apps/ios/ADE/Views/PRs/PrDetailScreen.swift`:
- Around line 619-622: Restore the matched-geometry transition in PrDetailView
by applying adeNavigationZoomTransition with the PR’s transition identifier and
transitionNamespace, matching the PrRowCard source configuration. If the
transition is intentionally removed instead, remove transitionNamespace from
PrDetailView’s initializer and the PR navigation route, and remove the
corresponding PrRowCard transition parameters.

---

Nitpick comments:
In `@apps/ios/ADE/Views/PRs/PrGitHubDescriptionParser.swift`:
- Around line 20-111: Cache the result of parsePrGitHubDescriptionBlocks in
PrThreadDescriptionCard rather than rebuilding it during state-driven updates.
Hoist the detailsRegex and summaryRegex patterns in
parsePrGitHubDescriptionBlocks, along with the code-block, fenced-code,
script/style, tag-normalization, and blank-line-collapse regexes used by
prProtectMarkdownCode and normalization helpers, into reusable static constants
so they are compiled once.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 456e37a6-96e0-4a59-916f-303160a827e6

📥 Commits

Reviewing files that changed from the base of the PR and between 9f9d1ea and 7ebae60.

⛔ Files ignored due to path filters (3)
  • apps/ios/ADE.xcodeproj/project.pbxproj is excluded by !**/*.xcodeproj/project.pbxproj
  • docs/features/pull-requests/README.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/ios-companion.md is excluded by !docs/**
📒 Files selected for processing (14)
  • apps/ios/ADE/Models/RemoteModels.swift
  • apps/ios/ADE/Services/SyncService.swift
  • apps/ios/ADE/Views/PRs/PrAiSummaryCard.swift
  • apps/ios/ADE/Views/PRs/PrDetailHeaderComponents.swift
  • apps/ios/ADE/Views/PRs/PrDetailOverviewPreviews.swift
  • apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift
  • apps/ios/ADE/Views/PRs/PrDetailScreen.swift
  • apps/ios/ADE/Views/PRs/PrGitHubDescriptionParser.swift
  • apps/ios/ADE/Views/PRs/PrModels.swift
  • apps/ios/ADE/Views/PRs/PrRowCard.swift
  • apps/ios/ADE/Views/PRs/PrRowCardPreviews.swift
  • apps/ios/ADE/Views/PRs/PrsRootScreen.swift
  • apps/ios/ADETests/ADETests.swift
  • apps/ios/ADETests/PrGitHubDescriptionParserTests.swift
💤 Files with no reviewable changes (5)
  • apps/ios/ADETests/ADETests.swift
  • apps/ios/ADE/Views/PRs/PrAiSummaryCard.swift
  • apps/ios/ADE/Views/PRs/PrModels.swift
  • apps/ios/ADE/Models/RemoteModels.swift
  • apps/ios/ADE/Services/SyncService.swift

Comment on lines +619 to +622
}
.listStyle(.plain)
.listRowSpacing(12)
.contentMargins(.bottom, 88, for: .scrollContent)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Confirm whether transitionNamespace is consumed anywhere in PrDetailScreen.swift
# or a subview it constructs, and whether the zoom transition was intentionally dropped.
rg -n 'transitionNamespace|adeNavigationZoomTransition|matchedGeometryEffect' apps/ios/ADE/Views/PRs/PrDetailScreen.swift apps/ios/ADE/Views/PRs/PrsRootScreen.swift apps/ios/ADE/Views/PRs/PrRowCard.swift

Repository: arul28/ADE

Length of output: 1363


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant files around the reported identifiers and modifier chains.
for f in apps/ios/ADE/Views/PRs/PrDetailScreen.swift apps/ios/ADE/Views/PRs/PrsRootScreen.swift apps/ios/ADE/Views/PRs/PrRowCard.swift apps/ios/ADE/Views/PRs/PrDetailScreen.swift; do
  echo "===== $f ====="
  wc -l "$f"
done

echo "===== PrDetailScreen init/body outline ====="
ast-grep outline apps/ios/ADE/Views/PRs/PrDetailScreen.swift || true

echo "===== PrDetailScreen relevant sections ====="
sed -n '1,120p' apps/ios/ADE/Views/PRs/PrDetailScreen.swift
echo "--------------------------------------------------"
sed -n '580,665p' apps/ios/ADE/Views/PRs/PrDetailScreen.swift

echo "===== PrsRootScreen relevant section ====="
sed -n '940,970p' apps/ios/ADE/Views/PRs/PrsRootScreen.swift

echo "===== Search all refs ====="
rg -n 'transitionNamespace|adeNavigationZoomTransition|matchedGeometryEffect|isSelectedTransitionSource|adeMatchedGeometry' apps/ios/ADE/Views/PRs/ apps/ios/ADE -g '*.swift' | head -200

Repository: arul28/ADE

Length of output: 28518


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant files around the reported identifiers and modifier chains.
for f in apps/ios/ADE/Views/PRs/PrDetailScreen.swift apps/ios/ADE/Views/PRs/PrsRootScreen.swift apps/ios/ADE/Views/PRs/PrRowCard.swift; do
  echo "===== $f ====="
  wc -l "$f"
done

echo "===== PrDetailScreen init/body outline ====="
ast-grep outline apps/ios/ADE/Views/PRs/PrDetailScreen.swift || true

echo "===== PrDetailScreen relevant sections ====="
sed -n '1,120p' apps/ios/ADE/Views/PRs/PrDetailScreen.swift
echo "--------------------------------------------------"
sed -n '580,665p' apps/ios/ADE/Views/PRs/PrDetailScreen.swift

echo "===== PrsRootScreen relevant section ====="
sed -n '940,970p' apps/ios/ADE/Views/PRs/PrsRootScreen.swift

echo "===== Search all refs ====="
rg -n 'transitionNamespace|adeNavigationZoomTransition|matchedGeometryEffect|isSelectedTransitionSource|adeMatchedGeometry' apps/ios/ADE/Views/PRs/ apps/ios/ADE -g '*.swift' | head -200

Repository: arul28/ADE

Length of output: 28413


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate and inspect the PR detail route/rendering code around PrDetailView construction.
rg -n 'PrDetailView\(|prTransitionNamespace|TransitionType|open.*pr|OpenSheet|Presentation|navigationDestination|PrStackSheet|PrsRootScreen' apps/ios/ADE/Views apps/ios/ADE -g '*.swift' | head -220

echo "\n===== Candidate files likely containing route/rendering ====="
git ls-files apps/ios/ADE/Views | sed -n '1,220p'

echo "===== PrsRootScreen lines 450-920 ====="
sed -n '450,920p' apps/ios/ADE/Views/PRs/PrsRootScreen.swift

echo "===== Search for PR presentation/destination constructs ====="
rg -n 'PrDetailView\(|open.*pr|openPR|navigate.*pr|transitionNamespace|selectedPrTransitionId|Selection' apps/ios/ADE/Views apps/ios/ADE -g '*.swift' | head -260

Repository: arul28/ADE

Length of output: 50366


Restore the PR matched-geometry transition or drop the transition params.

PrDetailView(prId:, transitionNamespace:) is constructed from the PR row navigation destination with the shared prTransitionNamespace, and PrRowCard uses isSelectedTransitionSource / transitionNamespace for .adeMatchedGeometry. Without .adeNavigationZoomTransition(id: ..., in: transitionNamespace) in PrDetailView, the tap→detail zoom completes as a plain navigation push instead of the matched-geometry animation. Clean up transitionNamespace from both the route and the row if this is intentional.

🤖 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 `@apps/ios/ADE/Views/PRs/PrDetailScreen.swift` around lines 619 - 622, Restore
the matched-geometry transition in PrDetailView by applying
adeNavigationZoomTransition with the PR’s transition identifier and
transitionNamespace, matching the PrRowCard source configuration. If the
transition is intentionally removed instead, remove transitionNamespace from
PrDetailView’s initializer and the PR navigation route, and remove the
corresponding PrRowCard transition parameters.

@arul28

arul28 commented Jul 24, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7d2fce344c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

value = prReplacingHtmlTag(value, regex: PrGitHubDescriptionRegex.blockquoteOpen, replacement: "\n> ")
value = prReplacingHtmlTag(value, regex: PrGitHubDescriptionRegex.blockquoteClose, replacement: "\n")
value = prReplacingHtmlTag(value, regex: PrGitHubDescriptionRegex.horizontalRule, replacement: "\n---\n")
value = prReplacingHtmlTag(value, regex: PrGitHubDescriptionRegex.anyTag, replacement: "")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve Markdown autolinks before stripping HTML

When a PR body contains a standard Markdown autolink such as <https://github.com/arul28/ADE> or <dev@example.com>, the broad anyTag replacement treats the entire autolink as an HTML tag and deletes both its address and visible text. Protect Markdown autolinks before this pass, or restrict the residual-tag expression to actual HTML tag names.

Useful? React with 👍 / 👎.

@arul28

arul28 commented Jul 24, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: 98d3a0fbcd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/ADE/Views/PRs/PrDetailScreen.swift Outdated
@arul28

arul28 commented Jul 24, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fe19d25c2d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


private enum PrGitHubDescriptionRegex {
static let details = expression(
#"<details\b[^>]*>(.*?)</details\s*>"#,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Parse nested details without truncating the outer block

When a GitHub description contains valid nested <details> elements, this non-greedy regex ends the outer match at the inner </details>. The parser consequently drops the inner disclosure structure and emits the remainder of the outer body as a separate Markdown block; for example, an outer disclosure containing an inner disclosure renders outer end outside the outer disclosure. Use balanced tag scanning or an HTML parser so each outer block consumes its matching closing tag.

Useful? React with 👍 / 👎.

@arul28

arul28 commented Jul 24, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ad30672fd8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

static let blockquoteOpen = expression(#"<blockquote\b[^>]*>"#, options: [.caseInsensitive])
static let blockquoteClose = expression(#"</blockquote\s*>"#, options: [.caseInsensitive])
static let horizontalRule = expression(#"<hr\s*/?>"#, options: [.caseInsensitive])
static let anyTag = expression(#"<[^>]+>"#, options: [.caseInsensitive])

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve non-HTML angle-bracket text

Restrict this matcher to actual HTML tags. Every PR description now passes through this normalizer, and <[^>]+> deletes ordinary Markdown prose between comparison operators or placeholder brackets; for example, Keep x < y and y > z here renders as Keep x z here, while Use <T> as a placeholder loses T entirely.

Useful? React with 👍 / 👎.

Comment on lines +352 to +355
value = value
.split(separator: "\n", omittingEmptySubsequences: false)
.map { $0.trimmingCharacters(in: .whitespaces) }
.joined(separator: "\n")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve significant Markdown indentation

Avoid trimming leading whitespace from every normalized line. This function also processes descriptions containing no HTML, so a nested list such as - parent\n - child is flattened into two top-level items, and four-space indented code blocks become ordinary prose before reaching PrMarkdownRenderer.

Useful? React with 👍 / 👎.

@arul28

arul28 commented Jul 24, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 801c43eab9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}

let nsSource = source as NSString
let matches = prGitHubDetailsRanges(in: nsSource)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Exclude literal Markdown contexts from disclosure parsing

When a PR body contains <details> inside an HTML comment, four-space-indented code, or an unclosed fenced code block, this global scan still treats it as live HTML because protection only covers inline code and closed fences. GitHub keeps those regions hidden or literal, but the iOS view removes the markup from its original context and renders a visible DisclosureGroup, exposing template instructions or corrupting code examples; skip comments and all Markdown code ranges before scanning for disclosures.

Useful? React with 👍 / 👎.

Comment on lines +338 to +340
let item = prDecodeHtmlEntities(prStripHtmlTags(prHtmlCapture(match, in: original, index: 1)))
.trimmingCharacters(in: .whitespacesAndNewlines)
return item.isEmpty ? "" : "\n- \(item)"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve numbering for ordered HTML lists

When a GitHub description embeds an <ol>, every <li> is unconditionally converted to -, so ordered instructions become bullets and any numbering or start semantics are lost. Track whether each item belongs to an ordered or unordered container and emit numbered Markdown for ordered lists.

Useful? React with 👍 / 👎.

@arul28
arul28 merged commit 6a6a4e4 into main Jul 24, 2026
34 checks passed
@arul28
arul28 deleted the ade/start-skill-lane-going-about-eacc99d2 branch July 24, 2026 19:09
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.

1 participant