René's URL Explorer Experiment


Title: feat(cli): render generated commands as human tables, not raw JSON by ysyneu · Pull Request #46 · flashcatcloud/flashduty-cli · GitHub

Open Graph Title: feat(cli): render generated commands as human tables, not raw JSON by ysyneu · Pull Request #46 · flashcatcloud/flashduty-cli

X Title: feat(cli): render generated commands as human tables, not raw JSON by ysyneu · Pull Request #46 · flashcatcloud/flashduty-cli

Description: What Generated commands carried no hand-written column set, so in human (table) mode they fell back to indented JSON. This adds a generic, reflection-based table renderer so every generated command renders an aligned table: a paginated list envelope ({Items:[...], Total, ...}) or a top-level row array → aligned table a single object → vertical FIELD/VALUE table anything else → indented JSON (never empty) Columns come from a display-only seed (display_columns.go), lifted from the curated commands' hand-written column sets, with a reflective heuristic (first N scalar/timestamp fields) for unmapped row types. The seed is display-only: it never touches flags or machine output, so a wrong entry degrades one column at worst — it can't cause a functional error. A reflection test (TestDisplayColumns_FieldsResolve) fails the build if any seeded field name doesn't resolve on its SDK type. Machine modes (--output-format json/toon) are untouched — the renderer is reached only in table mode; structured output still marshals the full typed response (test asserts byte-identical to the direct printer). Why Keystone for converging the CLI on generated commands as the single source of truth: human tables no longer require hand-written commands, so curated "shadow" commands (which freeze a flag subset and hide server-side filters — root cause of the channel list --team-ids gap) can be removed later without losing readable output. Test plan go build/vet ./..., go test ./internal/... — green; gofumpt clean. Unit: list-envelope / top-level-array / detail-vertical / empty / heuristic / structured-unchanged (json+toon) / display-columns field-resolution. Live E2E against a real backend (fduty built from this branch): role list (table) → aligned table from real rows (was raw JSON); --output-format json/toon → unchanged structured. role info (table) → vertical FIELD/VALUE table. Full e2e/ suite (-tags=e2e) → all pass except 4 pre-existing TestStatusPage* failures (unknown command "statuspage" — naming drift on the base branch, unrelated to rendering; confirmed identical on origin/feat/ai-sre). Follow-ups (separate PRs) Drop curated shadows group-by-group, migrating the agent skill-doc corpus + scan.sh in lockstep. Unshadow insight team/channel/responder to expose their server-side filters (severities/*_ids/fields/labels). Push value into the API so generated commands inherit it: team_name/creator_name on channel list; a short-id (num) param on incident info.

Open Graph Description: What Generated commands carried no hand-written column set, so in human (table) mode they fell back to indented JSON. This adds a generic, reflection-based table renderer so every generated command...

X Description: What Generated commands carried no hand-written column set, so in human (table) mode they fell back to indented JSON. This adds a generic, reflection-based table renderer so every generated command...

Opengraph URL: https://github.com/flashcatcloud/flashduty-cli/pull/46

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:321fc8b8-8869-f440-9768-3b7924c48088
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id9DA0:5105D:290C0F4:3878330:6A4EF92E
html-safe-noncef13e0590e2c1731cbdabfde736082ae77d52c8e9d2dff370f6ea068429514674
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5REEwOjUxMDVEOjI5MEMwRjQ6Mzg3ODMzMDo2QTRFRjkyRSIsInZpc2l0b3JfaWQiOiI5MDM2NDE4ODQ2NzUyMTc2NDMwIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmace0eb921b3aa176c7f6d1443efba57e05fb00dff25c802af1a1e7681d9d7f80ea
hovercard-subject-tagpull_request:3866028622
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/flashcatcloud/flashduty-cli/pull/46/files
twitter:imagehttps://avatars.githubusercontent.com/u/9045284?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/9045284?s=400&v=4
og:image:altWhat Generated commands carried no hand-written column set, so in human (table) mode they fell back to indented JSON. This adds a generic, reflection-based table renderer so every generated command...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneb92d11c0aa4a77d54ef4af1078b6a15fb5a70a215b30c4ecf28889d5a8e656d9
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/flashcatcloud/flashduty-cli git https://github.com/flashcatcloud/flashduty-cli.git
octolytics-dimension-user_id90465697
octolytics-dimension-user_loginflashcatcloud
octolytics-dimension-repository_id1209147161
octolytics-dimension-repository_nwoflashcatcloud/flashduty-cli
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1209147161
octolytics-dimension-repository_network_root_nwoflashcatcloud/flashduty-cli
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release2b8f23afb982271f1b22258a94aede67a6b77760
ui-targetcanary-1
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/flashcatcloud/flashduty-cli/pull/46/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fflashcatcloud%2Fflashduty-cli%2Fpull%2F46%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fflashcatcloud%2Fflashduty-cli%2Fpull%2F46%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=flashcatcloud%2Fflashduty-cli
Reloadhttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
Reloadhttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
Reloadhttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
Please reload this pagehttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
flashcatcloud https://github.com/flashcatcloud
flashduty-clihttps://github.com/flashcatcloud/flashduty-cli
Notifications https://github.com/login?return_to=%2Fflashcatcloud%2Fflashduty-cli
Fork 2 https://github.com/login?return_to=%2Fflashcatcloud%2Fflashduty-cli
Star 4 https://github.com/login?return_to=%2Fflashcatcloud%2Fflashduty-cli
Code https://github.com/flashcatcloud/flashduty-cli
Issues 0 https://github.com/flashcatcloud/flashduty-cli/issues
Pull requests 0 https://github.com/flashcatcloud/flashduty-cli/pulls
Actions https://github.com/flashcatcloud/flashduty-cli/actions
Projects https://github.com/flashcatcloud/flashduty-cli/projects
Security and quality 0 https://github.com/flashcatcloud/flashduty-cli/security
Insights https://github.com/flashcatcloud/flashduty-cli/pulse
Code https://github.com/flashcatcloud/flashduty-cli
Issues https://github.com/flashcatcloud/flashduty-cli/issues
Pull requests https://github.com/flashcatcloud/flashduty-cli/pulls
Actions https://github.com/flashcatcloud/flashduty-cli/actions
Projects https://github.com/flashcatcloud/flashduty-cli/projects
Security and quality https://github.com/flashcatcloud/flashduty-cli/security
Insights https://github.com/flashcatcloud/flashduty-cli/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fflashcatcloud%2Fflashduty-cli%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fflashcatcloud%2Fflashduty-cli%2Fissues%2Fnew%2Fchoose
ysyneuhttps://github.com/ysyneu
feat/ai-srehttps://github.com/flashcatcloud/flashduty-cli/tree/feat/ai-sre
feat/generic-table-rendererhttps://github.com/flashcatcloud/flashduty-cli/tree/feat/generic-table-renderer
Conversation 0 https://github.com/flashcatcloud/flashduty-cli/pull/46
Commits 1 https://github.com/flashcatcloud/flashduty-cli/pull/46/commits
Checks 12 https://github.com/flashcatcloud/flashduty-cli/pull/46/checks
Files changed https://github.com/flashcatcloud/flashduty-cli/pull/46/files
Please reload this pagehttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
feat(cli): render generated commands as human tables, not raw JSON https://github.com/flashcatcloud/flashduty-cli/pull/46/files#top
Show all changes 1 commit https://github.com/flashcatcloud/flashduty-cli/pull/46/files
9ee8802 feat(cli): render generated commands as human tables, not raw JSON ysyneu Jun 15, 2026 https://github.com/flashcatcloud/flashduty-cli/pull/46/commits/9ee88027d93e0d25c4268c8ad17a61cb19db4856
Clear filters https://github.com/flashcatcloud/flashduty-cli/pull/46/files
Please reload this pagehttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
Please reload this pagehttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
display_columns.go https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-5fc9c0be6087cce328a389c6515e0ef689be0d7ee1911bd93f855ed7c3679e49
gen_support.go https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-34ac7ff49df4b19094d4abb371a6867fdbe29347ef089ee2e850a3377c9e0805
generic_table.go https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-cf99941fdf9b4c2bcc24ffcbba011cb26ff8e99532c70c1da7f86adfbb2dc015
generic_table_test.go https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-b98d8b347d99f78420130cadca514c65f78e17e9303b8629dc0550824bf883b2
table.go https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-e7db48870f37deac32208f8e0216ac90addb48069398608c346305845a601dc4
internal/cli/display_columns.gohttps://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-5fc9c0be6087cce328a389c6515e0ef689be0d7ee1911bd93f855ed7c3679e49
View file https://github.com/flashcatcloud/flashduty-cli/blob/9ee88027d93e0d25c4268c8ad17a61cb19db4856/internal/cli/display_columns.go
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/flashcatcloud/flashduty-cli/pull/46/{{ revealButtonHref }}
internal/cli/gen_support.gohttps://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-34ac7ff49df4b19094d4abb371a6867fdbe29347ef089ee2e850a3377c9e0805
View file https://github.com/flashcatcloud/flashduty-cli/blob/9ee88027d93e0d25c4268c8ad17a61cb19db4856/internal/cli/gen_support.go
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/flashcatcloud/flashduty-cli/pull/46/{{ revealButtonHref }}
https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-34ac7ff49df4b19094d4abb371a6867fdbe29347ef089ee2e850a3377c9e0805
https://github.com/flashcatcloud/flashduty-cli/pull/46/files#diff-34ac7ff49df4b19094d4abb371a6867fdbe29347ef089ee2e850a3377c9e0805
Please reload this pagehttps://github.com/flashcatcloud/flashduty-cli/pull/46/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.