Skip to content

staging → main: dashboard cleanup, group type field, inventory doc - #57

Merged
hb-agent merged 16 commits into
mainfrom
staging
May 10, 2026
Merged

staging → main: dashboard cleanup, group type field, inventory doc#57
hb-agent merged 16 commits into
mainfrom
staging

Conversation

@hb-agent

@hb-agent hb-agent commented May 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

Promotes the current staging head to main. Three new commits on top of the design-doc work already on staging (PRODUCT.md, DESIGN.md):

  • chore(dashboard) — remove four unmounted dashboard components (ConnectedAppsList, IdentityOverviewCard, RecentActivityCard, SignInPreviewCard). They had zero source references; surfaced during a current-state audit.
  • feat(groups) — add a "Type" input to the group edit-profile form, writing the organizationType array on app.certified.actor.organization. The profile view already rendered this field but there was no edit affordance.
  • docs — add docs/current-state/feature-inventory.md, a planning-grade snapshot of every shipped feature (status column: Shipped / Beta / Placeholder / Gap) plus a gaps table to seed the next-features work.

Already on staging from prior commits (carried along by this PR):

  • docs(design): add PRODUCT.md and DESIGN.md design context
  • docs(design): adopt semantic token layer and component-library canon

Verification

Local quality gates green:

  • npx tsc --noEmit — no errors
  • npm run lint — 8 errors / 16 warnings, all pre-existing on unrelated files (no regressions from this PR)
  • npm run build — clean

Test plan

  • CI is green on the staging branch.
  • On a preview deploy, open /groups/<your-group-did>/edit-profile. The "Type" input is visible after "Founded date" and pre-populated with the comma-joined existing types.
  • Enter Foundation, Nonprofit , foundation and save — the saved record should have organizationType: ["Foundation", "Nonprofit"] (deduped case-insensitively, trimmed).
  • Clear the Type input entirely and save — the organizationType field should be omitted from the record (rather than an empty array).
  • On /profile/<group-did>, the saved types render as comma-joined under the "Type" label.
  • No visual regression on personal /settings (the four removed cards were not mounted).
  • docs/current-state/feature-inventory.md renders cleanly on GitHub.

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features

    • Groups can now specify and edit their type/classification in profile settings.
  • Documentation

    • Formalized design system ("Certified"), product guidelines, and comprehensive feature inventory documentation added.
  • UI Changes

    • Removed dashboard preview cards (sign-in preview, identity overview, recent activity, and connected apps) for a streamlined dashboard experience.

Review Change Stack

holkexyz and others added 6 commits May 10, 2026 12:36
PRODUCT.md captures the strategic brief: register (product-led mixed),
primary user, brand personality (confident, principled, plain), the
"visibly not-a-wallet" anti-reference set, and design principles.

DESIGN.md captures the visual system in the Stitch six-section format
with YAML frontmatter (13 colors, 7 typography roles, components).
North Star: "The Notary's Ledger". Civic palette names. Flat-by-default
elevation. Nine named rules across colors, typography, and elevation.

.impeccable/design.json sidecar carries tonal ramps, the single overlay
shadow, motion tokens, breakpoints, and 8 ready-to-render component
snippets for the impeccable live panel.

AGENTS.md gets a section 0 Design Context pointer at the top so future
agent sessions surface PRODUCT.md and DESIGN.md without prompting. The
pointer also flags that tailwind.config.ts holds stale tokens from a
prior visual system; canonical source is --color-* in globals.css.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Imports system depth from certs-social/DESIGN.md while keeping
certified-app's two-register reality (brand on /welcome and /about,
product everywhere else). Light-only; semantic layer is structured so
a future [data-theme="dark"] is a value-flip, not a refactor.

DESIGN.md now describes target state:

- Two-layer color system: invariant primitives plus semantic tokens
  (--bg-canvas, --bg-sunken, --bg-raised, --bg-elevated, --fg-primary,
  --fg-secondary, --fg-muted, --btn-primary-bg).
- Two-register layout doctrine: brand register full-bleed and grids on
  /welcome and /about; product register centered narrow column up to
  ~1024px with no desktop sidebars.
- Three-step shadow vocabulary (--shadow-sm/md/lg), confined to
  floating elements.
- Component library is canonical: Button (4 variants, 3 sizes), Badge,
  Avatar, Input, Textarea in src/components/ui/. BEM-style classes in
  globals.css are marked legacy and slated to migrate.
- OpenType features documented: tnum on numeric UI, case on uppercase
  labels, zero on DID and AT URI strings.
- iOS 16px auto-zoom rule on mobile inputs (<=768px).
- Spring easing cubic-bezier(0.16, 1, 0.3, 1) named as the signature
  motion curve.
- Type scale formalized as a per-role table with weight ceiling on
  Inter (max 600; 700 reserved for Noto Serif headlines).
- 12 named rules total (was 9): adds Semantic-Token,
  Weight-Ceiling-on-Inter, Uppercase-Plus-Tracking; renames
  Overlay-Only-Shadow to Floating-Only-Shadow.
- Border-radius scale with documented exceptions (4px hero CTA, 999px
  pills, 50% circles).
- New Don'ts: mix registers, desktop sidebars, Inter 700, raw hex in
  tailwind utilities, fill on Lucide icons, image without onError
  fallback.

The .impeccable/design.json sidecar is regenerated to match (12
components, 20 colors, 12 rules, 3 shadows, 3 motion tokens). AGENTS.md
section 0 pointer is updated to flag both implied migrations: token
refactor (concrete --color-* to semantic two-layer) and component
canonicalization (BEM legacy to ui/* components).

Skipped from certs-social: bottom nav, single-column-everywhere
doctrine, feed cards, dark mode, three-mode navbar, skeleton states,
agent-prompt-guide section. None of those fit this product.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop ConnectedAppsList, IdentityOverviewCard, RecentActivityCard, and
SignInPreviewCard. These components had zero references in the source —
they were not mounted from any route and not imported by any other
component. Surfaced during the current-state audit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a comma-separated text input for app.certified.actor.organization
record's organizationType field. The profile view already rendered this
as "Type" but there was no edit affordance — the value could only be
written by editing the record outside the app.

Save logic trims, drops empties, and dedupes case-insensitively. The
field is omitted from the metadata record when empty so the PDS record
stays minimal (atproto convention).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A planning-grade snapshot of every feature shipped today, grouped by
user-facing surface, with a status column (Shipped/Beta/Placeholder/Gap).
Includes a verification-scope section noting which routes were
browser-checked vs. source-only, and a known-gaps table to seed the
next-features planning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@vercel

vercel Bot commented May 10, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
certified-app Building Building May 10, 2026 5:05pm
certified-app (staging) Ready Ready Preview, Comment May 10, 2026 5:05pm

Request Review

@coderabbitai

coderabbitai Bot commented May 10, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@hb-agent has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 5 minutes and 44 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e4878c2f-5597-482c-ba5f-53311afa2d56

📥 Commits

Reviewing files that changed from the base of the PR and between 58f70e9 and 659d414.

📒 Files selected for processing (7)
  • AGENTS.md
  • DESIGN.md
  • docs/current-state/feature-inventory.md
  • docs/current-state/review-round-1.md
  • docs/current-state/review-round-2.md
  • src/app/groups/[groupDid]/edit-profile/page.tsx
  • src/components/profile/profile-client.tsx
📝 Walkthrough

Walkthrough

The PR introduces a comprehensive design system specification (tokens, components, rules) and product guidance, alongside implementation directives for agents. It adds a feature inventory snapshot documenting shipped/gap features, enhances group metadata editing with a "Type" field, and removes four unused dashboard card components.

Changes

Design System & Implementation Guidance

Layer / File(s) Summary
Design System Specification
.impeccable/design.json, DESIGN.md
Introduces structured design tokens (colors with tonal ramps, typography, shadows, motion, breakpoints) and canonical UI component catalog (buttons, inputs, cards, badges, avatars, modals, nav elements) with example HTML/CSS and narrative doctrines.
Design Rules & Constraints
DESIGN.md
Establishes civic monochrome palette with semantic two-layer tokens, typography hierarchy (Noto Serif/Instrument Serif/Inter with OpenType features), elevation/shadow constraints (flat-by-default with float-only shadows), component interaction patterns, and comprehensive do's/don'ts enforcement.
Product & Brand Guidance
PRODUCT.md
Defines passwordless AT Protocol identity product, brand personality (confident/principled/plain tone), content register separation (gated app vs brand pages), anti-references (crypto-wallet aesthetics), design principles (quiet trust, plain language, wallet differentiation), and accessibility requirements (WCAG 2.2 AA, keyboard navigation, reduced-motion, plain language).
Implementation Migration Directives
AGENTS.md
Instructs agents to use PRODUCT.md and DESIGN.md as authoritative briefs and specifies required migrations: refactoring from concrete color tokens to semantic two-layer system, canonicalizing UI components from src/components/ui/ while treating legacy BEM/Tailwind tokens as deprecated.
Feature Inventory & Current State
docs/current-state/feature-inventory.md
Comprehensive snapshot of shipped/beta/placeholder/gap features across identity/sign-in, profile/account, groups, connected apps, linked wallets, public pages, SEO/PWA, cross-cutting UI, state management, backend/API, security posture, design tokens, browser verification scope, and known limitations.
Group Metadata: Type Field
src/app/groups/[groupDid]/edit-profile/page.tsx
Adds organizationType state for comma-separated input with trimming, case-insensitive deduplication, and conditional metadata storage (omitted when empty). UI includes new "Type" form field with helper text.
Dashboard Component Cleanup
src/components/dashboard/connected-apps-list.tsx, identity-overview-card.tsx, recent-activity-card.tsx, sign-in-preview-card.tsx
Removes four unused dashboard card components (ConnectedAppsList, IdentityOverviewCard, RecentActivityCard, SignInPreviewCard) as part of design system consolidation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

The review spans two independent streams: (1) validation of comprehensive design system specification and product/brand guidance documentation (high volume but largely self-documenting), and (2) evaluation of focused code changes (group metadata field and straightforward component removals). The mixed composition—substantial but homogeneous documentation with small, straightforward code edits—requires moderate review attention.

Possibly related PRs

  • hypercerts-org/certified-app#19: Also removes SignInPreviewCard and other dashboard UI components as part of authenticated dashboard redesign.
  • hypercerts-org/certified-app#41: Updates branding asset paths and removes Sidebar component, overlapping with this PR's dashboard UI cleanup and sign-in preview card removal.

Poem

🐰 A system crystalline, with tokens so true,
Design rules carved in semantic hue,
From colors to cards, each piece has its place,
Brand and product dance with grace,
The dashboard refreshed, the schema complete!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the three main changes in the PR: dashboard cleanup (removed 4 components), group type field addition, and the new inventory documentation file.
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 staging

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.

…nt guide sections

Restructure DESIGN.md to match the awesome-design-md 9-section schema and add
explicit guidance for AI agents working in this repo. The existing strong
content (Notary's Ledger north star, two-register doctrine, Named Rules,
anti-references) is preserved verbatim; this is additive.

- New section 4 Layout Principles: container widths (1536/1024/720/640/480),
  spacing scale, grid behavior, page padding, plus four new Named Rules
  (Centered-Column, No-Nested-Card, Five-Widths, One-Hero-Per-Page).
- New section 7 Responsive Behavior: breakpoint table (single 768px break),
  touch-target floor, collapsing strategy, iOS-specific rules, plus two new
  Named Rules (One-Breakpoint, Hit-Area).
- New section 8 Accessibility: contrast pairings with verdict column, focus
  ring spec per element, keyboard rules, semantic structure, atproto-fluency
  on-ramps, color-plus-icon-or-label rule, plus two new Named Rules
  (Glossed-Concept, Color-Plus-Icon-Or-Label).
- New section 10 Agent Prompt Guide: 12-token quick reference, component
  cheat sheet, legacy-to-target migration hints, five ready-to-use prompts,
  paste-on-rejection lines pointing back to canonical sections.
- Section 6 Components: add explicit state matrices for Button and Input
  (default/hover/focus/active/disabled/loading/error/read-only).
- Section 9 Do's and Don'ts: add four Don'ts (second breakpoint, sixth
  container width, body in --fg-muted on canvas, status without icon/label)
  and two Dos (canonical container widths, color-plus-icon pairing).
- Frontmatter: add cssTokens block mirroring live globals.css custom
  properties, plus containers, breakpoints, shadows, transitions, fonts,
  navbar blocks. Existing colors/typography/rounded/spacing/components
  blocks preserved so the impeccable live-mode design panel keeps rendering.

Schema modeled after the 9-section structure documented at
https://github.com/voltagent/awesome-design-md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@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 `@docs/current-state/feature-inventory.md`:
- Around line 80-83: The table rows for RecentActivityCard, SignInPreviewCard,
IdentityOverviewCard, and ConnectedAppsList are missing the "Where" column so
they only have 3 cells; update each row so it has four pipe-separated cells
matching "Feature | Where | Status | Notes" — put the feature label (e.g.,
"Recent activity card") in the first cell, the component identifier (e.g.,
`RecentActivityCard`, `SignInPreviewCard`, `IdentityOverviewCard`,
`ConnectedAppsList`) in the "Where" column, the word "Unverified" in the
"Status" column, and move the longer description (e.g., "exists but currently
not wired into any rendered page..." or the specific note about standalone
route) into the "Notes" column, ensuring proper backticks around component names
and correct pipe alignment for each row.
🪄 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: cc1396b8-40b9-402d-ac0a-efd0fa2d7437

📥 Commits

Reviewing files that changed from the base of the PR and between 3cef675 and 58f70e9.

📒 Files selected for processing (10)
  • .impeccable/design.json
  • AGENTS.md
  • DESIGN.md
  • PRODUCT.md
  • docs/current-state/feature-inventory.md
  • src/app/groups/[groupDid]/edit-profile/page.tsx
  • src/components/dashboard/connected-apps-list.tsx
  • src/components/dashboard/identity-overview-card.tsx
  • src/components/dashboard/recent-activity-card.tsx
  • src/components/dashboard/sign-in-preview-card.tsx
💤 Files with no reviewable changes (4)
  • src/components/dashboard/identity-overview-card.tsx
  • src/components/dashboard/sign-in-preview-card.tsx
  • src/components/dashboard/recent-activity-card.tsx
  • src/components/dashboard/connected-apps-list.tsx

Comment thread docs/current-state/feature-inventory.md Outdated
holkexyz and others added 2 commits May 10, 2026 16:19
The metadata builder picked named fields (urls, location, foundedDate)
rather than spreading the loaded record. Any forward-compat field added
by another writer (CLI, a future feature) would be silently dropped on
every save through this form.

Switch to spread-then-override: spread the loaded record first, then
overwrite the fields this form actually owns. Setting a field to
`undefined` lets JSON.stringify drop it, so atproto putRecord replaces
the record without the field — same observable behavior as the previous
conditional-spread for emptiness, but unknown fields survive the
round-trip.

Pre-existing risk surfaced by the round-1 reviewers; fix is co-located
with the new organizationType field added in 3235532.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…r ref

Round-1 reviewers flagged that the inventory doc and AGENTS.md still
referenced state that this same PR resolved:

- Four "Unverified — possibly retired" rows for the dashboard components
  this PR deletes.
- "Dashboard cleanup" planning seed and the matching gaps row.
- `organizationType` listed as a "metadata field without UI" gap that
  3235532 closes.
- AGENTS.md file-map entries for the four deleted dashboard files.
- AGENTS.md §21 mentioning the "Heads up: Groups are in beta" banner
  that has since been removed from the UI.

Adds review-round-1.md recording the three reviewer verdicts and the
accept/reject rationale per the project's review-doc convention.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Disambiguates from the primary "Website" field on the same profile card.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The metadata urls field was readable on the group profile but had no
edit affordance. Adds a row-based editor: each row has a URL input + an
optional Label input + a remove button; an "Add link" button appends
blank rows.

Save behavior: fully-empty rows are dropped silently; label-only rows
and invalid URLs surface per-row errors and abort save (same pattern as
the Website field). URLs are normalized via normalizeWebsiteUrl so bare
hostnames like "example.org" become "https://example.org" on save.

Closes the urls half of the "Group metadata fields without UI" gap from
the current-state inventory; location remains a follow-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the comma-separated Type input with a select of fixed options:
Nonprofit, Business, Community Group, Government, Indigenous Group, plus
Other. Picking Other reveals a text input; only the user's text is saved
(not the literal "Other"). Empty Other is a validation error and blocks
save.

Underlying record stays `string[]`. Save preserves the loaded array
verbatim until the user actively changes the selection (`typeDirty`),
so legacy records that contain multiple values from the previous
free-form input aren't silently collapsed to a single value just by
opening the form. Once the user picks something, the saved array is
length-1 (or omitted when nothing is selected).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a one-line description to each Type option (Nonprofit / Business /
Community Group / Government / Indigenous Group / Other) so users can
read what each one means without having to look it up. To make the
descriptions actually visible while choosing, the picker switches from
a native <select> (which hides options until clicked) to a radio-card
list. Each card shows the type name + description; clicking the card
selects the radio. Selected card uses an accent border + tinted
background to mark the choice.

Save behavior is unchanged: picking a preset stores [<presetValue>],
picking "Other" with text stores [<userText>] (never the literal
"Other"), empty Other still blocks save with the same validation
message. The typeDirty guard against collapsing legacy multi-value
records is preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… when blank

Previously the profile details card always rendered every field, with
em-dashes in place of missing values. Now:

- Each field row only renders when it has content. Empty values (no
  description, no website, no founded date, no type, no urls) are
  hidden rather than showing "—".
- Display Name is removed from the personal-profile details list
  entirely — it's already shown in the profile header above, so
  duplicating it added no information.
- When the section ends up empty:
  - If the viewer can edit (own profile, or owner/admin of the group),
    the heading is replaced by a single "Add account details" or
    "Add group details" button that links to the edit form.
  - If the viewer can't edit, the whole card is suppressed (no point
    showing an empty card to a non-owner).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
holkexyz and others added 2 commits May 10, 2026 17:04
Round-2 reviewer C flagged the link-level analogue of round-1's
top-level forward-compat issue: the additional-links save loop
reconstructed each {url, label} from scratch, dropping any per-item
extras a future writer (CLI or feature) might add (e.g. verified,
addedAt). Each row now carries a `loadedRef` to the original record
item; the save spreads loadedRef under the new url/label, mirroring
the same pattern used for the top-level metadata builder. Cleared
labels still come off the wire because `label: undefined` is dropped
by JSON.stringify.

Same change adds a stable per-row id (round-2 reviewer A nit #4 / C
suggestion #2): inputs are now React-keyed by `row.id` instead of array
index, so removing a middle row no longer reuses DOM nodes / focus /
selection from a different row.

Smaller round-2 nits in the same diff:
- Trash button gains `disabled={isSaving}` for parity with Add link
  (B nit #4); adds disabled-style classes for visual feedback.
- Inline comment on the Type radio onChange documents that
  typeOtherText is intentionally preserved when toggling Other → preset
  (A nit #2). Save logic is unaffected.
- profile-client.tsx: the empty-state branch's redundant
  `editHref &&` guard was removed (B nit #6); converted the wrapping
  `(hasDetails || editHref) && <div>...` block to a clean ternary that
  TypeScript narrows correctly. Also reflowed indentation inside the
  Details `<dl>` after the ternary collapse.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Round-2 reviewer B flagged feature-inventory.md as stale: the urls
editor that 72e8b94 shipped means urls is no longer a "field without UI"
gap. Updated:

- Planning seed §4: urls now lists alongside foundedDate and
  organizationType as "has edit affordance"; only location remains
  read-only.
- Gaps table §15: split the old "fields without UI (urls, location)"
  row — location keeps its row, and a new row is added for the "no way
  to clear organizationType from the UI" UX gap that round 2 surfaced.

Adds review-round-2.md recording the three reviewer verdicts and the
accept/reject rationale, including the outstanding Display Name report
(awaiting user clarification on the URL where it appears) and the
deferred BEM-extraction items (trash button + radio-card → globals.css)
that fold naturally into the round-1 orphan-CSS sweep.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hb-agent
hb-agent merged commit d05029b into main May 10, 2026
3 checks passed
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.

2 participants