Skip to content

Build a licensed interview-problem catalog and validation pipeline #60

Description

@rosshd

Parent: #56

Depends on: the interview-skill-graph child of #56.

Related: #54.

Problem

The bundled coding bank currently contains only two drills and lacks the metadata required for adaptive interview preparation.

Issue #54 defines acceptable content-source boundaries but does not create the catalog, validation rules, or authoring workflow.

Problem selection, solution evaluation, follow-ups, and delayed transfer all require a stable source-aware problem record.

Goal

Add a local, validated interview-problem catalog that can contain original, owned, licensed, or explicitly linked-out content without scraping protected sources.

Problem record

Each problem should support:

  • Stable problem ID and revision.
  • Title and learner-facing statement when redistribution is allowed.
  • Source type, source identifier, URL when applicable, license, attribution, and local-content permissions.
  • Supported languages and function or program interface.
  • Difficulty band and estimated working time.
  • Primary and supporting skill IDs.
  • Prerequisites and disallowed near-duplicate transfer pairs.
  • Constraints, examples, and edge-case families.
  • Public examples and hidden deterministic tests.
  • Reference approaches, expected complexity, common misconceptions, and bounded hint ladder.
  • Follow-up variants that change constraints or require a different approach.
  • Content checksum and validation status.

Source policy

Supported sources:

  • Original problems written for openLearn.
  • Curated content owned by or licensed to openLearn.
  • Openly licensed problem sets with preserved attribution.
  • Official external links where the learner views protected content at the source and openLearn stores only permitted metadata plus learner-owned work.

Unsupported sources:

  • Scraped LeetCode statements, examples, editorials, or hidden data from undocumented endpoints.
  • Content without sufficient rights or source provenance.
  • Model-generated problems accepted directly into the durable catalog without validation.

Authoring and validation

  • Provide a deterministic catalog validator.
  • Validate skill IDs, language interfaces, test structure, expected outputs, complexity metadata, licenses, and follow-up references.
  • Run reference implementations against public and hidden tests.
  • Detect duplicate IDs and optionally flag highly similar statements or test sets for review.
  • Package a small high-quality starter set rather than padding the catalog.
  • Keep user-added private problems local and separate from distributable package content.

Acceptance criteria

  • The catalog schema represents every field required by selection, execution, feedback, and transfer scheduling.
  • Every packaged problem has explicit source and license metadata.
  • Invalid skill references, tests, interfaces, checksums, and follow-up links fail validation.
  • Reference implementations pass all packaged tests.
  • Official link-out problems can create a local learner-owned workspace without copying protected statements.
  • Catalog revisions preserve attempt references to the version the learner saw.
  • User-added private entries do not enter package data or Git.
  • At least one fixture covers each source type supported in the first version.
  • The packaged starter set covers multiple core patterns and at least two difficulty bands.
  • make check passes.

Out of scope

  • A public content marketplace.
  • Automated scraping or mirroring.
  • A large low-quality generated problem dump.
  • Company-frequency rankings without a licensed source.

Documentation

  • Document the source and licensing policy.
  • Document how contributors author and validate original or openly licensed problems.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions