Skip to content

WIP: Experimentation w/move to Smithy#545

Open
brendanobra wants to merge 19 commits into
nextfrom
feat/smithy
Open

WIP: Experimentation w/move to Smithy#545
brendanobra wants to merge 19 commits into
nextfrom
feat/smithy

Conversation

@brendanobra
Copy link
Copy Markdown
Contributor

Summary

Phase 1 of the spec-driven-testgen change: constraint enforcement baked into
generated C++ and Rust bindings, plus an automated test file generator driven by
the spec's own bounds.

All code changes are in rdk-e/firebolt-sdk-gen (pushed to main). This PR covers
the Smithy spec additions and the openspec change archive.

Spec changes

  • src/smithy/accessibility.smithy — Add SpeechRate scalar shape with
    @range(min: 0.1, max: 10.0)
  • src/smithy/voiceguidance.smithy — Reference SpeechRate via cross-namespace
    use; remove TODO comment
  • openspec/changes/ — Archive spec-driven-testgen
    archive/2026-05-06-spec-driven-testgen/

What shipped in firebolt-sdk-gen

Area Detail
fb-ir Constraints struct (min/max/length/pattern) on AliasDef and Param
OpenRPC lowering constraints_from_schema() reads JSON Schema constraint keywords
C++ backend Error::InvalidParams guards emitted in setters before the transport call
Rust backend TryFrom<Inner> newtypes for constrained aliases
fb-testgen crate TestCase, MockTransport, derive_test_cases(method)
--lang test Emits <module>_test.cpp and <module>_test.rs per module
Smithy traits @range/@length/@pattern parsed natively; scalar shapes (float SpeechRate) supported in built-in IDL parser

Not in this PR

  • Task 9 (CI integration) — deferred

bobra200 added 13 commits May 4, 2026 09:22
Generated from src/openrpc/ via fb-gen --lang smithy, then human-reviewed
for wire compatibility against production OpenRPC specs.

Wire-compat fixes applied:
- Device: Resolution → list<Integer> (was union of same-type arms)
- Device: AudioProfiles/HDCPVersionMap field names @JsonName for dotted identifiers
- Capabilities: granted result correctly optional (no @required)
- SecureStorage: get result correctly optional (no @required)
- Wifi: AccessPointList as wrapper struct {list:[AccessPoint]}, not bare list
- Discovery: TuneChannels xrn enum member renamed + @enumValue
- HDMIInput: EDIDVersion 1.4/2.0 members renamed + @enumValue
- Metrics: MediaPosition → Double, EventObjectPrimitives → Document
- Localization: LatLon → list<Double>, additionalInfo map value → Document

All 25 drafts validated by smithy_drafts_are_wire_compatible_with_openrpc
e2e test in firebolt-sdk-gen.
- accessibility: add ClosedCaptionsSettings, VoiceGuidanceSettings, StringList
- advertising: add SkipRestriction enum
- localization: add Locale, Language, CountryCode, TimeZone, Locality, ISO639_2Language
- metrics: fix Policies::AgePolicy→AgePolicy, Types::FlatMap→FlatMap targets (19 members);
  add AgePolicy (string) and FlatMap (map<string,string>) shapes
- discovery: fix Entertainment::* and Intents::* and Entity::* and Policies::* and Types::*
  targets (9 members + 2 list members); add InterestType, InterestReason, OfferingType,
  ProgramType, ContentIdentifiers, EntityInfo, EntityDetails, EntityInfoResult,
  PurchasedContentParameters, LocalizedString, NavigationIntent, AgePolicy, Entitlement shapes
…uation

- profile: Types::FlatMap→FlatMap (map<string,string>)
- voiceguidance: Accessibility::SpeechRate→SpeechRate (float)
- wifi: Types::Timeout→Timeout (integer ms)
- lifecycle: add CloseReason enum (userExit/remoteButton/done/error/mediaEnded)
             add LifecycleState enum (initializing/inactive/foreground/background/suspended/unloading)
- secondscreen: Types::BooleanMap→BooleanMap (map<string,bool>)
                add SecondScreenEvent structure (type/version/data)
- content: Discovery::InterestReason→InterestReason (enum)
           Discovery::InterestType→InterestType (enum)
           Entity::EntityDetails→EntityDetails (struct)
           add ContentIdentifiers structure

All 6 modules now self-contained; smithy-canonical: 16→22 modules
…ties, usergrants)

- closedcaptions: remap 14 Accessibility::*/Localization::* targets; add Color (string),
  FontEdge (enum/6), FontFamily (enum/7), FontSize (float), HorizontalAlignment (string),
  VerticalAlignment (string), Opacity (float), ISO639_2Language (string),
  ISO639_2LanguageList (list); also fix shape ID Localization::ISO639_2LanguageList
- capabilities: add Capability (string+pattern), Role (enum: use/manage/provide),
  CapabilityInfo (structure), Permission (structure)
- usergrants: remap 11 Capabilities::* targets; add local Capability, Role, Permission,
  PermissionList; fix shape ID Capabilities::PermissionList

All 25 Smithy modules now self-contained. smithy-canonical: 22→25 modules
…thy spec

- namespace: com.firebolt.texttospeech
- 14 operations: speak, pause, resume, cancel, getspeechstate,
  8 × on* events, listvoices
- SpeechId and TTSStatus inlined as Integer (no cross-namespace refs)
- Locale param in listvoices inlined as String
- SpeechState as intEnum with named members (SPEECH_PENDING/IN_PROGRESS/PAUSED/NOT_FOUND)
- 0 ext-deps: fully self-contained
… types

Three event operations had their output value members typed as
smithy.api#String. Replace with properly typed named structures:

- OnSignIn / OnSignOut: {appId: String} — matches the OpenRPC
  onSignIn/onSignOut result schema ({type:object, properties:{appId:string}})
- OnRequestUserInterest: {correlationId: String, parameters: UserInterestProviderParameters}
  — matches the OpenRPC Discovery.onRequestUserInterest result schema

This removes these three methods from the wire-compat allowlist in the
firebolt-sdk-gen e2e test suite.
…horing skills

- Add firebolt-api-change schema with interview-driven proposal, scaled
  design, VERIFY-enforced tasks, and Firebolt-specific spec scaffold
- Set firebolt-api-change as the default openspec schema in config.yaml
- Add /opsx:new-fb-api skill and prompt — adds a new API end-to-end from
  plain English, no Smithy knowledge required
- Add /opsx:modify-fb-api skill and prompt — modifies an existing API with
  breaking-change detection and confirmation gate
- Register both commands in copilot-instructions.md workflow table
- Update README to surface /opsx:new-fb-api and /opsx:modify-fb-api as
  the recommended entry points for the authoring workflow
- Archive firebolt-api-change-schema change (13/13 tasks complete)
- Sync delta specs: firebolt-schema-ux (new), smithy-idl-canonical (appended)
Adds an @event operation to ActionsService that fires when the platform
delivers a new intent to registered listeners. Payload is the intent
string. Capability: xrn:firebolt:capability:actions:intent.

215 methods total (+1). Generated C++: subscribeOnIntent() in actions.h.

Also fixes tasks.md template: --lint --input does not support .smithy
files; replaced with --dry-run via profile (correct Smithy validation path).
…ctions spec

- Archive openspec/changes/actions-on-intent → archive/2026-05-05-actions-on-intent
  (all 9 tasks complete, all artifacts done)
- Sync delta spec → openspec/specs/actions/spec.md
- New change smithy-codegen-ci: tracks CI integration for
  Smithy→OpenRPC and Smithy→C++ codegen steps, plus @examples support
Full OpenSpec change for spec-driven constraint enforcement and test generation:
- proposal.md: new fb-testgen crate + IR constraint propagation + C++ guards
- design.md: decisions D1-D6 (IR shape, C++ idiom, Rust newtypes, test oracle,
  fuzz seeds, two-layer Smithy constraint sourcing)
- specs/spec-driven-testgen/spec.md: normative SHALL requirements + scenarios
- tasks.md: 9 task groups, 37 tasks, VERIFY steps throughout

Tasks.md includes:
- Docker zero-install path (QA-first, one command smoke test)
- Native path (SDK contributors)
- Toolchain prerequisites for both paths
- Definition of done: 6 commands (docker: 1 command)
- Repo-split orientation table (firebolt-sdk-gen vs firebolt-apis)
- Sibling change dependency on smithy-codegen-ci
- Add SpeechRate (@range 0.1-10.0) to src/smithy/accessibility.smithy
- Wire SpeechRate into src/smithy/voiceguidance.smithy (replaces TODO comment)
- Archive spec-driven-testgen openspec change to openspec/changes/archive/

Implementation in firebolt-sdk-gen (separate repo):
- fb-ir: Constraints struct propagated through AliasDef and Param
- fb-frontend: OpenRPC schema lowering extracts min/max/length/pattern
- fb-backend-cpp: Error::InvalidParams guards in setters (C++)
- fb-backend-rust: TryFrom newtypes for constrained types (Rust)
- fb-testgen: new crate — TestCase, MockTransport, derive_test_cases()
- fb-backend-cpp/emit_tests.rs: --lang test emits <module>_test.cpp
- fb-backend-rust/emit_tests.rs: --lang test emits <module>_test.rs
- fb-frontend-smithy: @range/@length/@pattern trait parsing; simple scalar shapes in IDL parser
Copilot AI review requested due to automatic review settings May 7, 2026 03:07
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR advances the repo’s WIP migration toward Smithy 2.0 IDL (src/smithy/) as the canonical spec source, adds/updates OpenSpec governance artifacts and templates to support the workflow, and archives the completed spec-driven-testgen change record.

Changes:

  • Add Smithy IDL module specs under src/smithy/ (including the new constrained SpeechRate scalar and cross-namespace use from voiceguidance).
  • Formalize OpenSpec workflow governance (new schema/templates + requirements specs + RDKe profile/quirks guidance updates).
  • Archive the spec-driven-testgen change and update docs/skills/prompts for the new authoring flow.

Reviewed changes

Copilot reviewed 85 out of 87 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
src/smithy/accessibility.smithy Adds SpeechRate scalar with @range and accessibility module shapes/ops.
src/smithy/account.smithy Adds Account module Smithy IDL.
src/smithy/acknowledgechallenge.smithy Adds AcknowledgeChallenge module Smithy IDL.
src/smithy/actions.smithy Adds Actions module Smithy IDL (incl. onIntent).
src/smithy/advertising.smithy Adds Advertising module Smithy IDL.
src/smithy/audiodescriptions.smithy Adds AudioDescriptions module Smithy IDL.
src/smithy/authentication.smithy Adds Authentication module Smithy IDL.
src/smithy/capabilities.smithy Adds Capabilities module Smithy IDL.
src/smithy/closedcaptions.smithy Adds ClosedCaptions module Smithy IDL.
src/smithy/content.smithy Adds Content module Smithy IDL.
src/smithy/device.smithy Adds Device module Smithy IDL.
src/smithy/discovery.smithy Adds Discovery module Smithy IDL.
src/smithy/display.smithy Adds Display module Smithy IDL.
src/smithy/hdmiinput.smithy Adds HdmiInput module Smithy IDL.
src/smithy/internal.smithy Adds Internal module Smithy IDL.
src/smithy/keyboard.smithy Adds Keyboard module Smithy IDL.
src/smithy/lifecycle.smithy Adds Lifecycle module Smithy IDL.
src/smithy/lifecycle2.smithy Adds Lifecycle2 module Smithy IDL.
src/smithy/localization.smithy Adds Localization module Smithy IDL.
src/smithy/metrics.smithy Adds Metrics module Smithy IDL.
src/smithy/network.smithy Adds Network module Smithy IDL.
src/smithy/parameters.smithy Adds Parameters module Smithy IDL.
src/smithy/pinchallenge.smithy Adds PinChallenge module Smithy IDL.
src/smithy/presentation.smithy Adds Presentation module Smithy IDL.
src/smithy/privacy.smithy Adds Privacy module Smithy IDL.
src/smithy/profile.smithy Adds Profile module Smithy IDL.
src/smithy/secondscreen.smithy Adds SecondScreen module Smithy IDL.
src/smithy/securestorage.smithy Adds SecureStorage module Smithy IDL.
src/smithy/stats.smithy Adds Stats module Smithy IDL.
src/smithy/texttospeech.smithy Adds TextToSpeech module Smithy IDL.
src/smithy/usergrants.smithy Adds UserGrants module Smithy IDL.
src/smithy/voiceguidance.smithy Adds VoiceGuidance module Smithy IDL; imports SpeechRate.
src/smithy/wifi.smithy Adds Wifi module Smithy IDL.
README.md Documents Smithy/OpenSpec workflow and RDKe authoring steps.
package-lock.json Updates lockfile (dependency + workspace version bumps).
openspec/specs/smithy-idl-canonical/spec.md Adds requirements describing Smithy IDL as canonical.
openspec/specs/rdke-howto/spec.md Adds requirements for README prerequisites/workflow/quirks policy.
openspec/specs/firebolt-schema-ux/spec.md Adds requirements for interview-driven schema UX and VERIFY task discipline.
openspec/specs/actions/spec.md Adds requirements for actions.onIntent event behavior.
openspec/schemas/firebolt-api-change/templates/tasks.md Adds/updates task template with VERIFY steps and conventions.
openspec/schemas/firebolt-api-change/templates/spec.md Adds spec template for per-capability requirements.
openspec/schemas/firebolt-api-change/templates/proposal.md Adds proposal template for interview output.
openspec/schemas/firebolt-api-change/templates/design.md Adds design template (short rationale vs full design).
openspec/schemas/firebolt-api-change/schema.yaml Adds the firebolt-api-change schema definition and instructions.
openspec/rdke.quirks.toml Adds classified quirks guidance and overrides documentation.
openspec/rdke.profile.yaml Updates RDKe composition profile to include Smithy-canonical modules.
openspec/config.yaml Switches default OpenSpec schema and updates governance context for Smithy canonical workflow.
openspec/changes/smithy-codegen-ci/tasks.md Adds CI integration tracking tasks for Smithy→OpenRPC/C++ generation.
openspec/changes/smithy-codegen-ci/.openspec.yaml Declares schema + created date for the change.
openspec/changes/archive/2026-05-06-spec-driven-testgen/tasks.md Archives the spec-driven testgen task record.
openspec/changes/archive/2026-05-06-spec-driven-testgen/specs/spec-driven-testgen/spec.md Archives testgen requirements/spec.
openspec/changes/archive/2026-05-06-spec-driven-testgen/proposal.md Archives testgen proposal.
openspec/changes/archive/2026-05-06-spec-driven-testgen/design.md Archives testgen design doc.
openspec/changes/archive/2026-05-06-spec-driven-testgen/.openspec.yaml Archives testgen schema metadata.
openspec/changes/archive/2026-05-05-update-readme-with-full-explanation-howto/tasks.md Archives README-update change tasks.
openspec/changes/archive/2026-05-05-update-readme-with-full-explanation-howto/specs/smithy-idl-canonical/spec.md Archives README-update specs (smithy canonical).
openspec/changes/archive/2026-05-05-update-readme-with-full-explanation-howto/specs/rdke-howto/spec.md Archives README-update specs (RDKe howto).
openspec/changes/archive/2026-05-05-update-readme-with-full-explanation-howto/proposal.md Archives README-update proposal.
openspec/changes/archive/2026-05-05-update-readme-with-full-explanation-howto/design.md Archives README-update design.
openspec/changes/archive/2026-05-05-update-readme-with-full-explanation-howto/.openspec.yaml Archives README-update schema metadata.
openspec/changes/archive/2026-05-05-migrate-smithy-ast-to-idl/tasks.md Archives Smithy AST→IDL migration task record.
openspec/changes/archive/2026-05-05-migrate-smithy-ast-to-idl/specs/smithy-idl-canonical/spec.md Archives migration requirements/spec.
openspec/changes/archive/2026-05-05-migrate-smithy-ast-to-idl/proposal.md Archives migration proposal.
openspec/changes/archive/2026-05-05-migrate-smithy-ast-to-idl/design.md Archives migration design.
openspec/changes/archive/2026-05-05-migrate-smithy-ast-to-idl/.openspec.yaml Archives migration schema metadata.
openspec/changes/archive/2026-05-05-firebolt-api-change-schema/tasks.md Archives schema-work change tasks.
openspec/changes/archive/2026-05-05-firebolt-api-change-schema/specs/smithy-idl-canonical/spec.md Archives schema-work smithy-canonical spec.
openspec/changes/archive/2026-05-05-firebolt-api-change-schema/specs/firebolt-schema-ux/spec.md Archives schema-work UX spec.
openspec/changes/archive/2026-05-05-firebolt-api-change-schema/proposal.md Archives schema-work proposal.
openspec/changes/archive/2026-05-05-firebolt-api-change-schema/design.md Archives schema-work design.
openspec/changes/archive/2026-05-05-firebolt-api-change-schema/.openspec.yaml Archives schema-work metadata.
openspec/changes/archive/2026-05-05-actions-on-intent/tasks.md Archives actions-onIntent change tasks.
openspec/changes/archive/2026-05-05-actions-on-intent/specs/actions/spec.md Archives actions-onIntent spec.
openspec/changes/archive/2026-05-05-actions-on-intent/proposal.md Archives actions-onIntent proposal.
openspec/changes/archive/2026-05-05-actions-on-intent/design.md Archives actions-onIntent design.
openspec/changes/archive/2026-05-05-actions-on-intent/.openspec.yaml Archives actions-onIntent metadata.
openspec/changes/.gitkeep Keeps changes directory in git when empty.
.vscode/llm-server-port Adds VS Code local port file.
.github/skills/openspec-propose/SKILL.md Adds OpenSpec propose skill documentation.
.github/skills/openspec-explore/SKILL.md Adds OpenSpec explore skill documentation.
.github/skills/openspec-archive-change/SKILL.md Adds OpenSpec archive skill documentation.
.github/skills/openspec-apply-change/SKILL.md Adds OpenSpec apply skill documentation.
.github/skills/new-fb-api/SKILL.md Adds end-to-end new API skill documentation.
.github/skills/modify-fb-api/SKILL.md Adds end-to-end modify API skill documentation.
.github/prompts/new-fb-api.prompt.md Adds prompt entrypoint for new API flow.
.github/prompts/modify-fb-api.prompt.md Adds prompt entrypoint for modify API flow.
.github/copilot-instructions.md Adds OpenSpec authoring guidance for Copilot usage.

Comment thread src/smithy/wifi.smithy
Comment on lines +70 to +72
structure AccessPointList {
list: AccessPointList
}
Comment thread src/smithy/wifi.smithy
Comment on lines +14 to +16
structure ScanInput {
timeout: Timeout
}
Comment on lines +14 to +17
structure InitializeInput {
@required
version: Types::SemanticVersion
}
Comment thread openspec/rdke.profile.yaml Outdated
Comment on lines +52 to +57
- parameters
- pinchallenge
- privacy
- securestorage
- text_to_speech

Comment thread src/smithy/stats.smithy
Comment on lines +22 to +30
structure MemoryInfo {
@required
gpuMemoryLimit: Integer
@required
gpuMemoryUsed: Integer
@required
userMemoryLimit: Integer
@required
userMemoryUsed: Integer
Comment thread src/smithy/metrics.smithy
Comment on lines +395 to +418
// TODO: alias AgePolicy = String (Smithy has no direct alias — use a newtype structure or inline the target)

enum ErrorType {
ENTITLEMENT = "entitlement"
MEDIA = "media"
NETWORK = "network"
OTHER = "other"
RESTRICTION = "restriction"
}

structure EventObject {
@required
value: EventObjectPrimitivesMap
}

union EventObjectPrimitives {
stringValue: String
doubleValue: Double
intValue: Integer
boolValue: Boolean
}

// TODO: alias MediaPosition = Double (Smithy has no direct alias — use a newtype structure or inline the target)

Comment thread .vscode/llm-server-port
@@ -0,0 +1 @@
3000
Comment thread README.md
Comment on lines +68 to +74
> **Native / multi-language SDK authors:** See [Adding a new Firebolt API and generating client language bindings](#adding-a-new-firebolt-api-and-generating-client-language-bindings) below — `src/smithy/` is the canonical source for all language bindings generated by `fb-gen` (C++, Rust, JS).

## Adding a new Firebolt API and generating client language bindings

Firebolt APIs are client bindings that let apps — whether browser-based JS or native (C++, Rust) — make Firebolt JSON-RPC calls. The Smithy IDL in `src/smithy/` is the canonical source for all such bindings generated by `fb-gen`.

> For the upstream `@firebolt-js/*` npm packages produced by the separate OpenRPC/npm pipeline, see [Authoring APIs](#authoring-apis) above.
Comment thread src/smithy/network.smithy
Comment on lines +20 to +25
structure ConnectedOutput {
@required
value: Connected
}

// TODO: alias Connected = Boolean (Smithy has no direct alias — use a newtype structure or inline the target)
Comment on lines +16 to +20
structure SupportedInput {
@required
capability: Capability
}

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

MFOS standalone sanity report - CORE,MANAGE,DISCOVERY:
Total:
- Passes: 534
- Failures: 0
- Pending: 0
- Skipped: 28
Report JSON/HTML Files: https://github.com/rdkcentral/firebolt-apis/suites/67832663106/artifacts/6846237411
Job Logs: https://github.com/rdkcentral/firebolt-apis/actions/runs/25473819107

bobra200 added 2 commits May 13, 2026 07:24
- src/smithy/device.smithy: add room @propertyReadonly operation
- src/smithy/firebolt.smithy: new firebolt module with serverVersion @propertyReadonly
- openspec/rdke.profile.yaml: add firebolt to smithy-canonical layer
- openspec/schemas/firebolt-api-change: add test generation gate (task group 4) to template
- openspec/changes/device-get-room: full change artifacts + all gates verified
- openspec/changes/firebolt-server-version: full change artifacts + all gates verified
@github-actions
Copy link
Copy Markdown
Contributor

MFOS standalone sanity report - CORE,MANAGE,DISCOVERY:
Total:
- Passes: 534
- Failures: 0
- Pending: 0
- Skipped: 28
Report JSON/HTML Files: https://github.com/rdkcentral/firebolt-apis/suites/68825799566/artifacts/6973656239
Job Logs: https://github.com/rdkcentral/firebolt-apis/actions/runs/25807039457

openspec/ and .github/skills|prompts|copilot-instructions.md have moved
to the firebolt-forge workspace repo where they belong. firebolt-forge is
the single source of truth for the rdke composition profile, change workflow
artifacts, and Copilot skill instructions.

Remaining in firebolt-apis: .github/workflows/ (CI for upstream),
.github/fca/, .github/mock-firebolt/, .github/codeql/, .github/dependabot.yml
Copilot AI review requested due to automatic review settings May 13, 2026 15:40
@github-actions
Copy link
Copy Markdown
Contributor

MFOS standalone sanity report - CORE,MANAGE,DISCOVERY:
Total:
- Passes: 534
- Failures: 0
- Pending: 0
- Skipped: 28
Report JSON/HTML Files: https://github.com/rdkcentral/firebolt-apis/suites/68834536016/artifacts/6974815002
Job Logs: https://github.com/rdkcentral/firebolt-apis/actions/runs/25809694704

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 40 out of 41 changed files in this pull request and generated 11 comments.

Comment thread src/smithy/wifi.smithy
Comment on lines +70 to +72
structure AccessPointList {
list: AccessPointList
}
Comment thread src/smithy/wifi.smithy
Comment on lines +14 to +16
structure ScanInput {
timeout: Timeout
}
Comment on lines +14 to +17
structure InitializeInput {
@required
version: Types::SemanticVersion
}
@required
navigationHints: Boolean
@required
rate: Double
Comment thread README.md
src/openrpc/ # Upstream OpenRPC JSON — reference/fallback, do not hand-edit
src/schemas/ # Shared JSON Schema definitions
src/sdks/ # npm workspace packages (generated — do not hand-edit build/ or dist/)
openspec/ # Change management (proposals, designs, tasks, specs)
Comment on lines +137 to +165
IFS=',' read -ra MOD_LIST <<< "$MODULES"
MISSING_HEAD=0

for mod in "${MOD_LIST[@]}"; do
mod="$(echo "$mod" | tr -d ' ')"
git -C "$APIS_DIR" show "${BASE_REF}:src/openrpc/${mod}.json" \
> "$HEAD_SPECS_DIR/${mod}.json" 2>/dev/null || {
log "$mod: not found at $BASE_REF — new module, skipping type compat check for this module"
MISSING_HEAD=1
}
done

# Copy schemas from HEAD for the type generation
for schema_file in "$APIS_DIR/src/schemas/"*.json; do
fname="$(basename "$schema_file")"
git -C "$APIS_DIR" show "${BASE_REF}:src/schemas/${fname}" \
> "$TMPDIR_B/head-schemas/src/schemas/${fname}" 2>/dev/null || \
cp "$schema_file" "$TMPDIR_B/head-schemas/src/schemas/${fname}" 2>/dev/null || true
done

# Generate TypeScript types from HEAD specs using firebolt-openrpc
# We use the core SDK workspace as the target for type generation
HEAD_SDK_DIR="$TMPDIR_B/head-sdk"
mkdir -p "$HEAD_SDK_DIR"

# Generate HEAD compiled OpenRPC
FIREBOLT_OPENRPC=$(cd "$APIS_DIR" && node -e "require.resolve('@firebolt-js/openrpc')" 2>/dev/null || true)
OPENRPC_BIN="$APIS_DIR/node_modules/.bin/firebolt-openrpc"

Comment thread .vscode/llm-server-port
@@ -0,0 +1 @@
3000
Comment thread src/smithy/network.smithy
value: Connected
}

// TODO: alias Connected = Boolean (Smithy has no direct alias — use a newtype structure or inline the target)
Comment on lines +190 to +200
// TODO: alias CountryCode = String (Smithy has no direct alias — use a newtype structure or inline the target)

// TODO: alias ISO639_2Language = String (Smithy has no direct alias — use a newtype structure or inline the target)

// TODO: alias Language = String (Smithy has no direct alias — use a newtype structure or inline the target)

// TODO: alias Locale = String (Smithy has no direct alias — use a newtype structure or inline the target)

// TODO: alias Locality = String (Smithy has no direct alias — use a newtype structure or inline the target)

// TODO: alias TimeZone = String (Smithy has no direct alias — use a newtype structure or inline the target)
Comment on lines +93 to +96
structure OnWillspeakInput {
@required
SpeechId: SpeechIdEvent
}
@github-actions
Copy link
Copy Markdown
Contributor

MFOS standalone sanity report - CORE,MANAGE,DISCOVERY:
Total:
- Passes: 534
- Failures: 0
- Pending: 0
- Skipped: 28
Report JSON/HTML Files: https://github.com/rdkcentral/firebolt-apis/suites/68915508207/artifacts/6985128261
Job Logs: https://github.com/rdkcentral/firebolt-apis/actions/runs/25835710427

bobra200 added 2 commits May 19, 2026 07:29
Annotate 42 operations across 5 modules based on the reference OpenRPC JSON
capability tags (x-uses / x-manages / rpc-only):

- display.smithy: @rpcOnly on maxResolution, @capability(display:info) on
  videoResolutions and colorimetry
- device.smithy: @capability on all 17 operations (id, distributor, platform,
  uid, type, model, sku, make, hdcp, hdr, audio, screenResolution,
  videoResolution, name, onDeviceNameChanged, network); @capability(manages)
  on provision
- accessibility.smithy: @capability on closedCaptions, closedCaptionsSettings,
  highContrastUI, voiceGuidance, voiceGuidanceSettings, audioDescriptionSettings
- localization.smithy: @capability on 11 operations including @Manages on
  addAdditionalInfo and removeAdditionalInfo
- lifecycle.smithy: @capability(lifecycle:state) on close and all 5 events
Copilot AI review requested due to automatic review settings May 27, 2026 21:16
@github-actions
Copy link
Copy Markdown
Contributor

MFOS standalone sanity report - CORE,MANAGE,DISCOVERY:
Total:
- Passes: 534
- Failures: 0
- Pending: 0
- Skipped: 28
Report JSON/HTML Files: https://github.com/rdkcentral/firebolt-apis/suites/71083741932/artifacts/7252206124
Job Logs: https://github.com/rdkcentral/firebolt-apis/actions/runs/26539229914

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 40 out of 41 changed files in this pull request and generated 21 comments.

Comment thread src/smithy/wifi.smithy
Comment on lines +70 to +72
structure AccessPointList {
list: AccessPointList
}
Comment thread src/smithy/wifi.smithy
Comment on lines +74 to +75
// TODO: alias Timeout = Integer (Smithy has no direct alias — use a newtype structure or inline the target)

Comment on lines +14 to +17
structure InitializeInput {
@required
version: Types::SemanticVersion
}
Comment on lines +185 to +186
// TODO: alias HDMIPortId = String (Smithy has no direct alias — use a newtype structure or inline the target)

Comment on lines +54 to +56
@property
operation speed {
input: SpeedInput
Comment thread src/smithy/metrics.smithy
Comment on lines +395 to +396
// TODO: alias AgePolicy = String (Smithy has no direct alias — use a newtype structure or inline the target)

@required
navigationHints: Boolean
@required
rate: Double
Comment on lines +21 to +25
structure ServerVersionOutput {
/// The Firebolt server version string, e.g. "2.3.1"
@required
value: String
}
Comment on lines +137 to +147
IFS=',' read -ra MOD_LIST <<< "$MODULES"
MISSING_HEAD=0

for mod in "${MOD_LIST[@]}"; do
mod="$(echo "$mod" | tr -d ' ')"
git -C "$APIS_DIR" show "${BASE_REF}:src/openrpc/${mod}.json" \
> "$HEAD_SPECS_DIR/${mod}.json" 2>/dev/null || {
log "$mod: not found at $BASE_REF — new module, skipping type compat check for this module"
MISSING_HEAD=1
}
done
Comment thread README.md
Comment on lines +24 to +28
src/smithy/ # Canonical Smithy 2.0 IDL specs — one .smithy file per module (edit these)
src/openrpc/ # Upstream OpenRPC JSON — reference/fallback, do not hand-edit
src/schemas/ # Shared JSON Schema definitions
src/sdks/ # npm workspace packages (generated — do not hand-edit build/ or dist/)
openspec/ # Change management (proposals, designs, tasks, specs)
@github-advanced-security
Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

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.

3 participants