Skip to content

feat(tinyplace): resolve identity marketplace seller-side as web-only (#4920) - #5193

Merged
M3gA-Mind merged 8 commits into
tinyhumansai:mainfrom
CodeGhost21:fix/4920-identity-marketplace-seller-web-only
Jul 27, 2026
Merged

M3gA-Mind merged 8 commits into
tinyhumansai:mainfrom
CodeGhost21:fix/4920-identity-marketplace-seller-web-only

Conversation

@CodeGhost21

@CodeGhost21 CodeGhost21 commented Jul 24, 2026 •

Copy link
Copy Markdown
Member

Summary

  • The desktop Identities → Trading tab was buyer-only: no path to sell a handle or accept/reject an offer/bid, leaving a would-be seller at a dead end.
  • Resolves this as web-only by design: the tiny.place backend exposes no seller routes and the vendored Rust SDK is a buyer-side compatibility wrapper — listing a handle and responding to offers happens on the tiny.place web app.
  • Adds a Trading-tab pointer note → opens https://tiny.place/identities via the existing openUrl helper (mirrors the X402ConfirmDialog /fund precedent).
  • Records the scoping decision in the IdentitiesSection.tsx header docstring and in the src/openhuman/tinyplace/mod.rs module doc.

Problem

Issue #4920 audited the identity marketplace and found the gap exists at every layer (frontend client, core handler, vendored SDK) — it is not merely an unwired UI. Confirmed with the maintainer that seller-side is intentionally web-only, so the fix is to remove the in-app dead-end and document the boundary, not to build a full seller stack against non-existent backend routes.

Solution

  • UI (app/src/agentworld/pages/IdentitiesSection.tsx): a persistent info note at the bottom of TradingTab — "Selling a handle or responding to offers happens on tiny.place." — with an Open tiny.place → button that calls openUrl('https://tiny.place/identities'). Hardcoded prod URL constant, matching the FUND_PAGE_URL precedent (the tiny.place web frontend has no per-env base in config.ts).
  • Strings are hardcoded English, matching this file's existing convention (its buy/commit banners are all literal strings; the file has no useT()). A single i18n'd string here would be inconsistent, and a full-file conversion is out of scope — so no locale-file changes.
  • Docs: header docstring + tinyplace/mod.rs module doc both record that seller-side is web-only and why.
  • Design/plan committed under docs/superpowers/.

Submission Checklist

  • Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy — two new Vitest cases in IdentitiesSection.test.tsx: the note renders on the Trading tab, and the CTA calls openUrl with the tiny.place URL (mocked). All 72 tests in the file pass.
  • Diff coverage ≥ 80% — the new UI lines (the note + CTA onClick) are exercised by the two new tests. Rust change is a doc comment only (no executable lines).
  • Coverage matrix updated — N/A: behaviour-only change (a link-out affordance; no new/renamed feature ID in docs/TEST-COVERAGE-MATRIX.md).
  • All affected feature IDs from the matrix are listed under ## Related — N/A (no matrix row touched).
  • No new external network dependencies introduced — the CTA hands off to the OS browser via the existing openUrl helper; no new network calls from the app.
  • Manual smoke checklist updated if this touches release-cut surfaces — N/A (additive info note, no release-cut surface changed).
  • Linked issue closed via Closes #NNN — see ## Related.

Impact

  • Desktop only (Agent World is a desktop surface). Additive info note in the Trading tab; no change to existing buy/bid/offer flows.
  • No performance, security, or migration impact. Revert is a clean removal of the note block.

Related


AI Authored PR Metadata (required for Codex/Linear PRs)

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: fix/4920-identity-marketplace-seller-web-only
  • Commit SHA: 9d0faa9

Validation Run

  • pnpm --filter openhuman-app format:check — prettier clean on changed files
  • pnpm typecheck — passes
  • Focused tests: pnpm --filter openhuman-app test -- IdentitiesSection --run — 72 passed
  • Rust fmt/check (if changed): GGML_NATIVE=OFF cargo check --manifest-path Cargo.toml exit 0; cargo fmt --check clean
  • Tauri fmt/check (if changed): N/A — no app/src-tauri changes (pre-push pnpm rust:check still passed)

Validation Blocked

  • command: N/A
  • error: N/A
  • impact: N/A

Behavior Changes

  • Intended behavior change: Trading tab now shows a note linking sellers to the tiny.place web app instead of offering no seller action.
  • User-visible effect: a "Selling a handle or responding to offers happens on tiny.place" note + Open tiny.place → button at the bottom of the Trading tab.

Parity Contract

  • Legacy behavior preserved: all existing buy/bid/offer flows unchanged; note is purely additive.
  • Guard/fallback/dispatch parity checks: N/A (no dispatch/handler changes).

Duplicate / Superseded PR Handling

  • Duplicate PR(s): N/A
  • Canonical PR: this PR
  • Resolution: N/A

Summary by CodeRabbit

  • New Features
    • Added a Trading-tab “Sell on web” info notice for identity marketplace seller actions, including an info CTA that opens the identities web page.
  • Documentation
    • Clarified marketplace scope: buyer-side actions are supported in-app, while seller-side write actions are web-only.
  • Tests
    • Added unit tests to confirm the notice appears and that the CTA triggers the expected navigation behavior (including the correct analytics identifier).

@CodeGhost21
CodeGhost21 requested a review from a team July 24, 2026 14:51
@coderabbitai

coderabbitai Bot commented Jul 24, 2026 •

Copy link
Copy Markdown
Contributor

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4771d5ff-3404-4b28-ab34-446452bc09f6

📥 Commits

Reviewing files that changed from the base of the PR and between 8d54e35 and b27398c.

📒 Files selected for processing (1)
  • app/src/agentworld/pages/IdentitiesSection.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/src/agentworld/pages/IdentitiesSection.tsx

📝 Walkthrough

Walkthrough

The PR documents that identity marketplace seller actions are web-only, adds a Trading-tab note and CTA linking to https://tiny.place/identities, mocks openUrl in tests, and records buyer-only backend scope.

Changes

Seller Web-Only Marketplace

Layer / File(s) Summary
Marketplace scope specification and plan
docs/superpowers/plans/..., docs/superpowers/specs/...
Documents the web-only seller scope, UI behavior, test strategy, backend documentation, and implementation checklist.
Trading-tab seller CTA and coverage
app/src/agentworld/pages/IdentitiesSection.tsx, app/src/agentworld/pages/IdentitiesSection.test.tsx
Adds the seller informational note and CTA, opens the tiny.place identities page through openUrl, and tests rendering, analytics, and URL invocation.
Rust marketplace scope documentation
src/openhuman/tinyplace/mod.rs
Documents buyer-side marketplace handlers and web-only seller actions.

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

Suggested labels: feature

Poem

I’m a rabbit with a link in my paw,
To tiny.place where sellers draw.
The Trading tab now points the way,
While tests keep browsers far at bay.
Buyer paths remain inside—
Hop, hop, web-side seller guide!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: making identity marketplace seller-side actions web-only.
Linked Issues check ✅ Passed The PR matches #4920 by documenting the web-only seller-side boundary, adding the Trading-tab CTA, and covering the behavior in tests.
Out of Scope Changes check ✅ Passed All added files support the same web-only seller-side scope, with no unrelated feature work apparent.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

@coderabbitai coderabbitai Bot added the feature Net-new user-facing capability or product behavior. label Jul 24, 2026

@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: 9d0faa969b

ℹ️ 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 on lines +1015 to +1016
<p className="text-xs text-content-muted">
Selling a handle or responding to offers happens on tiny.place.

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 Route new seller copy through i18n

This new user-visible note is hardcoded in a production app/src surface, and the CTA added just below is hardcoded too. In non-English locales the Trading tab will show English text despite the app contract requiring UI copy to go through useT() with locale entries, so please move the new strings into the i18n catalog before shipping.

AGENTS.md reference: AGENTS.md:L356-L360

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Intentional, and confirmed with the maintainer during design. IdentitiesSection.tsx is entirely un-i18n'd today — every user-visible string in this file is hardcoded English (e.g. the buy/commit banners "Commitment submitted.", "Purchased {name}", "Purchase failed."). Routing only the new note through useT() would make it the sole i18n'd string in an otherwise hardcoded file, and a full-file i18n conversion is out of scope for this change. The Frontend Checks (i18n) gate passes because it validates locale-file key parity, not hardcoded JSX. Leaving this thread open for a maintainer to decide whether to dismiss or track a separate full-file i18n conversion of this surface.

@greptile-apps

greptile-apps Bot commented Jul 24, 2026 •

Copy link
Copy Markdown

Greptile Summary

This PR resolves the seller-side dead-end in the desktop Identities → Trading tab by adding a persistent informational note that redirects sellers to the tiny.place web app, where the backend actually exposes sell/accept/reject routes. No new backend integration is needed or added.

  • UI (IdentitiesSection.tsx): a sell-on-web note div with a CTA that calls openUrl('https://tiny.place/identities') via the existing Tauri-opener helper, placed between the listings and Recent Sales sections; SELL_ON_WEB_URL constant and debug logging follow established repo patterns.
  • Tests (IdentitiesSection.test.tsx): two new Vitest cases verify note rendering (text content + analytics ID attribute) and that the CTA dispatches openUrl with the correct URL via a vi.fn() mock.
  • Docs / Rust: header docstring and tinyplace/mod.rs module doc both record the buyer-side-only boundary for future contributors.

Confidence Score: 5/5

Safe to merge — purely additive info note with no changes to existing buy/bid/offer flows or any backend integration.

The change is a static UI note plus a CTA that delegates to the OS browser via an already-tested helper. No existing logic paths are modified, the two new tests cover both the rendering and the CTA dispatch, and the Rust change is documentation only. Nothing in the diff can regress current functionality.

Files Needing Attention: No files require special attention.

Important Files Changed

Filename Overview
app/src/agentworld/pages/IdentitiesSection.tsx Adds a persistent sell-on-web info note and CTA to TradingTab; imports openUrl and debugFactory; adds SELL_ON_WEB_URL constant and header docstring update — all purely additive, existing flows untouched.
app/src/agentworld/pages/IdentitiesSection.test.tsx Adds openUrl mock and two new tests covering note rendering (text content + analytics ID) and CTA click → openUrl call; test assertions match the implementation exactly.
src/openhuman/tinyplace/mod.rs Doc-comment-only change: adds a Marketplace scope section clarifying buyer-side vs seller-side (web-only) boundaries; no executable code changed.
docs/superpowers/plans/2026-07-24-identity-marketplace-seller-web-only.md New implementation plan doc; minor note: the test-snippet in Task 1 Step 2 uses stale text 'selling a handle or responding to offers' while the shipped component and tests use 'listing a handle for sale and accepting offers' — no runtime impact.
docs/superpowers/specs/2026-07-24-identity-marketplace-seller-web-only-design.md New design spec doc recording the web-only scoping decision, component data flow, testing rationale, and rollback notes; documentation only.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[User opens Trading tab] --> B{Action}
    B -->|Buy / Bid / Offer| C[In-app flow\nbuyIdentity / bid / offer]
    B -->|Sell / Accept offer| D[sell-on-web note\ndata-testid=sell-on-web]
    D --> E[Click 'Open tiny.place →'\ndata-testid=sell-on-web-cta]
    E --> F[openUrl SELL_ON_WEB_URL\nhttps://tiny.place/identities]
    F --> G[OS default browser\ntauri-plugin-opener]
    C --> H[X402ConfirmDialog\npay on-chain]
Loading

Reviews (5): Last reviewed commit: "fix(tinyplace): entry-only CTA diagnosti..." | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🤖 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 `@app/src/agentworld/pages/IdentitiesSection.tsx`:
- Around line 1018-1024: Add the stable analytics identifier
identities.sellOnWeb to the Button CTA in the IdentitesSection JSX, while
preserving its existing variant, click handler, test ID, and user-facing label.

In `@docs/superpowers/plans/2026-07-24-identity-marketplace-seller-web-only.md`:
- Around line 129-132: Consolidate validation at the required unit-and-E2E
level: in
docs/superpowers/plans/2026-07-24-identity-marketplace-seller-web-only.md lines
129-132, add a command and expected result for the seller web-only E2E scenario;
in
docs/superpowers/specs/2026-07-24-identity-marketplace-seller-web-only-design.md
lines 57-59, include E2E coverage in the test scope; in lines 89-93, remove the
unit-only testing statement; and in
app/src/agentworld/pages/IdentitiesSection.test.tsx lines 1289-1303, add the
corresponding E2E scenario or document an approved exception while preserving
the existing unit tests.
- Line 95: Resolve the Markdown lint warnings by removing the extra spaces
inside the inline code span near the start of the document and adding an
appropriate language tag, such as ts or text, to the fenced
documentation-comment block beginning with the doc comment.
- Line 9: Update the Tech Stack line in the identity marketplace seller plan to
specify React 19, matching the app package’s react and react-dom dependencies;
leave the other listed technologies unchanged.

In
`@docs/superpowers/specs/2026-07-24-identity-marketplace-seller-web-only-design.md`:
- Around line 95-98: Update the “Rollback / risk” section to remove the
inaccurate “one i18n key set” claim and state that rollback only removes the
additive UI note plus its related documentation and tests. Keep the existing
no-behavior-change description intact.
- Around line 76-80: Add the `text` language tag to the fenced code block
containing the Trading tab flow diagram, without changing the diagram content.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 10318480-b6ab-4f4e-a03a-ce74b78c3713

📥 Commits

Reviewing files that changed from the base of the PR and between 55d3ab5 and 9d0faa9.

📒 Files selected for processing (5)
  • app/src/agentworld/pages/IdentitiesSection.test.tsx
  • app/src/agentworld/pages/IdentitiesSection.tsx
  • docs/superpowers/plans/2026-07-24-identity-marketplace-seller-web-only.md
  • docs/superpowers/specs/2026-07-24-identity-marketplace-seller-web-only-design.md
  • src/openhuman/tinyplace/mod.rs

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 24, 2026
@M3gA-Mind

Copy link
Copy Markdown
Collaborator

Review — PR #5193 (comment only)

Not approving — comment only, per maintainer instruction. This is feedback, not a merge gate.

Walkthrough

Resolves #4920 by declaring seller-side identity trading web-only rather than building a seller stack against routes that do not exist, and replaces the in-app dead end with a pointer note + CTA to tiny.place/identities. The scoping call is sound and I independently confirmed the premise (below). One finding is worth acting on before merge; the rest are polish.

Verified the premise

I checked the claim rather than taking it on trust. The write-side marketplace surface in src/openhuman/tinyplace/schemas.rs is marketplace_buy_product, marketplace_buy_identity, marketplace_bid, marketplace_offer — no create_listing / accept_offer / reject_offer. So "the backend exposes no seller routes" is accurate for writes, and building the flow in-app really would mean inventing a backend. Good call.

Also verified:

  • docs/superpowers/{plans,specs}/ already exist on main — committing the design docs there is established convention, not scope creep.
  • The FUND_PAGE_URL precedent is real (X402ConfirmDialog.tsx:37), so the hardcoded prod URL constant is consistent.
  • openUrl cannot reject for an https:// URL — the Tauri path falls back to window.open on IPC failure and resolves — so onClick={() => void openUrl(...)} is genuinely safe here, not a swallowed rejection. No failure-path test is needed for it.
  • analyticsId="identities.sellOnWeb" is content-free and stable, per the analytics rule in CLAUDE.md.

Actionable comments (3)

1. src/openhuman/tinyplace/mod.rs:27-34 + IdentitiesSection.tsx:1013 — "buyer-side only" overstates the gap; a seller-side read already ships (major, high confidence)

marketplace_list_offers is documented in schemas.rs:562-577 as "List pending identity offers, optionally filtered by target handle or buyer", with the name param described verbatim as "Filter by the @handle the offer targets (for sellers)." And the frontend client is already wired and tested for it — invokeApiClient.ts:1788 (marketplace.listOffers({ name })), covered at invokeApiClient.test.ts:708-737.

So seller-side is not absent end-to-end; seller-side writes are. A seller can already be shown the offers on their handle — they just cannot accept or reject them. Two spots inherit the overstatement:

-//! The identity marketplace handlers here are **buyer-side only**: buy a
-//! listing, bid, and make an offer. Seller-side actions — listing a handle for
-//! sale and accepting / rejecting offers — are **web-only on tiny.place** (the
-//! backend exposes no seller routes). The desktop Trading tab links sellers to
-//! the web app instead. See #4920.
+//! The identity marketplace **write** handlers here are buyer-side only: buy a
+//! listing, bid, and make an offer. Seller-side *writes* — listing a handle for
+//! sale and accepting / rejecting offers — are **web-only on tiny.place** (the
+//! backend exposes no seller write routes). Seller-side *reads* do exist:
+//! `marketplace_list_offers` takes a `name` filter for offers targeting a
+//! handle you own. The desktop Trading tab links sellers to the web app for
+//! the actions it cannot perform. See #4920.

And the UI copy, since "responding to offers" reads as covering seeing them too:

-          Selling a handle or responding to offers happens on tiny.place.
+          Listing a handle for sale and accepting offers happens on tiny.place.

Worth recording accurately because this doc comment is exactly what the next person will read before deciding whether to build the seller view — and the plumbing for a read-only "offers on your handles" list is already there, which makes it a much cheaper follow-up than the doc currently implies.

2. app/src/agentworld/pages/IdentitiesSection.tsx:1010-1027 — hardcoded English (major, high confidence — @chatgpt-codex-connector raised this too)

Endorsing the Codex P2, with one thing to add. CLAUDE.md is unconditional: "all UI text through useT()". The PR rationale is that IdentitiesSection.tsx has no useT() and a full-file conversion is out of scope — the first half is true (I confirmed zero useT in the file, and the buy/commit banners are all literals), but the conclusion does not follow, for two reasons:

  1. TradingTab is its own function component. You can call useT() inside TradingTab alone; nothing else in the file has to change.
  2. The t(key, fallback) signature means the English literal survives as the fallback, so the rendered output is identical even before the locale files land.

The file being the outlier is also worth weighing: essentially every sibling in app/src/agentworld/ uses useT() — including CommitFlow and X402ConfirmDialog, which this very file imports. So this is not "the file's convention" so much as "the one file that has not been converted yet", and each new literal makes that conversion larger.

 function TradingTab() {
+  const { t } = useT();
-          Selling a handle or responding to offers happens on tiny.place.
+          {t('agentWorld.identities.sellOnWeb', 'Listing a handle for sale and accepting offers happens on tiny.place.')}
-          Open tiny.place →
+          {t('agentWorld.identities.sellOnWebCta', 'Open tiny.place →')}

Note CI does not catch this either way: only pnpm i18n:check (key coverage) runs in ci-lite.yml:281; pnpm i18n:react:check — the audit in scripts/i18n-react-audit.ts that flags exactly this shape of hardcoded JSX text — is not wired into any workflow. So the green checkmark on this PR is not evidence the rule was satisfied.

Ultimately a maintainer call, since the deviation is deliberate and documented in the PR body. Flagging it because the cost of doing it right here is three lines, not a file conversion.

3. app/src/agentworld/pages/IdentitiesSection.tsx:1010 — the note sits below "Recent Sales", where a seller will not look (minor, medium confidence)

The affordance is the last block in TradingTab, under the sales table. A user who came to sell scans for a sell action near the listings/actions at the top, does not find one, and leaves — which is the exact dead-end #4920 is closing. Moving the block above the "Recent Sales" section (or directly under the listings header) costs nothing and puts it where the failed search actually happens. No code change beyond relocating the JSX block.

Nitpicks (1)

  • IdentitiesSection.test.tsx:1289-1292 — the comment justifying "unit coverage only, by design" is good practice and I agree with the reasoning. Minor: it says there is "no cross-process behavior a desktop WDIO E2E could assert" — strictly there is one (that the OS browser actually opens), it is just not worth an E2E. Might phrase it as "not worth an E2E" rather than "nothing to assert", so a future reader does not re-derive it.

Summary

Premise verified against the actual RPC surface and it holds — this is the right resolution for #4920, and the docs-first approach is the correct instinct. #1 is the one I would fix before merge (it will mislead the next person, and it is docs-only). #2 is a three-line change that upholds a stated project rule. #3 is free UX. Nothing here is a blocker.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

…accurate copy (tinyhumansai#4920)

Per M3gA-Mind review on tinyhumansai#5193:
- tinyhumansai#1: 'buyer-side only' overstated the gap. Seller-side READS ship
  (marketplace_list_offers filters offers by the @handle you own); only
  seller WRITES are web-only. Corrected the mod.rs doc, the IdentitiesSection
  header docstring/comment, and the note copy ('Listing a handle for sale and
  accepting offers happens on tiny.place').
- tinyhumansai#3: moved the note above Recent Sales, directly under the listings, where a
  would-be seller looks.
- nit: reworded the test's E2E-skip rationale.
Hardcoded strings retained (maintainer decision, documented in PR body).
@CodeGhost21

Copy link
Copy Markdown
Member Author

Addressed in 25e032e.

#1 (seller reads exist) — verified and fixed. marketplace_list_offers (schemas.rs:567) does filter offers by the @handle you own, and marketplace.listOffers({ name }) is wired + tested frontend-side, so seller-side reads ship — only writes are absent. Corrected the three spots that overstated it: the tinyplace/mod.rs doc, the IdentitiesSection.tsx header docstring/constant comment, and the note copy → "Listing a handle for sale and accepting offers happens on tiny.place."

#3 (placement) — moved the note above Recent Sales, directly under the listings, where a would-be seller actually looks.

nit — reworded the test comment to "one real cross-process effect (the OS browser opening) … just not worth an E2E" rather than "nothing to assert."

#2 (route strings through useT()) — your premise checks out: useT() here does expose t(key, fallback?) (I18nContext.tsx:25,89), and i18n:check (i18n-coverage.ts) keys off en.ts, so a fallback-only t('…','English') wouldn't trip it. Left hardcoded per an explicit maintainer decision (documented in the PR body); can flip to t(key, fallback) if you'd rather have that on the record as the standard.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 `@app/src/agentworld/pages/IdentitiesSection.tsx`:
- Around line 960-981: Add verbose, privacy-safe diagnostics to the seller CTA’s
onClick flow in the sell-on-web block, logging entry before invoking openUrl,
successful completion afterward, and caught errors with context. Preserve the
existing shared openUrl fallback behavior and avoid logging handle or other
sensitive user data; use stable, grep-friendly event messages.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8f5693f8-35d1-4861-adac-febc0e080e5c

📥 Commits

Reviewing files that changed from the base of the PR and between 1adceea and 25e032e.

📒 Files selected for processing (3)
  • app/src/agentworld/pages/IdentitiesSection.test.tsx
  • app/src/agentworld/pages/IdentitiesSection.tsx
  • src/openhuman/tinyplace/mod.rs
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/openhuman/tinyplace/mod.rs
  • app/src/agentworld/pages/IdentitiesSection.test.tsx

@M3gA-Mind

Copy link
Copy Markdown
Collaborator

Re-review of the fixup commit — PR #5193 @ 25e032e

Three of four items addressed. One still open.

1. Seller-side reads vs writes — fixed correctly in both places. tinyplace/mod.rs:28-36 now scopes the claim to writes and names marketplace_list_offers with its name filter as the read that does exist; the section heading changed from "buyer-side only" to "seller-side writes are web-only", which is the accurate framing. The IdentitiesSection.tsx header docstring and the SELL_ON_WEB_URL comment carry the same correction. This was the one I most wanted fixed — it's what the next person will read before deciding whether to build the seller view, and the read plumbing already existing makes that a much cheaper follow-up than the old wording implied.

2. UI copy — fixed. "Selling a handle or responding to offers" → "Listing a handle for sale and accepting offers", so it no longer implies you can't see offers in-app. Test regex updated in lockstep (IdentitiesSection.test.tsx:1299), so the assertion still binds to the rendered copy rather than passing vacuously.

3. Placement — fixed. The note moved from below "Recent Sales" to directly under the listings block (IdentitiesSection.tsx:960-980), which is where someone who came to sell actually looks. The inline comment explaining why it sits there will save the next person from "tidying" it back to the bottom.

4. i18n — still open. IdentitiesSection.tsx still has zero useT at this head, so both new strings ship as hardcoded English against the unconditional CLAUDE.md rule ("all UI text through useT()"). Restating the part I think matters most: this does not require converting the file. TradingTab is its own function component, so const { t } = useT(); inside it touches nothing else, and t(key, fallback) keeps the English literal as the fallback so rendered output is byte-identical before any locale file lands. Three lines:

 function TradingTab() {
+  const { t } = useT();
-          Listing a handle for sale and accepting offers happens on tiny.place.
+          {t('agentWorld.identities.sellOnWeb', 'Listing a handle for sale and accepting offers happens on tiny.place.')}
-          Open tiny.place →
+          {t('agentWorld.identities.sellOnWebCta', 'Open tiny.place →')}

Worth re-flagging that CI cannot adjudicate this: only pnpm i18n:check (key coverage) runs in ci-lite.yml:281, while scripts/i18n-react-audit.ts — the audit that flags exactly this shape of hardcoded JSX text — isn't wired into any workflow. So the green run is silent on the rule, not confirming it. @chatgpt-codex-connector raised the same point as a P2. Still a maintainer call, since the deviation is deliberate and documented in the PR body.

Nitpick — closed. The test-comment rewording (:1289-1293) now says the cross-process effect exists but isn't worth a WDIO E2E, rather than that there's nothing to assert. That's the honest version.

CI: green across the board on 25e032e, including Rust Quality and the feature-gate smoke lane for the mod.rs doc change.

Item 4 is the only one outstanding, and it's three lines. Not approving - comment only per manager.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

…sai#4920)

Per CodeRabbit + the AGENTS.md debug-logging rule: the new external CTA had no
entry/success/error diagnostics. Add namespaced 'agentworld:identities' debug
logs around the openUrl call (privacy-safe — static URL only, no handle/PII),
preserving openUrl's own https fallback.
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 27, 2026
…inyhumansai#4920)

The .then/.catch outcome logs (lines 986-987) were uncovered → diff coverage
75% < 80%. openUrl already logs its own completion/error (low-PII telemetry
breadcrumb) and https can't reject, so those duplicated it. Keep the entry log
only — fully covered by the CTA click test.
@greptile-apps

greptile-apps Bot commented Jul 27, 2026

Copy link
Copy Markdown

Want your agent to iterate on Greptile's feedback? Try greploops.

@M3gA-Mind
M3gA-Mind merged commit 35f3b1c into tinyhumansai:main Jul 27, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Net-new user-facing capability or product behavior.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Tiny Place] Identity marketplace is buyer-only: no list-for-sale or accept/reject-offer path

2 participants