GithubHelp home page GithubHelp logo

docs's Introduction

Please note that these docs are meant to be read at https://exercism.org/docs - not in this website. Links in this repository are relative to the website, not internally in this repo.


Exercism Docs

These are the official docs for Exercism. We welcome all and any contributions. This repo is live-synced to the website.

How this repo is organized

  • building: How Exercism fits together with technical specs for maintainers.
  • product: The product philosophy and decisions behind Exercism.
  • community: Things to know about the Exercism community.
  • mentoring: Documents to help with mentoring.
  • user-facing: User facing docs for FAQs, help, etc

docs's People

Contributors

adrien-ludwig avatar andrerfcsantos avatar angelikatyborska avatar axtens avatar bajger avatar benjaminpjones avatar bobahop avatar bobbicodes avatar boydell avatar cmcaine avatar cowlike avatar dem4ron avatar ee7 avatar erikschierboom avatar exercism-bot avatar glennj avatar iesoftwaredeveloper avatar ihid avatar isaacg avatar japrad avatar junedev avatar kotp avatar kytrinyx avatar loziniak avatar meatball133 avatar neenjaw avatar pertrai1 avatar saschamann avatar taiyab avatar wolf99 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docs's Issues

🤖 Document sync error for commit d2cc02

We hit an error trying to sync the latest commit (d2cc02322b22427c0dfc163c0a6c0846fe5c9dfe) to the website.

The error was:

Track(#47312971158840) expected, got #<Track id: 1, slug: "rust", title: "Rust", blurb: "Rust is a compiled programming language designed f...", repo_url: "https://github.com/exercism/rust", synced_to_git_sha: "8ba81069dab8e96a53630f3e51446487b6ec9212", num_exercises: 0, num_concepts: 0, tags: ["paradigm/functional", "paradigm/imperative", "paradigm/procedural", "typing/static", "typing/strong", "execution_mode/compiled", "platform/windows", "platform/mac", "platform/linux", "platform/ios", "platform/android", "platform/web", "runtime/standalone_executable", "runtime/wasmtime", "used_for/backends", "used_for/cross_platform_development", "used_for/embedded_systems", "used_for/financial_systems", "used_for/frontends", "used_for/games", "used_for/robotics", "used_for/scientific_calculations", "used_for/web_development"], active: true, num_students: 0, median_wait_time: nil, created_at: "2021-08-30 06:11:55.760059000 +0000", updated_at: "2021-08-30 06:27:21.176712000 +0000", course: true, has_test_runner: true> which is an instance of Track(#47312972744400)

/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/association.rb:283:in `raise_on_type_mismatch!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/belongs_to_association.rb:77:in `replace'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/singular_association.rb:17:in `writer'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/builder/association.rb:111:in `track='
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `public_send'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `_assign_attribute'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:21:in `block in _assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `each'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `_assign_attributes'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:34:in `assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/core.rb:510:in `initialize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:54:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:799:in `_create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `block in create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `block in create_or_find_by!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:209:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:67:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:67:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `create_or_find_by!'
/usr/src/app/app/commands/git/sync_doc.rb:13:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:15:in `call'
/usr/src/app/app/commands/git/sync_track_docs.rb:15:in `block in call'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `each'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
/usr/src/app/app/commands/git/sync_track.rb:51:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
(irb):27:in `irb_binding'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `eval'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb/context.rb:385:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb.rb:493:in `block (2 levels) in eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:647:in `signal_status'
/usr/local/lib/ruby/2.6.0/irb.rb:490:in `block in eval_input'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `loop'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `catch'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb.rb:489:in `eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:428:in `block in run'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `catch'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `run'
/usr/local/lib/ruby/2.6.0/irb.rb:383:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:70:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:19:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:102:in `perform'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/bundle/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command/base.rb:69:in `perform'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `require'
bin/rails:4:in `<main>'

Please tag @exercism/maintainers-admin if you require more information.

Tags for Solidity

There are three items added to this file that will still prevent
a "pass" from configlet lint.

These entries, or at least suitable entries, will need to be added to
the exercism/configlet/src/lint/track_config.nim file (as of this work).

See exercism/configlet#454 for the discussion concerning the above file
in regards to this language. And the original PR at exercism/solidity#61.

[CI] Check relative links are correct

Not a priority for now, but it would be nice to have a script that does something like:

  • For every markdown file:
    • For every link:
      • If it's a relative link:
        • Check that it resolves to a file in this repo, using the logic that the website uses (no .md extension, etc)
        • Bonus: check that any anchor is correct too

[CI] Spell-check for documentation?

Would it be possible to add spell checking to CI for documentation (both student-facing and reference)?
Possibly extending to all markdown files (or other doc file types) throughout.
Depending on the method used there could be potential to extend to code samples and stubs, for languages that opt-in (may cause issues, for example in C with function names like strlen()) .

Justification:

There are people from all over the world contributing to Exercism. We cannot expect everyone to know the correct way to spell everything. Even for those of us that English is the first language for can quite often have typos or incorrect spellings in documents.

This might additionally help with those persnickety en-* vs en-US issues that sneak in via muscle memory!

At the moment such items can be caught in review, but this is extra load on a reviewer (who also may not recognise the incorrect spelling or typo). Removing this kind of low-level concern from reviewers, testers and integrators is pretty much the reason CI is a thing.

Fixing typos that make it through review requires another PR. PRs for such relatively small issues may not be deemed worthwhile by anyone that does notice the issue. However a CI check can be added with relatively low effort.

Possible Methods:

There are several spellcheckers that can run in a shell (e.g. GNU Aspell, Hunspell, etc). These could be configured to ignore any inline code sections (or at a stretch, have a script normalise files by removing inline code [remark?] before checking). There are some spellcheckers that will even spellcheck code also, though I don't know if these would work well across the variety of languages and associated casing conventions that Exercism covers.

Caveat:

Any such CI check should at least at first, either (or both) not be blocking, or should allow very easy addition of terms to the dictionary to cover programming and software terms that are not in common use.

lint: what is a "titleized string"?

lint.md contains:

  • The "concepts[].name" key is required
  • The "concepts[].name" value must be a non-empty, non-blank, titleized string

What is the definition of "titleized string"? Some possibilities:

  1. A string that has an uppercase letter as the first character
  2. A string that, if the first character is a letter, that letter must be uppercase (this allows e.g. a digit as the first character)
  3. A string where each word has an uppercase character as the first letter
  4. A string where each word has an uppercase character as the first letter, and the other letters are lowercase
  5. Something else

Can we specify a regular expression that it should match?

And as an aside, is it deliberate that the below aren't "titleized strings"?

  • The "exercises.concept[].name" value must be a non-empty, non-blank string
  • The "exercises.practice[].name" value must be a non-empty, non-blank string

If they are supposed to be titleized, is e.g. Sum of Multiples a titleized string, or should it be Sum Of Multiples?

Block access to mentoring if you have no slots remaining

After the before the upgrade to v3, I had 4 exercises waiting for mentor feedback. After the upgrade, I planned on putting them back into the mentor queue, but was hit with

You have no more mentoring slots available.
You can get more mentoring slots by earning reputation.

but didn't see how much reputation would net me more slots. So I think this prompts the addition of a section for showing what other potential rewards (other than badges) may be out there for those who gather a lot of reputation. I think it's a good motivator for gathering reputation.

At minimum, there should probably be a link explaining how much reputation is needed for more mentoring slots.

Consider moving "Migrate from Travis" to it's own doc

Consider moving "Migrate from Travis" to it's own doc.

Rationale:

  1. It's irrelevant for 99% of people wanting to learn about our CI, but makes the doc feel longer/scarier by being there.
  2. At the top we link to it straight away for people who want to learn about it - having a specific doc for it feels like a nice optimisation to send them to.

🤖 Document sync error for commit d2cc02

We hit an error trying to sync the latest commit (d2cc02322b22427c0dfc163c0a6c0846fe5c9dfe) to the website.

The error was:

Track(#47312971158840) expected, got #<Track id: 1, slug: "rust", title: "Rust", blurb: "Rust is a compiled programming language designed f...", repo_url: "https://github.com/exercism/rust", synced_to_git_sha: "8ba81069dab8e96a53630f3e51446487b6ec9212", num_exercises: 0, num_concepts: 0, tags: ["paradigm/functional", "paradigm/imperative", "paradigm/procedural", "typing/static", "typing/strong", "execution_mode/compiled", "platform/windows", "platform/mac", "platform/linux", "platform/ios", "platform/android", "platform/web", "runtime/standalone_executable", "runtime/wasmtime", "used_for/backends", "used_for/cross_platform_development", "used_for/embedded_systems", "used_for/financial_systems", "used_for/frontends", "used_for/games", "used_for/robotics", "used_for/scientific_calculations", "used_for/web_development"], active: true, num_students: 0, median_wait_time: nil, created_at: "2021-08-30 06:11:55.760059000 +0000", updated_at: "2021-08-30 06:27:21.176712000 +0000", course: true, has_test_runner: true> which is an instance of Track(#47312972744400)

/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/association.rb:283:in `raise_on_type_mismatch!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/belongs_to_association.rb:77:in `replace'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/singular_association.rb:17:in `writer'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/builder/association.rb:111:in `track='
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `public_send'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `_assign_attribute'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:21:in `block in _assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `each'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `_assign_attributes'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:34:in `assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/core.rb:510:in `initialize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:54:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:799:in `_create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `block in create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `block in create_or_find_by!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:209:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:67:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:67:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `create_or_find_by!'
/usr/src/app/app/commands/git/sync_doc.rb:13:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:15:in `call'
/usr/src/app/app/commands/git/sync_track_docs.rb:15:in `block in call'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `each'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
/usr/src/app/app/commands/git/sync_track.rb:51:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
(irb):27:in `irb_binding'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `eval'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb/context.rb:385:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb.rb:493:in `block (2 levels) in eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:647:in `signal_status'
/usr/local/lib/ruby/2.6.0/irb.rb:490:in `block in eval_input'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `loop'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `catch'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb.rb:489:in `eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:428:in `block in run'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `catch'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `run'
/usr/local/lib/ruby/2.6.0/irb.rb:383:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:70:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:19:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:102:in `perform'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/bundle/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command/base.rb:69:in `perform'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `require'
bin/rails:4:in `<main>'

Please tag @exercism/maintainers-admin if you require more information.

standardize a core maintenance label taxonomy

As a maintainer, I would like to leverage a shared vocabulary for managing a track.
I believe we'll capture this somewhere but wanted to jot down this idea in case we don't.

one example

@exercism/rust has multiple generations of labels:

  • GitHub defaults? "good first issue"
  • prior maintainer taxonomies
  • me adding a v3 label to triage issues migrated from @exercism/v3.

By unifying these labels under a common terminology we will improve the experience for maintainers, contributors, and word nerds like me.

I envision this as being a shared, core set of labels. Maintainers could introduce other labels as they see fit. But the shared terms should be preferred for the day-to-day operations of OSS maintenance.

Move TODO into Issues?

I have seen places in the docs that have TODO that seems better to be listed here in issues rather than the public facing website.

mentoring-discussion-todo

License of exercism icon / using it when linking to exercism

Hello,

I link to exercism on my website and would like to use the new icon for that, but I'm unsure about its license and under what conditions I may use it.

The logo itself is in exercism/website, which is published under AGPL-3.0. This is primarily a license for software/source code, and its conditions seem unusual for an icon, hence I'm asking here.

Is it allowed to use the icon on one's website when linking to exercism, what conditions need to be met and how to properly give credit?

Proofread mentoring docs

The docs in the mentoring section (initially added here) need proofreading and probably fixing up.

Please submit a PR with any changes that you think should be made!

links to "anatomy/" still in a lot of places

Hi, it seems the anatomy/ has been renamed into building/. I noticed it by arriving on a 404 from a link in another issue. It seems there are still many places referencing the old name and using old links like in the readme of this repo for example.

specify exercism wide code of conduct using a public .github repository

As a maintainer I would like the fancy green icons for my repository.
Besides vanity, I hope it will improve our rankings in the Proprietary Algorithms.

It looks like you can specify a default code of conduct for all public repositories within your organization:
https://docs.github.com/en/github/building-a-strong-community/creating-a-default-community-health-file#about-default-community-health-files

I would appreciate this for a code of conduct.
Thanks!

Add a link checker

Add a link-checker that checks internal links (with reference to the website, not the relative links)

This is no longer true:

This is no longer true:

  • On the exercise page in question, navigate to "Your Iterations". If the unwanted iteration is folded, click the circled arrow. In the "dots" menu, select "Delete iteration".

Originally posted by @glennj in #308 (comment)

Show key feature icons somewhere

Can we show the icons in building/tracks/config-json.md? And if so, how?


I'm thinking of something like this:

The following icons can be used:

community community

concurrency concurrency

cross-platform cross-platform

documentation documentation

dynamically-typed dynamically-typed

easy easy

embeddable embeddable

evolving evolving

expressive expressive

extensible extensible

fast fast

fun fun

functional functional

garbage-collected garbage-collected

general-purpose general-purpose

homoiconic homoiconic

immutable immutable

interactive interactive

interop interop

multi-paradigm multi-paradigm

portable portable

powerful powerful

productive productive

safe safe

scientific scientific

small small

stable stable

statically-typed statically-typed

tooling tooling

web web

widely-used widely-used

Practice Exercise spec mentions problem-specification introduction file - none exist.

The practice exercise spec mentions that .docs/introductions.md is required if the problem specification has a introductions.md file. But it does not look like any problem specification exercise has such a file.

It appears in my track that the .docs/introduction.md file was derived from the problem specification exercises' description.md. Should this reference to introduction.md in problem specification be replaced with a reference to description.md?

🤖 Document sync error for commit d2cc02

We hit an error trying to sync the latest commit (d2cc02322b22427c0dfc163c0a6c0846fe5c9dfe) to the website.

The error was:

Track(#47312971158840) expected, got #<Track id: 1, slug: "rust", title: "Rust", blurb: "Rust is a compiled programming language designed f...", repo_url: "https://github.com/exercism/rust", synced_to_git_sha: "8ba81069dab8e96a53630f3e51446487b6ec9212", num_exercises: 0, num_concepts: 0, tags: ["paradigm/functional", "paradigm/imperative", "paradigm/procedural", "typing/static", "typing/strong", "execution_mode/compiled", "platform/windows", "platform/mac", "platform/linux", "platform/ios", "platform/android", "platform/web", "runtime/standalone_executable", "runtime/wasmtime", "used_for/backends", "used_for/cross_platform_development", "used_for/embedded_systems", "used_for/financial_systems", "used_for/frontends", "used_for/games", "used_for/robotics", "used_for/scientific_calculations", "used_for/web_development"], active: true, num_students: 0, median_wait_time: nil, created_at: "2021-08-30 06:11:55.760059000 +0000", updated_at: "2021-08-30 06:27:21.176712000 +0000", course: true, has_test_runner: true> which is an instance of Track(#47312972744400)

/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/association.rb:283:in `raise_on_type_mismatch!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/belongs_to_association.rb:77:in `replace'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/singular_association.rb:17:in `writer'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/builder/association.rb:111:in `track='
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `public_send'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `_assign_attribute'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:21:in `block in _assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `each'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `_assign_attributes'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:34:in `assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/core.rb:510:in `initialize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:54:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:799:in `_create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `block in create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `block in create_or_find_by!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:209:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:67:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:67:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `create_or_find_by!'
/usr/src/app/app/commands/git/sync_doc.rb:13:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:15:in `call'
/usr/src/app/app/commands/git/sync_track_docs.rb:15:in `block in call'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `each'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
/usr/src/app/app/commands/git/sync_track.rb:51:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
(irb):27:in `irb_binding'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `eval'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb/context.rb:385:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb.rb:493:in `block (2 levels) in eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:647:in `signal_status'
/usr/local/lib/ruby/2.6.0/irb.rb:490:in `block in eval_input'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `loop'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `catch'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb.rb:489:in `eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:428:in `block in run'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `catch'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `run'
/usr/local/lib/ruby/2.6.0/irb.rb:383:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:70:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:19:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:102:in `perform'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/bundle/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command/base.rb:69:in `perform'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `require'
bin/rails:4:in `<main>'

Please tag @exercism/maintainers-admin if you require more information.

"Creating a Test runner" instructions link does not work on Test Runner page

Bug description
Link on Exercism web docs to a page doesn't work and ends up with Internal server error 500.

To Reproduce
Steps to reproduce the behavior:

  1. On Exercism web docs page: https://exercism.org/docs/building/tooling/test-runners
  2. Click on creating a Test Runner (that refer to: https://exercism.org/docs/building/tooling/creating-from-scratch.md)
  3. I ends up with error: "500 Internal Server Error
    If you are the administrator of this website, then please read this web application's log file and/or the web server's log file to find out what went wrong."

Expected behavior
Link to web doc works as expected and Creating a test runner instructions page is shown.

Version information:

  • OS: Tested on MacOS, Windows 10
  • Version of browser: Firefox 91.0.2 (64 bits)

Expected development cost
Probably just to fix a link?

Additional context
Please advice, what should be the correct link (if it is really wrong) and I can submit PR.

The master branch will be renamed to main

In line with our new org-wide policy, the master branch of this repo will be renamed to main. All open PRs will be automatically repointed.

GitHub will show you a notification about this when you look at this repo after renaming:

Screenshot 2021-01-27 at 15 31 45

In case it doesn't, this is the command it suggests:

git branch -m master main
git fetch origin
git branch -u origin/main main

You may like to update the primary branch on your forks too, which you can do under Settings->Branches and clicking the pencil icon on the right-hand-side under Default Branch:

Screenshot 2021-01-27 at 18 50 08

We will post a comment below when this is done. We expect it to happen within the next 12 hours.

[Roadmap] Does Exercism Teach Everything I Need to Know?

This is feedback on the v3 roadmap (#690) and the first few sections of the Concept Exercises document.

Role of Concept Exercises

I wonder if it would be possible to say something in the roadmap-type docs about the role of concept exercises in the student’s wider learning experience. Do we think that following the track of a language could lead to fluency on its own (i.e. with provided links but without additional tutorials)? Or is it more a companion resource as it is for v2. In specific cases this can inform the discussion of how hard we have to try to squeeze things into an exercise. It informs trade offs between a providing compelling exercise story and a comprehensive explanation of a topic.

In particular, knowing Exercism’s intention in this area will provide some guidance about the tone and contents of each exercise’s after.md document and the degree to which multiple concepts are combined in an exercise. If the aim is more that of a tutorial then it makes a lot of sense for an individual exercise to be a gentle introduction to a number of concepts. If the intention is to act as a companion to other material then covering ground in depth for a single topic and having an after.md document that is a good reference for that single topic may be a better approach.

Exercism’s Ambition

I think it is also important to say something in the roadmap-type docs about the limitations of exercism's ambition. This would provide justification for the sort of document we have in the csharp track, https://github.com/exercism/v3/blob/master/languages/csharp/reference/out-of-scope.md. For instance if we are not teaching the student about package managers (for practical reasons) which are essential to the craft then why should we worry too much about a less used part of the language such as C#’s unsafe code.

Minor Wording Issues in (#690)

each exercise should be focussed on getting someone to use a concept for the first time

I interpret this as meaning that the exercise should concentrate on a concept. If addressing more than one concept is acceptable then we should mention that and perhaps say something about how such concepts should be related. There are pedagogical tensions here which I am happy to elaborate. We should say something about the extent to which a student should be stretched by an exercise. “for the first time” gives the impression that we should “go easy” on them which would not fit with the intention that the student should be a seasoned coder in another language.

We discuss fluency but not the extent to which a language track is intended to be exhaustive or comprehensive. Incidentally I think you can be fluent in the core of the language without knowing sone quite large areas).

I know I’m not the only one to have struggled slightly with Fluency vs. Proficiency. I think “fluency” is a near-perfect term hinting at ideas idiomatic usage, craftsmanship etc. it’s better than “mastery” which is the other term that comes to mind. “Proficiency” doesn’t work as well. I would be happy to be called proficient in any endeavour but I know what you mean. I work sporadically on a massive PHP code base but would not consider putting PHP on my CV. I think PHP is a fine language and environment and one of its strength is its accessibility to the casual coder but I have no incentive to learn it to a degree of fluency - I can hack it. I thought of “adequacy” or “effectiveness” but I don’t think that they cut it. Perhaps don’t try to encapsulate the point in a single term. Exercism's point is that software engineering goes far beyond effectively communicating with a machine. There is a difference between the level of knowledge and skill that might enable a power user such as a quant analyst or a data scientist to make a computer sing and what is required of a good software developer.

Craftsmanship

One aspect of “fluency”, particularly in an OO language like C# or Java, is principle based programming, some aspects of craftsmanship, good practice, etc. This is partly because the languages are busy evolving in a functional direction which is at odds with their OO roots. It would be good to have Exercism acknowledge a trade-off between illustrating language and library features and the application of good practice even if it’s to say language tracks should make up their own minds on this. In C# we sometimes decide to avoid bad practice (or jump through hoops to avoid it) and sometimes (usually in less severe cases) allow it.

Meta

I think Visiony / Mission Statementy type documentation as above can be useful. They may not get widely read but when propagating culture to contributors by way of code review it is essential to have anchors of authority from which to kick off discussions about a particular approach. These cascade into style guides and documentation guides but a layer above that is helpful where subtleties of interpretation are involved.

Core team members have a “natural” authority which derives from having developed the ideas in the first place and being so invested in the project. Casual players need to be able to appeal to an agreed authority.

The .meta/config.json spec is not aligned to the linting rules

https://github.com/exercism/docs/blob/4ef28e2ecb4a70f42c2974fa73f091c9a98b8127/anatomy/tracks/concept-exercises.md#file-metaconfigjson is not in line with https://github.com/exercism/docs/blob/7cd2be0d25f290407b9ddcdf8a3f42394da084b6/anatomy/tracks/configlet/linting.md#rule-exercisesconceptslugmetaconfigjson-is-valid

This means that what the spec is needs to be extracted from those two documents without a canonical resource. For example: examplar key was added (in the listing rule), but it's not documented anywhere else.

🤖 Document sync error for commit d2cc02

We hit an error trying to sync the latest commit (d2cc02322b22427c0dfc163c0a6c0846fe5c9dfe) to the website.

The error was:

Track(#47312971158840) expected, got #<Track id: 1, slug: "rust", title: "Rust", blurb: "Rust is a compiled programming language designed f...", repo_url: "https://github.com/exercism/rust", synced_to_git_sha: "8ba81069dab8e96a53630f3e51446487b6ec9212", num_exercises: 0, num_concepts: 0, tags: ["paradigm/functional", "paradigm/imperative", "paradigm/procedural", "typing/static", "typing/strong", "execution_mode/compiled", "platform/windows", "platform/mac", "platform/linux", "platform/ios", "platform/android", "platform/web", "runtime/standalone_executable", "runtime/wasmtime", "used_for/backends", "used_for/cross_platform_development", "used_for/embedded_systems", "used_for/financial_systems", "used_for/frontends", "used_for/games", "used_for/robotics", "used_for/scientific_calculations", "used_for/web_development"], active: true, num_students: 0, median_wait_time: nil, created_at: "2021-08-30 06:11:55.760059000 +0000", updated_at: "2021-08-30 06:27:21.176712000 +0000", course: true, has_test_runner: true> which is an instance of Track(#47312972744400)

/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/association.rb:283:in `raise_on_type_mismatch!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/belongs_to_association.rb:77:in `replace'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/singular_association.rb:17:in `writer'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/associations/builder/association.rb:111:in `track='
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `public_send'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:49:in `_assign_attribute'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:21:in `block in _assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `each'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/attribute_assignment.rb:13:in `_assign_attributes'
/usr/local/bundle/gems/activemodel-6.1.4.1/lib/active_model/attribute_assignment.rb:34:in `assign_attributes'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/core.rb:510:in `initialize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/inheritance.rb:72:in `new'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:54:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:799:in `_create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `block in create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:114:in `create!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `block in create_or_find_by!'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `block in transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:209:in `transaction'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:108:in `public_send'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:108:in `block in method_missing'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `block in scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:804:in `_scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:406:in `scoping'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation/delegation.rb:108:in `method_missing'
/usr/local/bundle/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:218:in `create_or_find_by!'
/usr/src/app/app/commands/git/sync_doc.rb:13:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:15:in `call'
/usr/src/app/app/commands/git/sync_track_docs.rb:15:in `block in call'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `each'
/usr/src/app/app/commands/git/sync_track_docs.rb:14:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
/usr/src/app/app/commands/git/sync_track.rb:51:in `call'
/usr/local/bundle/gems/mandate-1.0.0.beta1/lib/mandate/call_injector.rb:17:in `call'
(irb):27:in `irb_binding'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `eval'
/usr/local/lib/ruby/2.6.0/irb/workspace.rb:85:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb/context.rb:385:in `evaluate'
/usr/local/lib/ruby/2.6.0/irb.rb:493:in `block (2 levels) in eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:647:in `signal_status'
/usr/local/lib/ruby/2.6.0/irb.rb:490:in `block in eval_input'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:246:in `block (2 levels) in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `loop'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `catch'
/usr/local/lib/ruby/2.6.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/usr/local/lib/ruby/2.6.0/irb.rb:489:in `eval_input'
/usr/local/lib/ruby/2.6.0/irb.rb:428:in `block in run'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `catch'
/usr/local/lib/ruby/2.6.0/irb.rb:427:in `run'
/usr/local/lib/ruby/2.6.0/irb.rb:383:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:70:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:19:in `start'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands/console/console_command.rb:102:in `perform'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
/usr/local/bundle/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/bundle/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command/base.rb:69:in `perform'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/command.rb:48:in `invoke'
/usr/local/bundle/gems/railties-6.1.4.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.1.4.1/lib/active_support/dependencies.rb:332:in `require'
bin/rails:4:in `<main>'

Please tag @exercism/maintainers-admin if you require more information.

"General Tooling Docker information instructions" link on Docker web page navigates to same page.

Bug description
Clicking on "General Tooling Docker information instructions" link on Docker web page navigates to same page.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Docker page: https://exercism.org/docs/building/tooling/test-runners/docker
  2. Click on "general Tooling docker information"
  3. Same page is refreshed.

Expected behavior
A description about Docker tooling is shown.

Screenshots
obrazek

Expected development cost
Fix a link in MD file. Please advice, what should be correct one.

Clarify use of `x:type` label

The description of each x:type label might not convey the intention. The docs say that it "describes how much Exercism knowledge is required", but the description of each tag begins with "work on", which is the same as the description for x:module.

Should the description for each x:type label instead be something like "requires knowledge of foo"?

I'm making this issue partly to ask: how do we intend an x:type label to be applied to a configlet issue/PR?

Currently the docs contain:

Type tag

The x:type/<value> labels describe how much Exercism knowledge is required by the contributor.

Tag Description
x:type/ci Work on Continuous Integration (e.g. GitHub Actions workflows)
x:type/coding Work on code that will run in production
x:type/content Work on content (e.g. exercises, concepts)
x:type/docker Work on Dockerfiles
x:type/docs Work on Documentation

Considering x:type/content:
A configlet issue might "require knowledge of Exercism content", so the label could match the initial description, but not the per-tag description (it isn't "work on content").

Considering x:type/ci:
Parts of configlet are run in CI, so some configlet issue might be "working on Continuous Integration", but it might not actually "require knowledge of Continuous Integration".


It also seems like there is no x:module tag that can be applied to any configlet issue/PR, just FYI. So it's unclear to me how any configlet issue can show up in tasks, unless filtering just by action/size/knowledge.

Module tag

The x:module/<value> labels indicate what part of Exercism the contributor will be working on.

Tag Description
x:module/analyzer Work on Analyzers
x:module/concept Work on Concepts
x:module/concept-exercise Work on Concept Exercises
x:module/generator Work on Exercise generators
x:module/practice-exercise Work on Practice Exercises
x:module/representer Work on Representers
x:module/test-runner Work on Test Runners

Port docs on design of concepts & concept exercises from v3 repo

The v3 docs contained information on the design of concepts and concept exercises that went beyond the technical spec: https://github.com/exercism/v3/blob/main/docs/concept-exercises.md#how-are-concept-exercises-designed-and-structured

These are currently not available in /docs but are quite useful for people who aren't intimately familiar with the ideas behind v3.

(Mostly creating this issue to make the old docs findable again, @iHiD is already aware that they haven't been ported)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.