Presentation-feedback epics (GOV/RES/AIX/EXEC) + Flow Editor resource UX#51
Merged
Conversation
…agement) Operators can disable feature areas per deployment, independent of user roles — addressing the Provinzial blocker (managed/remote installs where package provisioning is centrally administered). GOV-1 — feature-flag foundation: src/governance/flags.py resolves ENV > app_settings(DB) > default-ON; GET /config/features + useFeatureFlags() (token-guarded singleton, default-enabled while loading; refetch on login, reset on logout). Flag rows seeded in DEFAULT_SETTINGS. GOV-2 — lock package management: require_package_op() on install/uninstall/ upgrade/retry/docker-build/rfbrowser-init AND setup-default; 403 even for ADMIN when off (read endpoints stay 200). Environments UI hides mutating controls + shows a localized read-only notice. GOV-3 — read-only environments = the locked-state UX. GOV-4 — configurable per-op role floor (features.packageManagement.role.*, default editor); Settings disables ENV-locked toggles with a hint. Enforcement is server-side authoritative (UI hiding is cosmetic). Blocked attempts are audit-logged in the dependency (the audit middleware skips >=400), detail feature_disabled:* / insufficient_role:*. Docs: CLAUDE.md gotcha (precedence + audit-middleware-skips-403 trap), in-app Feature Governance section (EN/DE/FR/ES), managedByAdmin + lockedByEnv i18n in all 5 locales (incl. ZH). Also folds in the German Language-Support docs subsection (parity follow-up). Tests: backend tests/governance/ (28 — precedence/parse edges, lockdown incl. setup-default, DB-toggle path, role-floor boundaries, audit-on-block), frontend useFeatureFlags.spec.ts, e2e gov-feature-lockdown.spec.ts (real UI: locked hides controls + notice + API 403). BMAD artifacts: gov-prd.md, gov-architecture.md, presentation-feedback-epics.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…-import)
Two-part fix so keywords from repo .resource files are usable, not just listed:
RES-1 (root cause) — GET /explorer/{id}/keywords was 500ing on a NameError
(`_get_repo` undefined); the frontend swallowed it (.catch(()=>[])), so
project/resource keywords never loaded into the palette at all. Fixed to
get_repository(...) + 404 guard (matches sibling endpoints). Pinned by
tests/explorer/test_router.py::TestProjectKeywords (endpoint was untested).
RES-2 — inserting a keyword sourced from a .resource (or other) file now
auto-adds `Resource <open-file-relative path>` to *** Settings *** (it
previously added nothing, so the keyword failed at runtime). New
resourcePath.ts::resourceImportPath threads the source path through the
palette's importHintFor into FlowEditor.addLibrary (which already creates +
dedupes Resource imports). Same-file / BuiltIn / Library inserts unchanged.
Tests: resourcePath.spec.ts (7 path cases), backend endpoint regression,
e2e resource-autoimport.spec.ts (real UI: insert a .resource keyword →
`Resource ../resources/common.resource` in the generated .robot).
BMAD artifacts: res-prd.md, res-architecture.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AIX-1 — LiteLLM gateway: add 'litellm' provider type (FE form option + freeform model + base-URL-required hint in EN/DE/FR/ES/ZH; AiProviderType union). It routes through the existing OpenAI-compatible client; llm_client now raises a clear error if a litellm provider has no Base URL (instead of falling back to api.openai.com). AIX-2 — analysis verbosity: concise|standard|detailed selector on the analysis card (ReportDetail + RunDetail), threaded request→dispatch→prompt exactly like the language directive. verbosity_directive() tunes length; standard/None is a no-op (non-breaking). i18n in all 5 locales. Tests: tests/ai/test_aix.py (verbosity directive + LiteLLM base-URL guard); backend AI suite green (41); frontend type-check/build/827 unit green. BMAD artifact: aix-prd.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… dialog The runner already turns a run's tags_include/tags_exclude into `robot --include/--exclude`, but the New Run dialog never exposed them — so the capability was unreachable. Add Include/Exclude tag inputs to the dialog, threaded through runForm → RunCreateRequest (already typed) → the existing backend. i18n EN/DE/FR/ES/ZH. Real-UI E2E (run-tags.spec.ts) asserts the create-run request carries tags_include. Deferred to backlog (see exec-prd.md): free-form robot args + variables UI (needs a migration), PreRunModifiers (EXEC-2), Long Name/Jira (EXEC-4), __init__.robot (EXEC-5), DataDriver (EXEC-6), RF best-practices spike (EXEC-7). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Close the parked doc-parity gap: - Add an "API Access" subsection to EN/FR/ES (advanced) — DE already had it. - Add "Branch Switching & Auto-Sync" to EN (repositories) — FR/ES already had it; DE already covers the topic under its combined sync section (left as-is). - EN/FR/ES are now subsection-identical. Gate 8 (language-and-docs-consistency) now asserts EN/FR/ES share identical per-section subsection ids; DE stays top-level-only (its docs use an independent structure + id scheme, so subsection parity would force artificial content changes). type-check + prod build green; gate spec green (4 tests). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Make using your own repository keywords in the Flow Editor direct, legible, and trustworthy (ux-flow-editor-resources.md): - D1 — pinned "Your resources" palette section (file glyph + relative path subtitle, no SHOUTY); imports panel split into labelled Resources / Libraries lists so a .resource never sits under Libraries. - D2 — import-confirmation toast on auto-import (addLibrary now reports the kind it added); fires only when an import was actually added. - D3 — inserting a keyword pre-seeds one slot per required positional argument from its signature (fixes the empty "+ add argument"). - D4 — every palette item carries a title tooltip; name flexes, badges stay pinned right. - D5 — header sort control (Most used / A–Z / Imported first), persisted. - D6 — "what's shown" filter with an adaptive default (env + a sophisticated-file heuristic) + persisted manual override + hidden hint. Filter/sort/heuristic logic extracted to a pure, unit-tested module (paletteView.ts). i18n EN/DE/FR/ES (ZH falls back to EN). Tests: PaletteView.spec.ts, FlowEditorPrefillArgs.spec.ts, e2e/flow-editor-resource-ux.spec.ts. Full vitest suite green; prod build clean; adjacent flow-editor E2E + RES autoimport green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Folds the four presentation-feedback epics plus the Flow Editor custom-resource UX wave into
main. Each was built via the BMAD flow (PRD → architecture → impl → review) with real-UI E2E.Epics
790e327) — deployment feature lockdown:ROBOSCOPE_FEATURE_*ENV > DB > default-ON flag resolver, per-endpointrequire_feature/require_package_openforcement (absolute 403, audited), token-guardeduseFeatureFlagsfrontend gate.1086ebb) — repository.resourcekeywords usable: inserting a.resourcekeyword auto-adds the matchingResourceimport (open-file-relative path).8eea70d) — LiteLLM provider type + AI-analysis verbosity control.5a43237) — Include/Exclude tag selection in the run dialog, threaded to the existingrobot --include/--excluderunner.fe55579) — EN/FR/ES doc-subsection parity pinned as a release gate.Flow Editor resource UX wave — D1–D6 (
9100039)From the scoped UX spec
_bmad-output/planning-artifacts/ux-flow-editor-resources.md:Filter/sort/heuristic logic lives in a pure, unit-tested module (
paletteView.ts).Verification
gov-feature-lockdown,resource-autoimport,run-tags,flow-editor-resource-ux, plus 12 adjacent flow-editor specs green.🤖 Generated with Claude Code