Move all os-backlog callers to the new command names #1623

Closed
opened 2026-11-06 20:06:26 +00:00 by jared · 3 comments
Owner

Problem

Code, skills, prompts, and the session note call the old command names. Two callers load os-backlog classes directly, which ties them to internals that the port deletes.

Approach

Use the consumer table in section 4 of the design record, and docs/system-design-format/proof/2026-11-06-os-backlog-consumer-sweep.md.

Required work:

  1. Change the name in plugins/os/lib/handoff/backlog.rb — check: absent issue-show in plugins/os/lib/handoff/backlog.rb
  2. Change the names in tracker/backlog/ticket_fetch.rb, tracker/backlog/comments_fetch.rb, and crc/filing/backlog_client.rb under plugins/os-sdlc/lib/os_sdlc — check: absent "issue- in plugins/os-sdlc/lib/os_sdlc/**/*.rb
  3. Change the name in the takedown eval lib/takedown/adapter/issue_source.rb — check: absent "issue-show" in plugins/os-sdlc/eval/ticket-takedown/lib/**/*.rb
  4. Add ticket label NUMBER LABEL to plugins/os-backlog/lib/backlog/cli/ticket_group.rb. It adds one label and keeps the others. The takedown adapter needs it, because no current name adds a label — check: present desc "label NUMBER LABEL" in plugins/os-backlog/lib/backlog/cli/ticket_group.rb
  5. Move the takedown eval lib/takedown/adapter/backlog_tracker.rb to the CLI: ticket comment and ticket label through Takedown::ProcessRunner. Replace test/adapter/backlog_tracker_test.rb, which asserts that Backlog::Project loads — check: absent Backlog:: in plugins/os-sdlc/eval/ticket-takedown/lib/**/*.rb
  6. Move plugins/os-sdlc/tests/crc/tickets_bin_test.rb to the CLI. test_generated_tickets_pass_the_os_backlog_issue_create_gate builds Backlog::Ticket::Draft in process; file the tickets with ticket create on a repo: tracker in the temporary root instead — check: absent Backlog:: in plugins/os-sdlc/tests/crc/tickets_bin_test.rb
  7. Start os-backlog from os-sdlc without the os-sdlc bundle. Today a child process gets BUNDLE_GEMFILE (os-sdlc Gemfile) and RUBYOPT=-rbundler/setup, so bin/os-backlog loads under the os-sdlc bundle. Measured 2026-11-07: with activemodel removed from that bundle, os-backlog ticket show exits 1 with cannot load such file -- active_model. Change Tracker::IssueSource::Shell and Crc::Filing::BacklogClient — check: present with_unbundled_env in plugins/os-sdlc/lib/os_sdlc/**/*.rb
  8. After items 5 to 7, remove activemodel from plugins/os-sdlc/Gemfile, with its comment line, and from plugins/os-sdlc/Gemfile.lock (activemodel, activesupport, and the dependencies that only they use) — check: absent activemodel in plugins/os-sdlc/Gemfile*
  9. Add project show to plugins/os-backlog/lib/backlog/cli/project_group.rb. It prints {"root", "tracker"} JSON from Project.current(Dir.pwd) and makes no host call. project inspect also gives tracker_configured, but it lists all open issues (4.3 s on cc-os), and project route reads the config text from stdin — check: present desc "show" in plugins/os-backlog/lib/backlog/cli/project_group.rb
  10. Route the os-sdlc .cc-os/config reads in tracker/backlog.rb and tracker/issue_source/tracker_lookup.rb through os-backlog project show. Today they read <root>/.cc-os/config only, so they skip the lookup of Backlog::ConfigLocator (the directory's own file, then the main checkout of a linked worktree), and os-sdlc and os-backlog can resolve different trackers in one directory. Ruling 78: Project in os-backlog owns the reader; no shared gem. No separate ticket exists (comment on #1621) — check: absent ".cc-os", "config" in plugins/os-sdlc/lib/os_sdlc/tracker/**/*.rb
  11. Delete docs/triage/2026-10-10-backfill-ticket-categories.rb. It is a one-time script, and the Backlog::ForgejoBackend it uses no longer exists — check: absent Backlog::ForgejoBackend in docs/triage/*
  12. Change the 48 lines in 22 files under plugins/*/{skills,agents,references} that name an old command (recount 2026-11-07: after os-backlog, ${CLAUDE_PLUGIN_ROOT}/bin/os-backlog, or {{OS_BACKLOG}}, or as a bare hyphenated name such as config-write). No prompt or hook file names one. Design notes under plugins/os-sdlc/reference/, the takedown README.md, and design/ output are not callers — check: absent os-backlog issue- in plugins/*/{skills,agents,references}/**/*.md
  13. Change the SessionNote text in plugins/os-backlog/lib/backlog/project/session_note.rb (close, close --needs-review, occurrence, projects) — check: absent os-backlog occurrence in plugins/os-backlog/lib/backlog/project/session_note.rb

Orchestrator work: run bin/refresh-plugins after the merge.

Acceptance criteria

  1. Given each code caller (Handoff::Backlog, TicketFetch, CommentsFetch, Crc::Filing::BacklogClient, Takedown::IssueSource), when it runs, then it calls the new name and gets the same result.
  2. Given the code callers outside plugins/os-backlog and the skill, agent, and reference text, when the 18 old names are searched as os-backlog subcommands, then no line matches. Only Backlog::CLI, Backlog::CLI::OldNames, and their tests keep the old names.
  3. Given a pipeline run with the new callers, when it ends, then the alias log gains no line.
  4. Given a ticket on a repo: tracker with the label next, when os-backlog ticket label NUMBER waiting runs, then os-backlog ticket show NUMBER lists both next and waiting, and the alias log gains no line.
  5. Given a takedown relevance judgment with the verdict needs_ruling, when Takedown::BacklogTracker posts it, then its runner gets os-backlog ticket comment NUMBER --body-file FILE and then os-backlog ticket label NUMBER waiting, and the takedown process defines no Backlog constant.
  6. Given the tickets that crc-tickets makes in the temporary project, when the test files each one with os-backlog ticket create on a repo: tracker, then each create exits 0.
  7. Given the os-sdlc bundle is loaded, when Tracker::IssueSource::Shell or Crc::Filing::BacklogClient starts a child process, then the child sees neither the os-sdlc BUNDLE_GEMFILE nor the bundler/setup RUBYOPT.
  8. Given plugins/os-sdlc/Gemfile.lock with no activemodel, when the os-sdlc and takedown suites run, then they pass.
  9. Given a linked git worktree with no .cc-os/config, and a main checkout whose .cc-os/config holds tracker=repo:issues, when os-backlog project show runs in the worktree, then it prints repo:issues. Given a subdirectory with its own .cc-os/config, then it prints the tracker of that subdirectory.
  10. Given a directory with no .cc-os/config for which os-backlog project show prints the tracker forgejo:owner/repo, when os-sdlc runs Tracker::Backlog.for and Tracker::IssueSource::TrackerLookup#call there, then the first gives a Tracker::Backlog, not Tracker::Null, and the second returns forgejo:owner/repo.

Owner sketch

class Backlog::CLI::TicketGroup < Backlog::CliGroup
  desc "label NUMBER LABEL"
  def label(number = nil, name = nil)    # IssueCommands#label: find, ticket.labels << name, save!
class Backlog::CLI::ProjectGroup < Backlog::CliGroup
  desc "show"
  def show                               # ProjectCommands#show: render("root" => ..., "tracker" => session.project.address)
class Handoff::Backlog                   # 'ticket', 'show'
class OsSdlc::Tracker::IssueSource::Shell
  def capture(*args)                     # Bundler.with_unbundled_env { Open3.capture3(*args) }
class OsSdlc::Crc::Filing::BacklogClient # new(command:, cwd:, runner: Tracker::IssueSource::Shell.new)
  def create(ticket)                     # ["ticket", "create", ...]
  def show(number)                       # ["ticket", "show", number]
class OsSdlc::Tracker::Backlog::TicketFetch    # "ticket", "show"
class OsSdlc::Tracker::Backlog::CommentsFetch  # "ticket", "comments"
class OsSdlc::Tracker::Backlog::ProjectShow    # new(root:, runner:, locator:), same shape as TicketFetch
  def tracker                            # ["project", "show"], chdir: root -> "tracker" or nil
class OsSdlc::Tracker::Backlog
  def self.for(root:, env: {})           # ConfiguredCheck.new(project_tracker:, backlog_tracker: ProjectShow#tracker)
class OsSdlc::Tracker::IssueSource::TrackerLookup
  def initialize(project, repo: ..., backlog: Tracker::Backlog::ProjectShow.new(root: project.root.to_s))
  def tracker_from_config = @backlog.tracker
class Takedown::IssueSource              # ["os-backlog", "ticket", "show", ticket]
class Takedown::BacklogTracker           # new(runner: ProcessRunner, cwd: Dir.pwd); RunCLI passes env.runner
  def comment(number, body)              # ["os-backlog", "ticket", "comment", number, "--body-file", tempfile]
  def add_label(number, label)           # ["os-backlog", "ticket", "label", number, label]

Each caller keeps its runner. Takedown::ProcessRunner already runs in Bundler.with_unbundled_env, so the takedown needs no environment change. In os-sdlc, Tracker::IssueSource::Shell becomes the one runner that starts os-backlog: BacklogClient uses it instead of its own Open3 call, and its Failure names the command with args.take(2).join(" "). ProjectShow uses the same runner and Tracker::ExecutableSearch.os_backlog locator as TicketFetch, and raises HarnessError when os-backlog fails. ConfiguredCheck takes the address, not the file lines. TrackerLookup keeps the project.yaml tracker first and the git remote last; only the file read moves. Backlog::ConfigLocator stays the one owner of the lookup (ruling 78). BacklogTracker keeps Dir.pwd as its directory, as today. The new tickets_bin_test.rb test writes tracker=repo:issues to .cc-os/config in its temporary root and files each ticket through BacklogClient#create, with CC_OS_HOME in the temporary root.

Non-goals

Do not remove the aliases. Slice 11 removes them.

Blocking edges

Blocked by #1622

Origin

  • Trigger: port plan, section 5 of docs/system-design-format/proof/2026-11-06-os-backlog-domain-objects.md, slice 10
  • Improvised this session: none
  • Chain: os-backlog code has no domain objects ← commands own their own reads and writes ← DESIGN (ADR-0307, plugins/os-backlog/CONTEXT.md)
  • Root candidate: none found; searched handoff/backlog.rb, backlog_client, caller rename, #1594
  • Where: plugins/os/lib/handoff/backlog.rb, plugins/os-sdlc/lib/os_sdlc/tracker/backlog/, plugins/os-sdlc/lib/os_sdlc/crc/filing/backlog_client.rb
  • Session: 9d8c2e15-00c1-4dec-b177-e749fa05ec67
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9d8c2e15-00c1-4dec-b177-e749fa05ec67.jsonl

VERDICT: CREATE

## Problem Code, skills, prompts, and the session note call the old command names. Two callers load os-backlog classes directly, which ties them to internals that the port deletes. ## Approach Use the consumer table in section 4 of the design record, and `docs/system-design-format/proof/2026-11-06-os-backlog-consumer-sweep.md`. Required work: 1. Change the name in `plugins/os/lib/handoff/backlog.rb` — check: absent `issue-show` in `plugins/os/lib/handoff/backlog.rb` 2. Change the names in `tracker/backlog/ticket_fetch.rb`, `tracker/backlog/comments_fetch.rb`, and `crc/filing/backlog_client.rb` under `plugins/os-sdlc/lib/os_sdlc` — check: absent `"issue-` in `plugins/os-sdlc/lib/os_sdlc/**/*.rb` 3. Change the name in the takedown eval `lib/takedown/adapter/issue_source.rb` — check: absent `"issue-show"` in `plugins/os-sdlc/eval/ticket-takedown/lib/**/*.rb` 4. Add `ticket label NUMBER LABEL` to `plugins/os-backlog/lib/backlog/cli/ticket_group.rb`. It adds one label and keeps the others. The takedown adapter needs it, because no current name adds a label — check: present `desc "label NUMBER LABEL"` in `plugins/os-backlog/lib/backlog/cli/ticket_group.rb` 5. Move the takedown eval `lib/takedown/adapter/backlog_tracker.rb` to the CLI: `ticket comment` and `ticket label` through `Takedown::ProcessRunner`. Replace `test/adapter/backlog_tracker_test.rb`, which asserts that `Backlog::Project` loads — check: absent `Backlog::` in `plugins/os-sdlc/eval/ticket-takedown/lib/**/*.rb` 6. Move `plugins/os-sdlc/tests/crc/tickets_bin_test.rb` to the CLI. `test_generated_tickets_pass_the_os_backlog_issue_create_gate` builds `Backlog::Ticket::Draft` in process; file the tickets with `ticket create` on a `repo:` tracker in the temporary root instead — check: absent `Backlog::` in `plugins/os-sdlc/tests/crc/tickets_bin_test.rb` 7. Start os-backlog from os-sdlc without the os-sdlc bundle. Today a child process gets `BUNDLE_GEMFILE` (os-sdlc `Gemfile`) and `RUBYOPT=-rbundler/setup`, so `bin/os-backlog` loads under the os-sdlc bundle. Measured 2026-11-07: with `activemodel` removed from that bundle, `os-backlog ticket show` exits 1 with `cannot load such file -- active_model`. Change `Tracker::IssueSource::Shell` and `Crc::Filing::BacklogClient` — check: present `with_unbundled_env` in `plugins/os-sdlc/lib/os_sdlc/**/*.rb` 8. After items 5 to 7, remove `activemodel` from `plugins/os-sdlc/Gemfile`, with its comment line, and from `plugins/os-sdlc/Gemfile.lock` (`activemodel`, `activesupport`, and the dependencies that only they use) — check: absent `activemodel` in `plugins/os-sdlc/Gemfile*` 9. Add `project show` to `plugins/os-backlog/lib/backlog/cli/project_group.rb`. It prints `{"root", "tracker"}` JSON from `Project.current(Dir.pwd)` and makes no host call. `project inspect` also gives `tracker_configured`, but it lists all open issues (4.3 s on cc-os), and `project route` reads the config text from stdin — check: present `desc "show"` in `plugins/os-backlog/lib/backlog/cli/project_group.rb` 10. Route the os-sdlc `.cc-os/config` reads in `tracker/backlog.rb` and `tracker/issue_source/tracker_lookup.rb` through `os-backlog project show`. Today they read `<root>/.cc-os/config` only, so they skip the lookup of `Backlog::ConfigLocator` (the directory's own file, then the main checkout of a linked worktree), and os-sdlc and os-backlog can resolve different trackers in one directory. Ruling 78: Project in os-backlog owns the reader; no shared gem. No separate ticket exists (comment on #1621) — check: absent `".cc-os", "config"` in `plugins/os-sdlc/lib/os_sdlc/tracker/**/*.rb` 11. Delete `docs/triage/2026-10-10-backfill-ticket-categories.rb`. It is a one-time script, and the `Backlog::ForgejoBackend` it uses no longer exists — check: absent `Backlog::ForgejoBackend` in `docs/triage/*` 12. Change the 48 lines in 22 files under `plugins/*/{skills,agents,references}` that name an old command (recount 2026-11-07: after `os-backlog`, `${CLAUDE_PLUGIN_ROOT}/bin/os-backlog`, or `{{OS_BACKLOG}}`, or as a bare hyphenated name such as `config-write`). No prompt or hook file names one. Design notes under `plugins/os-sdlc/reference/`, the takedown `README.md`, and `design/` output are not callers — check: absent `os-backlog issue-` in `plugins/*/{skills,agents,references}/**/*.md` 13. Change the `SessionNote` text in `plugins/os-backlog/lib/backlog/project/session_note.rb` (`close`, `close --needs-review`, `occurrence`, `projects`) — check: absent `os-backlog occurrence` in `plugins/os-backlog/lib/backlog/project/session_note.rb` Orchestrator work: run `bin/refresh-plugins` after the merge. ## Acceptance criteria 1. Given each code caller (`Handoff::Backlog`, `TicketFetch`, `CommentsFetch`, `Crc::Filing::BacklogClient`, `Takedown::IssueSource`), when it runs, then it calls the new name and gets the same result. 2. Given the code callers outside `plugins/os-backlog` and the skill, agent, and reference text, when the 18 old names are searched as os-backlog subcommands, then no line matches. Only `Backlog::CLI`, `Backlog::CLI::OldNames`, and their tests keep the old names. 3. Given a pipeline run with the new callers, when it ends, then the alias log gains no line. 4. Given a ticket on a `repo:` tracker with the label `next`, when `os-backlog ticket label NUMBER waiting` runs, then `os-backlog ticket show NUMBER` lists both `next` and `waiting`, and the alias log gains no line. 5. Given a takedown relevance judgment with the verdict `needs_ruling`, when `Takedown::BacklogTracker` posts it, then its runner gets `os-backlog ticket comment NUMBER --body-file FILE` and then `os-backlog ticket label NUMBER waiting`, and the takedown process defines no `Backlog` constant. 6. Given the tickets that `crc-tickets` makes in the temporary project, when the test files each one with `os-backlog ticket create` on a `repo:` tracker, then each create exits 0. 7. Given the os-sdlc bundle is loaded, when `Tracker::IssueSource::Shell` or `Crc::Filing::BacklogClient` starts a child process, then the child sees neither the os-sdlc `BUNDLE_GEMFILE` nor the `bundler/setup` `RUBYOPT`. 8. Given `plugins/os-sdlc/Gemfile.lock` with no `activemodel`, when the os-sdlc and takedown suites run, then they pass. 9. Given a linked git worktree with no `.cc-os/config`, and a main checkout whose `.cc-os/config` holds `tracker=repo:issues`, when `os-backlog project show` runs in the worktree, then it prints `repo:issues`. Given a subdirectory with its own `.cc-os/config`, then it prints the tracker of that subdirectory. 10. Given a directory with no `.cc-os/config` for which `os-backlog project show` prints the tracker `forgejo:owner/repo`, when os-sdlc runs `Tracker::Backlog.for` and `Tracker::IssueSource::TrackerLookup#call` there, then the first gives a `Tracker::Backlog`, not `Tracker::Null`, and the second returns `forgejo:owner/repo`. ## Owner sketch ```ruby class Backlog::CLI::TicketGroup < Backlog::CliGroup desc "label NUMBER LABEL" def label(number = nil, name = nil) # IssueCommands#label: find, ticket.labels << name, save! class Backlog::CLI::ProjectGroup < Backlog::CliGroup desc "show" def show # ProjectCommands#show: render("root" => ..., "tracker" => session.project.address) class Handoff::Backlog # 'ticket', 'show' class OsSdlc::Tracker::IssueSource::Shell def capture(*args) # Bundler.with_unbundled_env { Open3.capture3(*args) } class OsSdlc::Crc::Filing::BacklogClient # new(command:, cwd:, runner: Tracker::IssueSource::Shell.new) def create(ticket) # ["ticket", "create", ...] def show(number) # ["ticket", "show", number] class OsSdlc::Tracker::Backlog::TicketFetch # "ticket", "show" class OsSdlc::Tracker::Backlog::CommentsFetch # "ticket", "comments" class OsSdlc::Tracker::Backlog::ProjectShow # new(root:, runner:, locator:), same shape as TicketFetch def tracker # ["project", "show"], chdir: root -> "tracker" or nil class OsSdlc::Tracker::Backlog def self.for(root:, env: {}) # ConfiguredCheck.new(project_tracker:, backlog_tracker: ProjectShow#tracker) class OsSdlc::Tracker::IssueSource::TrackerLookup def initialize(project, repo: ..., backlog: Tracker::Backlog::ProjectShow.new(root: project.root.to_s)) def tracker_from_config = @backlog.tracker class Takedown::IssueSource # ["os-backlog", "ticket", "show", ticket] class Takedown::BacklogTracker # new(runner: ProcessRunner, cwd: Dir.pwd); RunCLI passes env.runner def comment(number, body) # ["os-backlog", "ticket", "comment", number, "--body-file", tempfile] def add_label(number, label) # ["os-backlog", "ticket", "label", number, label] ``` Each caller keeps its runner. `Takedown::ProcessRunner` already runs in `Bundler.with_unbundled_env`, so the takedown needs no environment change. In os-sdlc, `Tracker::IssueSource::Shell` becomes the one runner that starts os-backlog: `BacklogClient` uses it instead of its own `Open3` call, and its `Failure` names the command with `args.take(2).join(" ")`. `ProjectShow` uses the same runner and `Tracker::ExecutableSearch.os_backlog` locator as `TicketFetch`, and raises `HarnessError` when os-backlog fails. `ConfiguredCheck` takes the address, not the file lines. `TrackerLookup` keeps the `project.yaml` tracker first and the git remote last; only the file read moves. `Backlog::ConfigLocator` stays the one owner of the lookup (ruling 78). `BacklogTracker` keeps `Dir.pwd` as its directory, as today. The new `tickets_bin_test.rb` test writes `tracker=repo:issues` to `.cc-os/config` in its temporary root and files each ticket through `BacklogClient#create`, with `CC_OS_HOME` in the temporary root. ## Non-goals Do not remove the aliases. Slice 11 removes them. ## Blocking edges Blocked by #1622 ## Origin - Trigger: port plan, section 5 of `docs/system-design-format/proof/2026-11-06-os-backlog-domain-objects.md`, slice 10 - Improvised this session: none - Chain: os-backlog code has no domain objects ← commands own their own reads and writes ← DESIGN (ADR-0307, `plugins/os-backlog/CONTEXT.md`) - Root candidate: none found; searched handoff/backlog.rb, backlog_client, caller rename, #1594 - Where: plugins/os/lib/handoff/backlog.rb, plugins/os-sdlc/lib/os_sdlc/tracker/backlog/, plugins/os-sdlc/lib/os_sdlc/crc/filing/backlog_client.rb - Session: 9d8c2e15-00c1-4dec-b177-e749fa05ec67 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9d8c2e15-00c1-4dec-b177-e749fa05ec67.jsonl VERDICT: CREATE
Author
Owner

From #857: plugins/os-sdlc/Gemfile gained activemodel, because tests/crc/tickets_bin_test.rb and the takedown backlog_tracker.rb load lib/backlog under that bundle. Move both to the CLI here, then remove the gem. Slice 3 onward: run the os-sdlc and takedown suites before each merge while this holds.

From #857: plugins/os-sdlc/Gemfile gained activemodel, because tests/crc/tickets_bin_test.rb and the takedown backlog_tracker.rb load lib/backlog under that bundle. Move both to the CLI here, then remove the gem. Slice 3 onward: run the os-sdlc and takedown suites before each merge while this holds.
Author
Owner

Work started on branch ticket-1623. Ruling 79 (predicted): add ticket label and project show; the #1621 config-read item is part of this ticket.

Work started on branch ticket-1623. Ruling 79 (predicted): add `ticket label` and `project show`; the #1621 config-read item is part of this ticket.
Author
Owner

Resolution

Done: Callers in os, os-sdlc, and the takedown eval use the new names. ticket label and project show added (ruling 79). os-sdlc reads the tracker through project show and starts os-backlog unbundled. The takedown BacklogTracker and crc filing tests use the CLI; activemodel left the os-sdlc bundle. The session note and skill, agent, and reference text name only new commands.

Evidence: Commit 66818d26 on main. os-backlog 532, os-sdlc 3510, takedown 626, os 241 runs, 0 failures. Rubocop clean on 44 changed .rb files. All 13 Required work checks met. One design audit: 2 must-fix and 1 should-fix fixed, notes answered. Implementation 260 escalated (bound_exhausted:test-reviewer/fail) and was hand-finished; occurrence on #1109.

Follow-ups: none; #1624 removes the aliases and runs the second sweep

## Resolution **Done:** Callers in os, os-sdlc, and the takedown eval use the new names. ticket label and project show added (ruling 79). os-sdlc reads the tracker through project show and starts os-backlog unbundled. The takedown BacklogTracker and crc filing tests use the CLI; activemodel left the os-sdlc bundle. The session note and skill, agent, and reference text name only new commands. **Evidence:** Commit 66818d26 on main. os-backlog 532, os-sdlc 3510, takedown 626, os 241 runs, 0 failures. Rubocop clean on 44 changed .rb files. All 13 Required work checks met. One design audit: 2 must-fix and 1 should-fix fixed, notes answered. Implementation 260 escalated (bound_exhausted:test-reviewer/fail) and was hand-finished; occurrence on #1109. **Follow-ups:** none; #1624 removes the aliases and runs the second sweep
jared closed this issue 2026-11-07 14:19:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#1623
No description provided.