# FlagShark assessment example

This is a synthetic test fixture from FlagShark’s migration-assessment regression suite, not a customer assessment or a statement of current support for your repository. Counts and effort estimates below apply only to this fixture. The full report is preserved so you can inspect its evidence, scope, and blockers. Current support: https://flagshark.com/platform/openfeature/#support

“Axis B” below assesses flag-configuration compatibility, not configuration migration. This example retains LaunchDarkly as its backend and explicitly does not migrate flag configuration.

---

# LaunchDarkly → OpenFeature Migration Assessment

## Summary

- **Exact support cell:** `adopt-openfeature/launchdarkly-node-server/ecmascript/server@2`
- **Capability used:** `assessment` (highest supported: `verification`; built-in-verified)
- **Assessed source scope:** LaunchDarkly Node server SDK in JavaScript/TypeScript
- **Explicitly out of scope:** client-side and browser SDKs; non-JavaScript languages; LaunchDarkly segments, experiments, metrics, guarded rollouts and holdouts; LaunchDarkly release pipelines, scheduled changes, workflows, approvals and triggers; LaunchDarkly webhooks, data export, integrations, Relay Proxy and audit history; LaunchDarkly access roles and environment mapping; vendored dependencies, build outputs and unresolved non-regular Git entries
- **Objective:** `adopt-openfeature`
- **Target evaluation API:** OpenFeature via `@openfeature/server-sdk`
- **Runtime backend:** LaunchDarkly via `@launchdarkly/openfeature-node-server`
- **Migrate flag configuration:** no
- **Repositories requested:** 1
- **Repository coverage:** 1 complete · 0 partial · 0 failed
- **Distinct observed flags:** 1
- **Observed static-key call sites:** 1
- **Observed dynamic-key evaluations:** 0
- **Observed invalid/missing-key evaluations:** 0
- **Total observed evaluations:** 1
- **Automation-candidate share of static-key call sites:** 1/1 (100%)
- **Platform evidence:** complete
- **LaunchDarkly project:** `prod`
- **Platform coverage:** 1/1 flag definitions fetched · 0 failed · 0 omitted by count limit · 0 oversized · 0 omitted by byte limit · 395 retained bytes
- **Platform consistency:** verified-window
- **Platform source:** `https://app.launchdarkly.com/api/v2` · API `20240415` · source `workspace:workspace-1:project:prod` · unarchived-and-archived
- **Estimated human implementation/review effort within the declared scope:** ~1h 2m

### Code call sites (Axis A)

| Disposition | Count | Share of observed |
| --- | ---: | ---: |
| 🟢 Automation candidate | 1 | 100% |
| 🟡 Assisted | 0 | 0% |
| 🔴 Manual | 0 | 0% |

### Flag configuration (Axis B)

| Disposition | Count | Share of observed |
| --- | ---: | ---: |
| 🟢 Automation candidate | 1 | 100% |
| 🟡 Assisted | 0 | 0% |
| 🔴 Manual | 0 | 0% |

### Effort model

This is an assessment-only estimate: green items are deterministic automation candidates, but no source changes were generated.

1 Automation candidate × 2m \+ 0 Assisted × 5m \+ 2 Manual × 30m = **~1h 2m**.

## Cross-cutting migration work

These items are part of the scoped inventory. Classified items are included in the estimate even when they are assisted rather than blocking.

| Disposition | Kind | Flag | Location | Required work |
| --- | --- | --- | --- | --- |
| 🔴 Manual | dependency-replacement | — | `acme/web:package.json` | Add @openfeature/server-sdk and the runtime-provider package identified by the assessment target; retain or remove @launchdarkly/node-server-sdk@^9\.11\.0 according to residual direct usage\. |
| 🔴 Manual | provider-initialization | — | `acme/web:src/flags.ts:2:16` | Replace direct LaunchDarkly initialization with OpenFeature provider registration for the runtime provider identified by the assessment target\. |

## Blockers

2 blocking items must be resolved before the migration is complete:

- 🔴 Manual **dependency-replacement** at `acme/web:package.json`: Add @openfeature/server-sdk and the runtime-provider package identified by the assessment target; retain or remove @launchdarkly/node-server-sdk@^9\.11\.0 according to residual direct usage\.
- 🔴 Manual **provider-initialization** at `acme/web:src/flags.ts:2:16`: Replace direct LaunchDarkly initialization with OpenFeature provider registration for the runtime provider identified by the assessment target\.

## Call-site detail

| Disposition | Source role | Flag | Location | LD → OpenFeature | Evidence-qualified note |
| --- | --- | --- | --- | --- | --- |
| 🟢 Automation candidate | production | `checkout-v2` | `acme/web:src/flags.ts:4:10` | `boolVariation` → `getBooleanValue` | Typed value evaluation with a deterministic argument reorder\. |

## Flag-configuration detail

| Disposition | Flag | LD version | Environments / archive | Config inventory | Basis | Reasons |
| --- | --- | ---: | --- | --- | --- | --- |
| 🟢 Automation candidate | `checkout-v2` | 1 | 1 total; 0 archived | 0 rules; 0 segment references \(none\); 0 rollouts; 0 target values; 0 prerequisites \(none\); 0 experiment metrics; event tracking in 0 environments \(0 fallthrough\); purpose: standard; context kinds: none | backend-agnostic | Simple typed definition with no targeting complexity; final portability still depends on the selected backend\. |

## Repository evidence

| Repository | Status | Source | Commit | Acquired files | Source bytes | Analyzer coverage |
| --- | --- | --- | --- | ---: | ---: | --- |
| `acme/web` | complete | `https://api.github.com` · API `2022-11-28` · `installation:inst-1` | `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` | 2/2 | 272 | 1/1 parsed · 0 parse errors · 1 manifests |
