diff --git a/building/config.json b/building/config.json index 23fef915..9a2dcee3 100644 --- a/building/config.json +++ b/building/config.json @@ -519,6 +519,13 @@ "title": "Analyzers", "blurb": "" }, + { + "uuid": "48775c5f-b449-4c91-b792-b81a8ef4ec04", + "slug": "tooling/analyzers/feedback-guidelines", + "path": "building/tooling/analyzers/feedback-guidelines.md", + "title": "Feedback Guidelines", + "blurb": "" + }, { "uuid": "787e4243-b97a-4b55-9038-7667e5c3788a", "slug": "tooling/analyzers/comments", diff --git a/building/configlet/README.md b/building/configlet/README.md index e0f8f929..263cbaaa 100644 --- a/building/configlet/README.md +++ b/building/configlet/README.md @@ -4,28 +4,28 @@ ## Linting -The primary function of configlet is to do _linting_: checking if a track's configuration files are properly structured - both syntactically and semantically. Misconfigured tracks may not sync correctly, may look wrong on the website, or may present a suboptimal user experience, so configlet's guards play an important part in maintaining the integrity of Exercism. The full list of rules that are checked by the linter can be found [here](./lint). +The primary function of configlet is to do _linting_: checking if a track's configuration files are properly structured - both syntactically and semantically. Misconfigured tracks may not sync correctly, may look wrong on the website, or may present a suboptimal user experience, so configlet's guards play an important part in maintaining the integrity of Exercism. The full list of rules that are checked by the linter can be found [here](/docs/building/configlet/lint). ## Generating documents The secondary function of configlet is to generate documents. There are two types of documents that configlet can generate: -1. A Concept Exercise's [`introduction.md` file](./generating-documents#document-concept-exercises-introductionmd-file). -1. A Practice Exercise's [`instructions.md` file](./generating-documents#document-practice-exercises-instructionsmd-file). +1. A Concept Exercise's [`introduction.md` file](/docs/building/configlet/generating-documents#document-concept-exercises-introductionmd-file). +1. A Practice Exercise's [`instructions.md` file](/docs/building/configlet/generating-documents#document-practice-exercises-instructionsmd-file). -How these documents are generated can be found [here](./generating-documents). +How these documents are generated can be found [here](/docs/building/configlet/generating-documents). ## Syncing test data -The tertiary function of configlet is to sync test data. Each implemented [Practice Exercise](./tracks/practice-exercises) for which test data exists in the [problem-specifications repo](https://github.com/exercism/problem-specifications) _must_ contain a `.meta/tests.toml` file. The goal of this file is to keep track of which tests are implemented by the exercise. Tests in this file are identified by their UUID and each test has a boolean value that indicates if it is implemented by that exercise. +The tertiary function of configlet is to sync test data. Each implemented [Practice Exercise](/docs/building/tracks/practice-exercises) for which test data exists in the [problem-specifications repo](https://github.com/exercism/problem-specifications) _must_ contain a `.meta/tests.toml` file. The goal of this file is to keep track of which tests are implemented by the exercise. Tests in this file are identified by their UUID and each test has a boolean value that indicates if it is implemented by that exercise. -How to sync the contents of the `.meta/tests.toml` can be found [here](./sync) +How to sync the contents of the `.meta/tests.toml` can be found [here](/docs/building/configlet/sync) ## Generating UUIDs Exercises, tracks and concepts are identified by a UUID. -How to generate UUIDs can be found [here](./uuid). +How to generate UUIDs can be found [here](/docs/building/configlet/uuid). ## Usage diff --git a/building/configlet/generating-documents.md b/building/configlet/generating-documents.md index 62bd27fe..1ad4f614 100644 --- a/building/configlet/generating-documents.md +++ b/building/configlet/generating-documents.md @@ -1,6 +1,6 @@ # Configlet generating documents -The secondary use of [configlet](../) is generating documents. +The secondary use of [configlet](/docs/building/configlet) is generating documents. ## Usage @@ -12,11 +12,11 @@ These are the documents that configlet can generate. ### Document: Concept Exercise's introduction.md file -Each [Concept Exercise](../concept-exercises.md) has an [`introduction.md` file](../concept-exercises.md#docsintroductionmd). Each exercise can have an optional [`introduction.md.tpl` file](../concept-exercises.md#docsintroductionmdtploptional). +Each [Concept Exercise](/docs/building/tracks/concept-exercises) has an [`introduction.md` file](/docs/building/tracks/concept-exercises#docsintroductionmd). Each exercise can have an optional [`introduction.md.tpl` file](/docs/building/tracks/concept-exercises#docsintroductionmdtploptional). The template file should be treated like a regular Markdown file but with one addition: the ability to specify placeholders. The following placeholders are supported: -- `%{concept:}`: refers to the concept's [`introduction.md` document](../concepts.md#fileintroductionmd) +- `%{concept:}`: refers to the concept's [`introduction.md` document](/docs/building/tracks/concepts#fileintroductionmd) When configlet detects that a Concept Exercise has an `introduction.md.tpl` file, it will generate a `introduction.md` file from it. The generated introduction will have the same contents as the template, expect for the placeholders, which will be replaced with the contents of the documents they refer to. diff --git a/building/configlet/lint.md b/building/configlet/lint.md index 1e5b38ce..58c988ed 100644 --- a/building/configlet/lint.md +++ b/building/configlet/lint.md @@ -1,6 +1,6 @@ # Linting -The primary use of [configlet](./) is linting: checking if a track's configuration files are properly structured - both syntactically and semantically. Misconfigured tracks may not sync correctly, may look wrong on the website, or may present a suboptimal user experience, so configlet's guards play an important part in maintaining the integrity of Exercism. +The primary use of [configlet](/docs/building/configlet) is linting: checking if a track's configuration files are properly structured - both syntactically and semantically. Misconfigured tracks may not sync correctly, may look wrong on the website, or may present a suboptimal user experience, so configlet's guards play an important part in maintaining the integrity of Exercism. ## Usage @@ -184,7 +184,7 @@ The `config.json` file should have the following checks: - The `"key_features"` key is optional - The `"key_features"` value must be an array with length = 6 - The `"key_features[].icon"` key is required -- The `"key_features[].icon"` value must use one of the [pre-defined icon values](../tracks/config-json#keyfeatures) +- The `"key_features[].icon"` value must use one of the [pre-defined icon values](/docs/building/tracks/config-json#keyfeatures) - The `"key_features[].title"` key is required - The `"key_features[].title"` value must be a non-blank string¹ with length <= 25 - The `"key_features[].content"` key is required @@ -192,7 +192,7 @@ The `config.json` file should have the following checks: - The `"tags"` key is required - The `"tags"` value must be an array of strings - The `"tags"` values must not have duplicates -- The `"tags"` values must use one of the [pre-defined tag values](../tracks/config-json.md#tags) +- The `"tags"` values must use one of the [pre-defined tag values](/docs/building/tracks/config-json#tags) ### Rule: exercises/concept/<slug>/.meta/config.json is valid @@ -244,24 +244,24 @@ The `config.json` file should have the following checks: ### Rule: exercises/concept/<slug>/.docs/hints.md is valid -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - All headings must be either `## General` or `## X. ` where `X` matches the task number heading in the `instructions.md` - All hints must be specified as Markdown list items - Links must be absolute (relative links are not allowed) ### Rule: exercises/concept/<slug>/.docs/instructions.md is valid -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - All tasks must start with a level two heading that starts with a number followed by a dot: `## 1. Do X` - Links must be absolute (relative links are not allowed) ### Rule: exercises/concept/<slug>/.docs/instructions.md.tpl is valid (if present) -- Each [concept placeholders](../tracks/concept-exercises.md#file-docsintroductionmdtpl)'s concept must match the `"concepts.slug"` property of one of the concepts in the track's `config.json`. +- Each [concept placeholders](/docs/building/tracks/concept-exercises#file-docsintroductionmdtpl)'s concept must match the `"concepts.slug"` property of one of the concepts in the track's `config.json`. ### Rule: exercises/concept/<slug>/.docs/introduction.md is valid -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: exercises/practice/<slug>/.meta/config.json is valid @@ -310,29 +310,29 @@ The `config.json` file should have the following checks: ### Rule: exercises/shared/.docs/debug.md is valid - The file's presence is optional -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: exercises/shared/.docs/help.md is valid - The file's presence is required -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: exercises/shared/.docs/tests.md is valid - The file's presence is required -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: concepts/<slug>/about.md is valid -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: concepts/<slug>/introduction.md is valid -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: concept/<slug>/links.json is valid @@ -368,28 +368,28 @@ The `config.json` file should have the following checks: - The file's presence is required - The file's contents must be non-blank -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: docs/INSTALLATION.md is valid - The file's presence is required - The file's contents must be non-blank -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: docs/LEARNING.md is valid - The file's presence is required - The file's contents must be non-blank -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: docs/RESOURCES.md is valid - The file's presence is required - The file's contents must be non-blank -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ### Rule: docs/SNIPPET.txt is valid @@ -401,7 +401,7 @@ The `config.json` file should have the following checks: - The file's presence is required - The file's contents must be non-blank -- The Markdown must conform to the [Markdown standards](../markdown/markdown.md) +- The Markdown must conform to the [Markdown standards](/docs/building/markdown/markdown) - Links must be absolute (relative links are not allowed) ## Glossary diff --git a/building/configlet/uuid.md b/building/configlet/uuid.md index 138e17ce..4cdf14bd 100644 --- a/building/configlet/uuid.md +++ b/building/configlet/uuid.md @@ -1,6 +1,6 @@ # Generating UUIDs -Exercises, tracks and concepts are identified by a UUID. [configlet](./) can generate new, valid UUIDs. +Exercises, tracks and concepts are identified by a UUID. [configlet](/docs/building/configlet) can generate new, valid UUIDs. ## Usage diff --git a/building/markdown/README.md b/building/markdown/README.md index e69de29b..38bc446c 100644 --- a/building/markdown/README.md +++ b/building/markdown/README.md @@ -0,0 +1,6 @@ +# Markdown + +- [Internal Linking](/docs/building/markdown/internal-linking) +- [Markdown Specification](/docs/building/markdown/markdown) +- [Exercism's Style Guide](/docs/building/markdown/style-guide) +- [Widgets](/docs/building/markdown/widgets) diff --git a/building/markdown/internal-linking.md b/building/markdown/internal-linking.md index e5cde236..f3d6c323 100644 --- a/building/markdown/internal-linking.md +++ b/building/markdown/internal-linking.md @@ -4,7 +4,7 @@ Links rendered via Exercism's Markdown parser are checked to see if they are int A tooltip for a concept might look like this: - + ## Usage @@ -21,4 +21,4 @@ We do not currently support relative URLs (e.g. those beginning with `./` or `.. Rather than using normal links, you might like to render Widgets. These are generally used at the end of a document to suggest extra reading or good exercises to learn something from. -See [the Widgets documentation](./widgets.md) for more details. +See [the Widgets documentation](/docs/building/markdown/widgets) for more details. diff --git a/building/markdown/widgets.md b/building/markdown/widgets.md index cac7ab2f..40e79667 100644 --- a/building/markdown/widgets.md +++ b/building/markdown/widgets.md @@ -3,16 +3,16 @@ Concept and Exercise Widgets are used frequently throughout the site. They look like this: - - + + They also have user-contextual tooltips such as this: - + You may like to render these widgets yourself in Markdown documents, for example at the end of a document to suggest extra reading or good exercises to learn something from. -**Note:** You can also use normal links for inline text, which will have the tooltips added. See [the Internal Linking documentation](./internal-linking.md) for more details. +**Note:** You can also use normal links for inline text, which will have the tooltips added. See [the Internal Linking documentation](/docs/building/markdown/internal-linking) for more details. ## Usage diff --git a/building/tooling/README.md b/building/tooling/README.md index 88e89e19..3fbeb749 100644 --- a/building/tooling/README.md +++ b/building/tooling/README.md @@ -9,6 +9,6 @@ All tooling is deployed using the same Docker workflow. There are currently three pieces of tooling: -- **[Test Runners](./test-runners)** -- **[Representers](./representers)** -- **[Analyzers](./analyzers)** +- **[Test Runners](/docs/building/tooling/test-runners)** +- **[Representers](/docs/building/tooling/representers)** +- **[Analyzers](/docs/building/tooling/analyzers)** diff --git a/building/tooling/analyzers/README.md b/building/tooling/analyzers/README.md index e9358678..b9a566fa 100644 --- a/building/tooling/analyzers/README.md +++ b/building/tooling/analyzers/README.md @@ -11,10 +11,10 @@ Each Analyzer lives in the Exercism GitHub organization in a repository named `$ You can explore the different Analyzers [here](https://github.com/exercism?q=-analyzer). If you would like to get involved in helping with an existing Analyzer, please open an issue in its repository asking if there is somewhere you can help. -If you would like to create an Analyzer for a language that currently does not have one, please follow the [creating a Analyzer](creating-from-scratch.md) instructions. +If you would like to create an Analyzer for a language that currently does not have one, please follow the [creating a Analyzer](/docs/building/tooling/analyzers/creating-from-scratch) instructions. -This directory contains the following information: +You can use the following documents to learn more about building an analyzer: -- **[`creating-from-scratch.md`](./creating-from-scratch.md):** Information on creating a Analyzer from scratch. -- **[`interface.md`](./interface.md):** The Analyzer interface. -- **[`docker.md`](./docker.md):** How to build a Docker image with Docker for local testing and deployment. +- [Creating a Analyzer from scratch](/docs/building/tooling/analyzers/creating-from-scratch) +- [The Analyzer interface.](/docs/building/tooling/analyzers/interface) +- [How to build a Docker image with Docker for local testing and deployment](/docs/building/tooling/analyzers/docker) diff --git a/building/tooling/analyzers/comments.md b/building/tooling/analyzers/comments.md index de13e3df..6c109a0d 100644 --- a/building/tooling/analyzers/comments.md +++ b/building/tooling/analyzers/comments.md @@ -5,7 +5,7 @@ # Comment Copy Guidelines This document sets guidelines for the comments produced by the analyzer. The -[Feedback guidelines][git-feedback-guidelines] talk about _when_ to comment and +[Feedback guidelines](/docs/building/tooling/analyzers/feedback-guidelines) talk about _when_ to comment and _what_ to comment. This document talks mostly about _how_ to comment. ## Working directory for contents @@ -138,4 +138,3 @@ custom errors might be interesting. [git-website-copy]: https://github.com/exercism/website-copy/tree/main/automated-comments [issue-ci-comments]: https://github.com/exercism/automated-mentoring-support/issues/51 [git-website-copy-label]: https://github.com/exercism/website-copy/pulls?q=is%3Aopen+is%3Apr+label%3Atype%2Fanalyzer-comments -[git-feedback-guidelines]: https://github.com/exercism/automated-mentoring-support/blob/main/docs/guidelines.md#idiomatic-rules--language-features--stylistic-choices diff --git a/building/tooling/analyzers/creating-from-scratch.md b/building/tooling/analyzers/creating-from-scratch.md index 97f207da..485f55d7 100644 --- a/building/tooling/analyzers/creating-from-scratch.md +++ b/building/tooling/analyzers/creating-from-scratch.md @@ -5,7 +5,7 @@ Firstly, thank you for your interest in creating an Analyzer! These are the steps to get going: 1. Check [our repository list for an existing `...-analyzer`](https://github.com/exercism?q=-analyzer) to ensure that one doesn't already exist. -2. Scan the [contents of this directory](./) to ensure you are comfortable with the idea of creating an Analyzer. +2. Scan the [contents of this directory](/docs/building/tooling/analyzers) to ensure you are comfortable with the idea of creating an Analyzer. 3. Open an issue at [exercism/exercism][exercism-repo] introducing yourself and telling us which language you'd like to create a Analyzer for. We have an incredibly friendly and supportive community who will be happy to help you as you work through this! If you get stuck, please speak to us on Slack or create new issues at [exercism/exercism][exercism-repo] as needed 🙂 diff --git a/building/tooling/analyzers/docker.md b/building/tooling/analyzers/docker.md index 19e92867..c6872b83 100644 --- a/building/tooling/analyzers/docker.md +++ b/building/tooling/analyzers/docker.md @@ -2,7 +2,7 @@ Our Analyzers are deployed as Docker images. -Please read the [general Tooling docker information](../docker.md) to familiarize yourself with how these work. +Please read the [general Tooling docker information](/docs/building/tooling/analyzers/docker) to familiarize yourself with how these work. When we run the Analyzer's container we execute a `run.sh` script. To ensure this works properly the following rules must be following: @@ -10,4 +10,4 @@ To ensure this works properly the following rules must be following: - The working directory should be `/opt/analyzer`. - There should be a `/opt/analyzer/bin/run.sh` script that can be called with 3 parameters: the `exercise slug`, the path to the `solution folder`, and the path to the `output folder`. - For more information see [The Interface](./interface.md). + For more information see [The Interface](/docs/building/tooling/analyzers/interface). diff --git a/building/tooling/analyzers/feedback-guidelines.md b/building/tooling/analyzers/feedback-guidelines.md new file mode 100644 index 00000000..35a27fd6 --- /dev/null +++ b/building/tooling/analyzers/feedback-guidelines.md @@ -0,0 +1,143 @@ +_NOTE: This spec is currently being updated._ + +# Feedback guidelines + +The goal of a language track on Exercism is to give people a way to achieve a +high level of fluency at a low level of proficiency. We're aiming for fluency +in the syntax, idioms, and the standard library of the language. You can read +more about the [goal of exercism here](https://github.com/exercism/docs/blob/master/about/goal-of-exercism.md). + +## Definitions + +In the following paragraphs, keywords such as **MUST**, **SHOULD**, **MAY** +are to be interpreted as in [RFC2119](https://www.ietf.org/rfc/rfc2119.txt); +given that we recognise the following four output states and their restrictions: + +- `approve`: **MUST** be an approvable solution, **MAY** be with comment. +- `disapprove`: **MUST** be with comment +- `refer_to_mentor`: **MAY** be with comment + +### Why is it not ... (e.g. **MUST**)? + +Per [RFC2119](https://www.ietf.org/rfc/rfc2119.txt), if **MUST** is used, it is +a guarantee that the rule is always so, and does not need to be guarded for. For +example, **MUST** be without comment means that the website could crash if an +analyzer sends a comment anyway. **SHOULD** indicates any consumer of the output +must still guard against unwanted behaviour. + +### Approvability + +A solution is approvable if it either matches the (set of) optimal solution(s) +of that exercise, or if it shows understanding of the teaching goals of that +exercise and every _core_ exercise that came before. This means that an +analyzer **MAY** approve a solution but still provide a set of comments as tips +relating to the exercise or further improvements. + +### Idiomatic rules / Language features / Stylistic choices + +In this document, **de facto** is defined as follows: + +- **de facto**: describes practices that exist in reality, even if not + officially recognized by laws. +- **de facto standard**: a custom or convention that has achieved a dominant + position by public acceptance or market forces. Unofficial customs that are + widely accepted. + +In other words, if a nearly all developers (non-hobyists) who write code in a +certain language have established certain rules, these rules are a **de facto +standard** and become idiomatic use. Example: **Ruby** uses 2 space identation. + +Some rules are language features, even if they are not documented well. These +language features are part of "idiomatic rules" and not stylistic choices. +Example: **Ruby**'s MRI treats variables named `_` differently. + +Finally there are rules that are pure preferences, even though they might be +adopted by large bodies such as organisations and corporations. These rules +are usually part of _competing_ standards. Exercism does not favour one over +another. Example: **TypeScript** has a linter `tslint` (or `eslint` + plugin) +which is maintained by a company that is not Microsoft. It competes with other +linters such as `xo`. Most of the rules are not language features or idiomatic +rules, and therefore stylistic choices. + +## Conditions and outcome + +For feedback generated by automated mentoring: + +- it **SHOULD** `disapprove` when someone isn't using one of the + subjects the exercise is supposed to teach, +- each `disapprove` **MUST** have at least one comment, +- each `disapprove` **SHOULD** steer a student towards an `approve`, +- the analyzer **SHOULD** aim to teach a pathway, which means a student + **SHOULD NOT** get a `refer_to_mentor` in a newer iteration, after a + `disapprove`, given they follow that pathway. +- a `refer_to_mentor` **MAY** have one or more comments which will be given to + the mentor, +- the same comment **MUST** not be added twice in one analysis. Adding the same + comment with different parameters attached to it is not considered a duplicate. +- comments **SHOULD** be ordered by importance (the first comment being the most + important, and the last comment being the least important). + +It is currently undecided as to whether there is a minimum or maximum amount of +:speech_balloon: comments. However, each comment **SHOULD** be aiding the +student towards an approvable solution. Our recommendation is currently to aim +for one to three comments per iteration. + +## Approvability + +Given the above, and to re-iterate that we focus on language fluency: + +### Incorrect Naming or Casing + +In general, if it's a _language feature_ that will be caught by a compiler or +parser or based on official rules (which means there is a dependency on +correctness in tools), you should `disapprove`, preferably linking +to the official rules. + +> - :-1: disapprove if there are official guidelines on naming conventions +> - :speech_balloon: leave a comment if there is something noteworthy +> - :no*bell: if its a \_stylistic* preference, **and** there are _competing +> standards_, do not remark at all. Since there are competing standards, +> they're all preferences. +> - :speech*balloon: if it's a \_stylistic* preference, **and** there is _one +> clear standard_, comment on it. These rules enforce idiomatic code. +> - :question: If it's a _stylistic_ preference, **and** there is no clear +> standard, but most to all non-hobyist have adopted the same style, this +> might be idiomatic. Comment at your discretion. + +#### Examples + +- **Ruby** has a language feature where `_` is treated differently, + - :-1: if a student uses `_` for a variable name, but then uses it. +- **Ruby** recognises `constants` only if they start with a **C**apital Letter, + - :-1: if a student uses `snake_case` for a `class` name +- **Ruby** has _de facto_ standards on `cAsInG` and `name-ing`, + - :speech_balloon: you **SHOULD** guide students that `snake_case` is to be + expected by most IDEs and highlighting on exercism in code blocks. +- **JavaScript** IDEs highlight variables which are not used, except for those + prefixed with an underscore (`_`). + - :speech*balloon: note that this behaviour exist so it might help them to use + a different naming strategy. They might think that prefixing with `*`means `private`, which is not the case in JavaScript. +- **TypeScript** has a _de facto_ standard lint tool provided by Palantir, + - :no_bell: If a student does not follow these rules as the lint tool is not + official. In fact, there are multiple linters out there, with mutually + exclusive rules. +- **Go** has very strict rules around naming and other linting. + - :-1: if the student does not follow these (e.g. has not applied `golint`) +- **Go** has very strict rules around formatting. + - :-1: if the student does not follow these (e.g. has not applied `gofmt`) + +### Badly formatted code + +The same rules apply as above. In general, if `linting` and a specific format is +not part of the official language, and/or not integral to the language: + +- :no_bell: **SHOULD NOT** disapprove on it +- :speech_balloon: You **MAY** guide students towards tools for auto-formatting + +# Running guidelines + +Each solution gets 100% machine resources for a ten second window. + +## Maximum runtime + +After 10 seconds, the process is halted and reports as a time-out. diff --git a/building/tooling/analyzers/interface.md b/building/tooling/analyzers/interface.md index 54276036..ec6575cb 100644 --- a/building/tooling/analyzers/interface.md +++ b/building/tooling/analyzers/interface.md @@ -4,7 +4,7 @@ All interactions with the Exercism website are handled automatically. Analyzers ## Execution -- An Analyzer should provide an executable script. You can find more information in the [docker.md](../docker.md) file. +- An Analyzer should provide an executable script. You can find more information in the [docker.md](/docs/building/tooling/analyzers/docker) file. - The script will receive three parameters: - The slug of the exercise (e.g. `two-fer`). - A path to a directory containing the submitted file(s) (with a trailing slash). diff --git a/building/tooling/representers/README.md b/building/tooling/representers/README.md index ce9c6fd1..e669142c 100644 --- a/building/tooling/representers/README.md +++ b/building/tooling/representers/README.md @@ -14,7 +14,7 @@ A _Representer_ is a bit of code that has the single responsibility of taking a A _representation_ is an extraction of a solution to its essence with normalized names, comments, spacing, etc. but still uniquely identifying the approach taken. Two different ways of solving the same exercise must not have the same representation. The simplest Representer is one that merely returns the solution's source code. -However, as our goal is to have the same representation for solutions only differing in non-essential details, the Representer should apply one or more [normalizations](./normalization.md). +However, as our goal is to have the same representation for solutions only differing in non-essential details, the Representer should apply one or more [normalizations](/docs/building/tooling/representers/normalization). Once we have a normalized representation for a solution, a team of vetted mentors will look at the solution and comment on it (if needed). These comments will then automatically be submitted to each new solution with the same representation. @@ -29,11 +29,11 @@ Each representer lives in the Exercism GitHub organization in a repository named You can explore the different representers [here](https://github.com/exercism?q=-representer). If you would like to get involved in helping with an existing Representer, please open an issue in its repository asking if there is somewhere you can help. -If you would like to create a Representer for a language that currently does not have one, please follow the [creating a Representer](creating-from-scratch.md) instructions. +If you would like to create a Representer for a language that currently does not have one, please follow the [creating a Representer](/docs/building/tooling/representers/creating-from-scratch) instructions. -This directory contains the following information: +You can use the following documents to learn more about building a representer: -- **[`creating-from-scratch.md`](./creating-from-scratch.md):** Information on creating a Representer from scratch. -- **[`interface.md`](./interface.md):** The Representer interface. -- **[`normalization.md`](./normalization.md):** Information on how to normalize representations for the highest efficiency. -- **[`docker.md`](./docker.md):** How to build a Docker image with Docker for local testing and deployment. +- [Creating a Representer from scratch](/docs/building/tooling/representers/creating-from-scratch) +- [The Representer interface](/docs/building/tooling/representers/interface) +- [How to normalize representations for the highest efficiency](/docs/building/tooling/representers/normalization) +- [How to build a Docker image with Docker for local testing and deployment](/docs/building/tooling/representers/docker) diff --git a/building/tooling/representers/creating-from-scratch.md b/building/tooling/representers/creating-from-scratch.md index 9871fb5c..8e9fdf64 100644 --- a/building/tooling/representers/creating-from-scratch.md +++ b/building/tooling/representers/creating-from-scratch.md @@ -5,7 +5,7 @@ Firstly, thank you for your interest in creating a Representer! These are the steps to get going: 1. Check [our repository list for an existing `...-representer`](https://github.com/exercism?q=-representer) to ensure that one doesn't already exist. -2. Scan the [contents of this directory](./) to ensure you are comfortable with the idea of creating an Representer. +2. Scan the [contents of this directory](/docs/building/tooling/representers) to ensure you are comfortable with the idea of creating an Representer. 3. Open an issue at [exercism/exercism][exercism-repo] introducing yourself and telling us which language you'd like to create a Representer for. We have an incredibly friendly and supportive community who will be happy to help you as you work through this! If you get stuck, please speak to us on Slack or create new issues at [exercism/exercism][exercism-repo] as needed 🙂 diff --git a/building/tooling/representers/docker.md b/building/tooling/representers/docker.md index 7e06fc29..92af5ac5 100644 --- a/building/tooling/representers/docker.md +++ b/building/tooling/representers/docker.md @@ -2,7 +2,7 @@ Our Representers are deployed as Docker images. -Please read the [general Tooling docker information](../docker.md) to familiarize yourself with how these work. +Please read the [general Tooling docker information](/docs/building/tooling/representers/docker) to familiarize yourself with how these work. When we run the Representer's container we execute a `run.sh` script. To ensure this works properly the following rules must be following: @@ -10,4 +10,4 @@ To ensure this works properly the following rules must be following: - The working directory should be `/opt/representer`. - There should be a `/opt/representer/bin/run.sh` script that can be called with 3 parameters: the `exercise slug`, the path to the `solution folder`, and the path to the `output folder`. - For more information see [The Interface](./interface.md). + For more information see [The Interface](/docs/building/tooling/representers/interface). diff --git a/building/tooling/representers/interface.md b/building/tooling/representers/interface.md index 1f31ff6c..127d9afc 100644 --- a/building/tooling/representers/interface.md +++ b/building/tooling/representers/interface.md @@ -1,10 +1,10 @@ # The Representer Interface -All interactions with the Exercism website are handled automatically. Representers have the single responsibility of taking a solution and returning a representation of it. See the [introduction](./introduction.md) for more information. +All interactions with the Exercism website are handled automatically. Representers have the single responsibility of taking a solution and returning a representation of it. See the [introduction](/docs/building/tooling/representers#introduction) for more information. ## Execution -- A Representer should provide an executable script. You can find more information in the [docker.md](../docker.md) file. +- A Representer should provide an executable script. You can find more information in the [docker.md](/docs/building/tooling/representers/docker) file. - The script will receive three parameters: - The slug of the exercise (e.g. `two-fer`). - A path to a directory containing the submitted file(s) (with a trailing slash). diff --git a/building/tooling/representers/normalization.md b/building/tooling/representers/normalization.md index 30647b51..ef9cafcf 100644 --- a/building/tooling/representers/normalization.md +++ b/building/tooling/representers/normalization.md @@ -5,7 +5,7 @@ To have solutions with non-essential differences have the same representation, t - Parse the solution's code into an Abstract Syntax Tree (AST) - Apply normalizations to the AST - Convert the normalized AST to a string -- Write the normalized AST string to a file named `representation.txt` (see [the interface](./interface)) +- Write the normalized AST string to a file named `representation.txt` (see [the interface](/docs/building/tooling/representers/interface)) Note though, that the representation doesn't _have_ to be an AST, it could be regular (normalized) code, whichever works best for your track. @@ -17,7 +17,7 @@ Note 2: the code for these guidelines will be in C#, but the guidelines are lang ## Normalize identifiers -To allow for representations to be naming-agnostic, user-defined names (such as variables, functions, etc) can be replaced with placeholders. In this case, a `mapping.json` should be produced (see [the interface](./interface.md)). +To allow for representations to be naming-agnostic, user-defined names (such as variables, functions, etc) can be replaced with placeholders. In this case, a `mapping.json` should be produced (see [the interface](/docs/building/tooling/representers/interface)). It is important to note that all identical names must be replaced with the same placeholder, irrespective of scope. diff --git a/building/tooling/test-runners/README.md b/building/tooling/test-runners/README.md index 86118ac9..43983122 100644 --- a/building/tooling/test-runners/README.md +++ b/building/tooling/test-runners/README.md @@ -18,8 +18,8 @@ You can explore the different Test Runners [here](https://github.com/exercism?q= If you would like to get involved in helping with an existing Test Runner, please open an issue in its repository asking if there is somewhere you can help. If you would like to create a Test Runner for a language that currently does not have one, please follow the [creating a Test Runner](creating-from-scratch.md) instructions. -This directory contains the following information: +You can use the following documents to learn more about building a test runner: -- **[`creating-from-scratch.md`](./creating-from-scratch.md):** Information on creating a Test Runner from scratch. -- **[`interface.md`](./interface.md):** The Test Runner interface. -- **[`docker.md`](./docker.md):** How to build a Docker image with Docker for local testing and deployment. +- [creating a Test Runner from scratch](/docs/building/tooling/test-runners/creating-from-scratch) +- [The Test Runner interface](/docs/building/tooling/test-runners/interface) +- [How to build a Docker image with Docker for local testing and deployment](/docs/building/tooling/test-runners/docker) diff --git a/building/tooling/test-runners/creating-from-scratch.md b/building/tooling/test-runners/creating-from-scratch.md index 7a407e4c..896df8e6 100644 --- a/building/tooling/test-runners/creating-from-scratch.md +++ b/building/tooling/test-runners/creating-from-scratch.md @@ -5,7 +5,7 @@ Firstly, thank you for your interest in creating a Test Runner! These are the steps to get going: 1. Check [our repository list for an existing `...-test-runner`](https://github.com/exercism?q=-test-runner) to ensure that one doesn't already exist. -2. Scan the [contents of this directory](./) to ensure you are comfortable with the idea of creating an Test Runner. +2. Scan the [contents of this directory](/docs/building/tooling/test-runners) to ensure you are comfortable with the idea of creating an Test Runner. 3. Open an issue at [exercism/exercism][exercism-repo] introducing yourself and telling us which language you'd like to create a Test Runner for. We have an incredibly friendly and supportive community who will be happy to help you as you work through this! If you get stuck, please speak to us on Slack or create new issues at [exercism/exercism][exercism-repo] as needed 🙂 diff --git a/building/tooling/test-runners/docker.md b/building/tooling/test-runners/docker.md index 31734cc0..48eaadf3 100644 --- a/building/tooling/test-runners/docker.md +++ b/building/tooling/test-runners/docker.md @@ -2,7 +2,7 @@ Our Test Runners are deployed as Docker images. -Please read the [general Tooling docker information](../docker.md) to familiarize yourself with how these work. +Please read the [general Tooling docker information](/docs/building/tooling/test-runners/docker) to familiarize yourself with how these work. When we run the Test Runner's container we execute a `run.sh` script. To ensure this works properly the following rules must be following: @@ -10,4 +10,4 @@ To ensure this works properly the following rules must be following: - The working directory should be `/opt/test-runner`. - There should be a `/opt/test-runner/bin/run.sh` script that can be called with 3 parameters: the `exercise slug`, the path to the `solution folder`, and the path to the `output folder`. - For more information see [The Interface](./interface.md). + For more information see [The Interface](/docs/building/tooling/test-runners/interface). diff --git a/building/tooling/test-runners/interface.md b/building/tooling/test-runners/interface.md index 36eb8880..a771b601 100644 --- a/building/tooling/test-runners/interface.md +++ b/building/tooling/test-runners/interface.md @@ -5,7 +5,7 @@ All interactions with the Exercism website are handled automatically and are not ## Execution -- A Test Runner should provide an executable script. You can find more information in the [docker.md](./docker.md) file. +- A Test Runner should provide an executable script. You can find more information in the [docker.md](/docs/building/tooling/test-runners/docker) file. - The script will receive three parameters: - The slug of the exercise (e.g. `two-fer`). - A path to an input directory (with a trailing slash) containing the submitted solution file(s) and any other exercise file(s). This directory should be considered as read-only. It's technically possible to write into it but it's better to use `/tmp` for temporary files (e.g. for compiling sources). @@ -154,7 +154,7 @@ At the moment, only Concept Exercises have well-defined tasks that you can link For example, consider the following `instructions.md` file: -```` +``` # Instructions You're going to write some code to help Lucian cook an exquisite lasagna from his favorite cook book. @@ -166,7 +166,7 @@ You're going to write some code to help Lucian cook an exquisite lasagna from hi ## 2. Calculate the remaining oven time in minutes ... -```` +``` These instructions defined two tasks: diff --git a/building/tracks/README.md b/building/tracks/README.md index 364fc83b..e6bd4128 100644 --- a/building/tracks/README.md +++ b/building/tracks/README.md @@ -4,22 +4,22 @@ A track consists of many different parts. ## Metadata -The track's configuration and metadata are specified in the `config.json` file. It lists the track's exercises, concepts, editor settings, and much more. Checkout the [config.json documentation](./config-json.md). +The track's configuration and metadata are specified in the `config.json` file. It lists the track's exercises, concepts, editor settings, and much more. Checkout the [config.json documentation](/docs/building/tracks/config-json). ## Concepts -All concept and practices exercises of a track involve _concepts_. These concepts are separate entities by themselves. Check the [documentation](./concepts.md) for more information. +All concept and practices exercises of a track involve _concepts_. These concepts are separate entities by themselves. Check the [documentation](/docs/building/tracks/concepts) for more information. ## Exercises Tracks have two types of exercises: -- Concept exercises: they are designed to teach one or more concepts to a student. Check the [documentation](./concept-exercises.md) for more information. -- Practice exercise: they are designed to practice learned concepts. Check the [documentation](./practice-exercises.md) for more information. +- Concept exercises: they are designed to teach one or more concepts to a student. Check the [documentation](/docs/building/tracks/concept-exercises) for more information. +- Practice exercise: they are designed to practice learned concepts. Check the [documentation](/docs/building/tracks/practice-exercises) for more information. ## Shared files -Some files are not specific to individual exercises, but are instead applicable to _all_ exercises. Check the [documentation](./shared-files.md) for more information. +Some files are not specific to individual exercises, but are instead applicable to _all_ exercises. Check the [documentation](/docs/building/tracks/shared-files) for more information. ## Config @@ -31,11 +31,12 @@ TODO: describe the `docs` directory's contents ## Widgets -Some parts of the track can be displayed in [widgets](./widgets.md), such as [concepts](./widgets.md#conceptwidget) and [exercises](./widgets.md#exercisewidget). +Some parts of the track can be displayed in [widgets](/docs/building/markdown/widgets). ## Style guide -All documents should adhere to the [style guide](../../building/markdown/style-guide.md). Markdown documents should also adhere to our [Markdown standards](../../building/markdown/markdown.md). +All documents should adhere to the [style guide](/docs/building/markdown/style-guide). Markdown documents +should also adhere to our [Markdown standards](/docs/building/markdown/markdown). ## Example @@ -77,5 +78,5 @@ csharp | ├── debug.md | ├── help.md | └── tests.md -└── [config.json](./config-json.md) +└── [config.json](/docs/building/tracks) diff --git a/building/tracks/concept-exercises.md b/building/tracks/concept-exercises.md index 5b1cfe75..bdd4f181 100644 --- a/building/tracks/concept-exercises.md +++ b/building/tracks/concept-exercises.md @@ -4,7 +4,7 @@ ## Metadata -Concept Exercise metadata is defined in the `exercises.concept` key in the [config.json file](./config-json.md#concept-exercises). The metadata defines the exercise's UUID, slug and more. +Concept Exercise metadata is defined in the `exercises.concept` key in the [config.json file](/docs/building/tracks/config-json#concept-exercises). The metadata defines the exercise's UUID, slug and more. ### Example @@ -26,7 +26,7 @@ Concept Exercise metadata is defined in the `exercises.concept` key in the [conf ## Files -Each Concept Exercise has its own directory within the track's `exercises/concept` directory. The name of the Concept Exercise directory must match the `slug` property of the Concept Exercise, as defined in the [config.json file](./config-json.md#concept-exercises). +Each Concept Exercise has its own directory within the track's `exercises/concept` directory. The name of the Concept Exercise directory must match the `slug` property of the Concept Exercise, as defined in the [config.json file](/docs/building/tracks/config-json#concept-exercises). A Concept Exercise has three types of files: @@ -124,11 +124,11 @@ my_first_variable = SomeComplexObject.new **Presence:** Optional -The `introduction.md` document introduces the exercise's concept(s) to the student. Each concept also has its _own_ [`introduction.md` document](./concepts#fileintroductionmd), which is not shown outside the context of an exercise. +The `introduction.md` document introduces the exercise's concept(s) to the student. Each concept also has its _own_ [`introduction.md` document](/docs/building/tracks/concepts#fileintroduction), which is not shown outside the context of an exercise. If the concept's introduction should be included verbatim in the exercise's introduction, an `introduction.md.tpl` file can be used. This file allows referring to concept introductions through placeholders: `%{concept:}`. -[configlet](./configlet/generating.md) can generate an `introduction.md` file from a template file. The generated file will have the concept placeholders replaced by the concept's `introduction.md` contents. +[configlet](/docs/building/configlet/generating-documents) can generate an `introduction.md` file from a template file. The generated file will have the concept placeholders replaced by the concept's `introduction` contents. The Exercism website only knows about the `introduction.md` document. It is the track's responsibility to generate the `introduction.md` when a template file is used. @@ -451,7 +451,7 @@ Some languages require additional files for the tests to run. Example of these a ## Shared files -Some files are not specific to individual exercises, but are instead applicable to _all_ exercises. Check the [documentation](./shared-files.md) for more information. +Some files are not specific to individual exercises, but are instead applicable to _all_ exercises. Check the [documentation](/docs/building/tracks/shared-files) for more information. ## Naming @@ -493,6 +493,6 @@ Disallowed slugs: ## Presentation -There is a difference in how exercise documentation is presented to the student when using the in-browser editor versus using the CLI. See [this document](./presentation.md) for more information. +There is a difference in how exercise documentation is presented to the student when using the in-browser editor versus using the CLI. See [this document](/docs/building/tracks/presentation) for more information. [kebab-case]: https://en.wiktionary.org/wiki/kebab_case diff --git a/building/tracks/concepts.md b/building/tracks/concepts.md index 7f23c20f..2c7a153f 100644 --- a/building/tracks/concepts.md +++ b/building/tracks/concepts.md @@ -4,7 +4,7 @@ Concepts are the things that a programmer would need to understand to be fluent ## Metadata -Concept metadata is defined in the `concepts` key in the [config.json file](./config-json.md#concepts). The metadata defines the concept's UUID, slug and more. +Concept metadata is defined in the `concepts` key in the [config.json file](/docs/building/tracks/config-json#concepts). The metadata defines the concept's UUID, slug and more. ### Example @@ -22,7 +22,7 @@ Concept metadata is defined in the `concepts` key in the [config.json file](./co ## Files -Each concept has its own directory within the track's `concepts` directory. The name of the concept's directory must match the `slug` property of the concept, as defined in the [config.json file](./config-json.md#concept). +Each concept has its own directory within the track's `concepts` directory. The name of the concept's directory must match the `slug` property of the concept, as defined in the [config.json file](/docs/building/tracks/config-json#concept). A Concept has two types of files: @@ -58,11 +58,11 @@ concepts **Presence:** Required -After completing the corresponding Concept Exercise (otherwise known as "learning" a Concept), the Concept page will show the contents of the `about.md` file instead of the `introduction.md` file. The `about.md` file should provide students with comprehensive information on what they need to know to be fluent in the concept. At a minimum, this file should contain all information that is introduced in the Concepts' [`introduction.md` document](./concepts.md#file-introductionmd). +After completing the corresponding Concept Exercise (otherwise known as "learning" a Concept), the Concept page will show the contents of the `about.md` file instead of the `introduction.md` file. The `about.md` file should provide students with comprehensive information on what they need to know to be fluent in the concept. At a minimum, this file should contain all information that is introduced in the Concepts' [`introduction.md` document](/docs/building/tracks/concepts#file-introduction). If the Concept introduces new syntax, syntax samples should be included. The student should not have to follow a lot of links to gain the knowledge that the file tries to convey. Instead the `about.md` should contain enough information to be understandable within its context. -The `about.md` file is not limited to the scope of the corresponding Concept Exercise. The content can require knowledge of other concepts that will be introduced later on. If other Concepts are mentioned, their respective introductions should be linked to (see [internal linking](https://github.com/exercism/docs/blob/main/anatomy/tracks/internal-linking.md) for details). +The `about.md` file is not limited to the scope of the corresponding Concept Exercise. The content can require knowledge of other concepts that will be introduced later on. If other Concepts are mentioned, their respective introductions should be linked to (see [internal linking](/docs/building/markdown/internal-linking) for details). Here some examples of what could be covered. diff --git a/building/tracks/config-json.md b/building/tracks/config-json.md index 052cc143..6eafaaf1 100644 --- a/building/tracks/config-json.md +++ b/building/tracks/config-json.md @@ -16,10 +16,10 @@ The following top-level properties contain general track metadata: - `indent_size`: the indentation size as an integer (e.g. `4`) (required) - `highlightjs_language`: the language identifier for Highlight.js (see the [full list of identifiers](https://github.com/highlightjs/highlight.js/blob/main/SUPPORTED_LANGUAGES.md)) (required) - `status`: an object describing which v3 features should be enabled: (required) - - `concept_exercises`: a `boolean` value indicating if [Concept Exercises](./concept-exercises.md) have been built (required) - - `test_runner`: a `boolean` value indicating if a [test runner](../track-tooling/test-runners/README.md) has been implemented (required) - - `representer`: a `boolean` value indicating if a [representer](../track-tooling/representers/README.md) has been implemented (required) - - `analyzer`: a `boolean` value indicating if an [analyzer](../track-tooling/analyzers/README.md) has been implemented (required) + - `concept_exercises`: a `boolean` value indicating if [Concept Exercises](/docs/building/tracks/concept-exercises) have been built (required) + - `test_runner`: a `boolean` value indicating if a [test runner](/docs/building/tooling/test-runners) has been implemented (required) + - `representer`: a `boolean` value indicating if a [representer](/docs/building/tooling/representers) has been implemented (required) + - `analyzer`: a `boolean` value indicating if an [analyzer](/docs/building/tooling/analyzers) has been implemented (required) - `files`: The patterns for the locations of the files used in an exercise, relative to the exercise's directory. (optional) - `solution`: stub implementation file(s) pattern (optional) - `test`: test file(s) pattern (optional) @@ -31,7 +31,7 @@ The following top-level properties contain general track metadata: ### Files -This key is used to specify track-wide file locations. Rather than maintainers having to manually set the `files` key in the _exercises_' `config.json` files, support will be added to [configlet](./README.md) to use these track-wide patterns to automatically populate the exercises' `files` key. +This key is used to specify track-wide file locations. Rather than maintainers having to manually set the `files` key in the _exercises_' `config.json` files, support will be added to [configlet](/docs/building/configlet) to use these track-wide patterns to automatically populate the exercises' `files` key. The file patterns defined in the `files` object support the following placeholders: @@ -40,7 +40,7 @@ The file patterns defined in the `files` object support the following placeholde - `%{camel_slug}`: the `camelCase` exercise slug (e.g. `bitManipulation`) - `%{pascal_slug}`: the `PascalCase` exercise slug (e.g. `BitManipulation`) -Support will be added to [configlet](./README.md) to use these pattern to populate the `files` key in an exercise's `.meta/config.json` file. +Support will be added to [configlet](/docs/building/configlet) to use these pattern to populate the `files` key in an exercise's `.meta/config.json` file. ### Example @@ -97,7 +97,7 @@ The following fields make up a concept exercise: - `wip`: A work-in-progress exercise not ready for public consumption. Exercises with this tag will not be shown to students on the UI or be used for unlocking logic. They may appear for maintainers. - `beta`: This signifies active exercises that are new and which we would like feedback on. We show a beta label on the site for these exercise, with a Call To Action of "Please give us feedback." - `active`: The normal state of active exercises - - `deprecated`: Exercises that are no longer shown to students who have not started them (not usable at this stage). See [Deprecated Exercises](./deprecated-exercises) for more information. + - `deprecated`: Exercises that are no longer shown to students who have not started them (not usable at this stage). See [Deprecated Exercises](/docs/building/tracks/deprecated-exercises) for more information. #### Example @@ -199,7 +199,7 @@ The "Recommended Order" of the Practice Exercises on the website corresponds wit ### Foregone exercises -If a track knows that it doesn't want to implement an exercise defined in the [Problem Specifications repo](https://github.com/exercism/problem-specifications), the slug of that exercise can be added to the `exercises.foregone` key. [configlet](./configlet/README.md) will ignore foregone exercises when outputting the track's unimplemented exercises. +If a track knows that it doesn't want to implement an exercise defined in the [Problem Specifications repo](https://github.com/exercism/problem-specifications), the slug of that exercise can be added to the `exercises.foregone` key. [configlet](/docs/building/configlet) will ignore foregone exercises when outputting the track's unimplemented exercises. Reasons for why an track might _not_ want to implement an exercise could be: diff --git a/building/tracks/practice-exercises.md b/building/tracks/practice-exercises.md index f34fb79e..70ce5a77 100644 --- a/building/tracks/practice-exercises.md +++ b/building/tracks/practice-exercises.md @@ -4,7 +4,7 @@ ## Metadata -Practice Exercise metadata is defined in the `exercises.practice` key in the [config.json file](./config-json.md#practice-exercises). The metadata defines the exercise's UUID, slug and more. +Practice Exercise metadata is defined in the `exercises.practice` key in the [config.json file](/docs/building/tracks#practice-exercises). The metadata defines the exercise's UUID, slug and more. ### Example @@ -44,7 +44,7 @@ The `prerequisites` key lists the Concepts that a student must have completed in ## Files -Each Practice Exercise has its own directory within the track's `exercises/practice` directory. The name of the Practice Exercise directory must match the `slug` property of the Practice Exercise, as defined in the [config.json file](./config-json.md#concept-exercises). +Each Practice Exercise has its own directory within the track's `exercises/practice` directory. The name of the Practice Exercise directory must match the `slug` property of the Practice Exercise, as defined in the [config.json file](/docs/building/tracks#concept-exercises). A Practice Exercise has three types of files: @@ -100,7 +100,7 @@ exercises **Presence:** Required if the exercise implements a Problem Specifications Exercise with an `introduction.md` file -If the exercise implements a [Problem Specifications Exercise](https://github.com/exercism/problem-specifications/), this file's contents should match the Problem Specification Exercise's `introduction.md` file. configlet has functionality to automatically [sync the contents](../configlet/generating-documents#document-practice-exercises-introductionmd-file) of this file. +If the exercise implements a [Problem Specifications Exercise](https://github.com/exercism/problem-specifications/), this file's contents should match the Problem Specification Exercise's `introduction.md` file. configlet has functionality to automatically [sync the contents](/docs/building/configlet/generating-documents#document-practice-exercises-introductionmd-file) of this file. If the exercise is _not_ based on a Problem Specifications Exercise, consider the following: @@ -142,7 +142,7 @@ As part of his teenage rebellion, Bob has decided to only communicate using ASCI **Presence:** Required -If the exercise implements a [Problem Specifications Exercise](https://github.com/exercism/problem-specifications/), this file's contents should match the Problem Specification Exercise's `instructions.md` file (or `description.md` file if there is no `instructions.md` file). configlet has functionality to automatically [sync the contents](../configlet/generating-documents#document-practice-exercises-instructionsmd-file) of this file. +If the exercise implements a [Problem Specifications Exercise](https://github.com/exercism/problem-specifications/), this file's contents should match the Problem Specification Exercise's `instructions.md` file (or `description.md` file if there is no `instructions.md` file). configlet has functionality to automatically [sync the contents](/docs/building/configlet/generating-documents#document-practice-exercises-instructionsmd-file) of this file. If the exercise is _not_ based on a Problem Specifications Exercise, consider the following: @@ -385,8 +385,8 @@ Some languages require additional files for the tests to run. Example of these a ## Shared files -Some files are not specific to individual exercises, but are instead applicable to _all_ exercises. Check the [documentation](./shared-files.md) for more information. +Some files are not specific to individual exercises, but are instead applicable to _all_ exercises. Check the [documentation](/docs/building/tracks/shared-files) for more information. ## Presentation -There is a difference in how exercise documentation is presented to the student when using the in-browser editor versus using the CLI. See [this document](./presentation.md) for more information. +There is a difference in how exercise documentation is presented to the student when using the in-browser editor versus using the CLI. See [this document](/docs/building/tracks/presentation) for more information. diff --git a/building/tracks/presentation.md b/building/tracks/presentation.md index fb492235..c8f069e0 100644 --- a/building/tracks/presentation.md +++ b/building/tracks/presentation.md @@ -17,7 +17,7 @@ These file are specific to each exercise: - `.docs/hints.md`: provide hints to a student to help them get themselves unstuck in an exercise (required for concept exercises, optional for practice exercises) - `.meta/config.json`: contains source information of the exercise (optional) -See the [Concept Exercises documentation](./concept-exercises#documentationfiles) and the [Practice Exercises documentation](./concept-exercises#documentationfiles) for more information. +See the [Concept Exercises documentation](/docs/building/tracks/concept-exercises#documentationfiles) and the [Practice Exercises documentation](/docs/building/tracks/concept-exercises#documentationfiles) for more information. ### Track-specific files @@ -27,7 +27,7 @@ These file are shared between all exercises: - `help.md`: contains track-specific-wide instructions on how to get help (required) - `tests.md`: contains track-specific instructions on how to run the tests (required) -See the [shared files documentation](./shared-files.md) for more information. +See the [shared files documentation](/docs/building/tracks/shared-files) for more information. ### Exercism-wide documentation diff --git a/building/tracks/shared-files.md b/building/tracks/shared-files.md index 7e3f825e..24caed49 100644 --- a/building/tracks/shared-files.md +++ b/building/tracks/shared-files.md @@ -1,12 +1,12 @@ # Shared files -Some documentation files apply to both [Concept Exercises](./concept-exercises.md) and [Practice Exercises](./practice-exercises.md). These cross-exercise files are located within the track's `exercises/shared/.docs` directory: +Some documentation files apply to both [Concept Exercises](/docs/building/tracks/concept-exercises) and [Practice Exercises](/docs/building/tracks/practice-exercises). These cross-exercise files are located within the track's `exercises/shared/.docs` directory: - `debug.md`: explains how a student that is coding in the browser can still do "debugging" (optional) - `help.md`: contains track-specific-wide instructions on how to get help (required) - `tests.md`: contains track-specific instructions on how to run the tests (required) -The [Presentation document](./presentation.md) describes how these files are used to present content to the student. +The [Presentation document](/docs/building/tracks/presentation) describes how these files are used to present content to the student. --- diff --git a/building/tracks/stories/actor-model.take-a-number-machine.md b/building/tracks/stories/actor-model.take-a-number-machine.md index 2d115b57..e68d595a 100644 --- a/building/tracks/stories/actor-model.take-a-number-machine.md +++ b/building/tracks/stories/actor-model.take-a-number-machine.md @@ -21,6 +21,6 @@ You are writing an embedded system for a Take-A-Number machine. It is a very sim - [`concepts/actor-model`][concepts/actor-model] - [`types/pid`][types/pid] -[concepts/actor-model]: ../concepts/actor_model.md -[types/pid]: ../types/pid.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/take-a-number/.docs/instructions.md +[concepts/actor-model]: https://github.com/exercism/v3/blob/main/reference/concepts/actor_model.md +[types/pid]: https://github.com/exercism/v3/blob/main/reference/types/pid.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/take-a-number/.docs/instructions.md diff --git a/building/tracks/stories/anonymous-functions.bomb-defuser.md b/building/tracks/stories/anonymous-functions.bomb-defuser.md index 8ee02424..a8bc77a1 100644 --- a/building/tracks/stories/anonymous-functions.bomb-defuser.md +++ b/building/tracks/stories/anonymous-functions.bomb-defuser.md @@ -27,6 +27,6 @@ These are example tasks that fit the story of the secret agent disarming a stink - [`concepts/anonymous_functions`][concepts-anonymous-functions] - [`concepts/closure`][concepts-closures] -[concepts-closures]: ../concepts/closures.md -[concepts-anonymous-functions]: ../concepts/anonymous_functions.md -[implementation-swift]: ../../languages/swift/exercises/concept/bomb-defuser/.docs/instructions.md +[concepts-closures]: https://github.com/exercism/v3/blob/main/reference/concepts/closures.md +[concepts-anonymous-functions]: https://github.com/exercism/v3/blob/main/reference/concepts/anonymous_functions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/bomb-defuser/.docs/instructions.md diff --git a/building/tracks/stories/arrays.elyses-enchantments.md b/building/tracks/stories/arrays.elyses-enchantments.md index eb6ccb15..d09ba264 100644 --- a/building/tracks/stories/arrays.elyses-enchantments.md +++ b/building/tracks/stories/arrays.elyses-enchantments.md @@ -94,11 +94,11 @@ These are examples of tasks that fit the story of you wanting to re-arrange card - [`types/array`][types-array] -[types-array]: ../types/array.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/elyses-enchantments/.docs/instructions.md -[implementation-javascript-2]: ../../languages/javascript/exercises/concept/elyses-analytic-enchantments/.docs/instructions.md -[implementation-javascript-3]: ../../languages/javascript/exercises/concept/elyses-destructured-enchantments/.docs/instructions.md -[implementation-javascript-4]: ../../languages/javascript/exercises/concept/elyses-transformative-enchantments/.docs/instructions.md +[types-array]: https://github.com/exercism/v3/blob/main/reference/types/array.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/elyses-enchantments/.docs/instructions.md +[implementation-javascript-2]: https://github.com/exercism/javascript/blob/main/exercises/concept/elyses-analytic-enchantments/.docs/instructions.md +[implementation-javascript-3]: https://github.com/exercism/javascript/blob/main/exercises/concept/elyses-destructured-enchantments/.docs/instructions.md +[implementation-javascript-4]: https://github.com/exercism/javascript/blob/main/exercises/concept/elyses-transformative-enchantments/.docs/instructions.md [implementation-javascript-research-1-a]: https://github.com/exercism/research_experiment_1/tree/master/exercises/javascript-1-a [implementation-javascript-research-2-a]: https://github.com/exercism/research_experiment_1/tree/master/exercises/javascript-2-a -[implementation-swift]: ../../languages/swift/exercises/concept/magician-in-training/.docs/instructions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/magician-in-training/.docs/instructions.md diff --git a/building/tracks/stories/arrays.garden-bird-count.md b/building/tracks/stories/arrays.garden-bird-count.md index 0aa308b0..70e8ef8d 100644 --- a/building/tracks/stories/arrays.garden-bird-count.md +++ b/building/tracks/stories/arrays.garden-bird-count.md @@ -24,7 +24,7 @@ These are example tasks that fit the bird watching exercise: - [`types/array`][types-array] -[types-array]: ../types/array.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/bird-watcher/.docs/instructions.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/bird-count/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/bird-watcher/.docs/instructions.md +[types-array]: https://github.com/exercism/v3/blob/main/reference/types/array.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/bird-watcher/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/bird-count/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/bird-watcher/.docs/instructions.md diff --git a/building/tracks/stories/basics.lasagna.md b/building/tracks/stories/basics.lasagna.md index 1ea6ab3e..c6596f38 100644 --- a/building/tracks/stories/basics.lasagna.md +++ b/building/tracks/stories/basics.lasagna.md @@ -36,16 +36,16 @@ The story facilitates defining functions: - [`types/function`][types-function] - [`types/integer`][types-integer] -[concepts-operators]: ../concepts/operators.md -[concepts-return_values]: ../concepts/return_values.md -[types-function]: ../types/function.md -[types-integer]: ../types/integer.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/lucians-luscious-lasagna/.docs/instructions.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/lasagna/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/lucians-luscious-lasagna/.docs/instructions.md -[implementation-java]: ../../languages/java/exercises/concept/basics/.docs/instructions.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/basics/.docs/instructions.md -[implementation-python]: ../../languages/python/exercises/concept/guidos-gorgeous-lasagna/.docs/instructions.md -[implementation-julia]: ../../languages/julia/exercises/concept/lasagna/.docs/instructions.md -[implementation-ruby]: ../../languages/ruby/exercises/concept/lasagna/.docs/instructions.md -[implementation-swift]: ../../languages/swift/exercises/concept/lasagna/.docs/instructions.md +[concepts-operators]: https://github.com/exercism/v3/blob/main/reference/concepts/operators.md +[concepts-return_values]: https://github.com/exercism/v3/blob/main/reference/concepts/return_values.md +[types-function]: https://github.com/exercism/v3/blob/main/reference/types/function.md +[types-integer]: https://github.com/exercism/v3/blob/main/reference/types/integer.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/lucians-luscious-lasagna/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/lasagna/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/lucians-luscious-lasagna/.docs/instructions.md +[implementation-java]: https://github.com/exercism/java/blob/main/exercises/concept/basics/.docs/instructions.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/basics/.docs/instructions.md +[implementation-python]: https://github.com/exercism/python/blob/main/exercises/concept/guidos-gorgeous-lasagna/.docs/instructions.md +[implementation-julia]: https://github.com/exercism/julia/blob/main/exercises/concept/lasagna/.docs/instructions.md +[implementation-ruby]: https://github.com/exercism/ruby/blob/main/exercises/concept/lasagna/.docs/instructions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/lasagna/.docs/instructions.md diff --git a/building/tracks/stories/binary-data.file-sniffer.md b/building/tracks/stories/binary-data.file-sniffer.md index a8eaa768..f18a7b39 100644 --- a/building/tracks/stories/binary-data.file-sniffer.md +++ b/building/tracks/stories/binary-data.file-sniffer.md @@ -26,4 +26,4 @@ The story facilitates defining functions: - [Elixir: binary-matching][implementation-elixir] (reference implementation) -[implementation-elixir]: ../../languages/elixir/exercises/concept/file-sniffer/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/file-sniffer/.docs/instructions.md diff --git a/building/tracks/stories/booleans.pac-man.md b/building/tracks/stories/booleans.pac-man.md index b841a625..1bed0832 100644 --- a/building/tracks/stories/booleans.pac-man.md +++ b/building/tracks/stories/booleans.pac-man.md @@ -41,7 +41,7 @@ Terms used in the story: [1][1]. Jui-Feng Weng, Shian-Shyong Tseng, Tsung-Ju Lee, Teaching Boolean Logic through Game Rule Tuning, IEEE Trans. Learning Technol. 3 (2010) 319–328. . [1]: https://doi.org/10.1109/TLT.2010.33 -[types-boolean]: ../types/boolean.md -[concepts-boolean_logic]: ../concepts/boolean_logic.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/pacman-rules/.docs/instructions.md -[implementation-python]: ../../languages/python/exercises/concept/ghost-gobble-arcade-game/.docs/instructions.md +[types-boolean]: https://github.com/exercism/v3/blob/main/reference/types/boolean.md +[concepts-boolean_logic]: https://github.com/exercism/v3/blob/main/reference/concepts/boolean_logic.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/pacman-rules/.docs/instructions.md +[implementation-python]: https://github.com/exercism/python/blob/main/exercises/concept/ghost-gobble-arcade-game/.docs/instructions.md diff --git a/building/tracks/stories/booleans.rpg-quest-logic.md b/building/tracks/stories/booleans.rpg-quest-logic.md index a3c0edf2..7f59006a 100644 --- a/building/tracks/stories/booleans.rpg-quest-logic.md +++ b/building/tracks/stories/booleans.rpg-quest-logic.md @@ -41,8 +41,8 @@ These are recommendations, not rules, for recurring terminology in the instructi - [`types/boolean`][types-boolean] -[types-boolean]: ../types/boolean.md -[javascript-concept-booleans]: ../../languages/javascript/exercises/concept/booleans -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/annalyns-infiltration/.docs/instructions.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/booleans/.docs/instructions.md -[implementation-julia]: ../../languages/julia/exercises/concept/annalyns-infiltration/.docs/instructions.md +[types-boolean]: https://github.com/exercism/v3/blob/main/reference/types/boolean.md +[javascript-concept-booleans]: https://github.com/exercism/javascript/blob/main/exercises/concept/booleans +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/annalyns-infiltration/.docs/instructions.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/booleans/.docs/instructions.md +[implementation-julia]: https://github.com/exercism/julia/blob/main/exercises/concept/annalyns-infiltration/.docs/instructions.md diff --git a/building/tracks/stories/classes.amusement-park.md b/building/tracks/stories/classes.amusement-park.md index bbfab5f9..6b352e39 100644 --- a/building/tracks/stories/classes.amusement-park.md +++ b/building/tracks/stories/classes.amusement-park.md @@ -31,6 +31,6 @@ Example tasks: - [`concepts/object`][concepts-objects] - [`types/class`][types-class] -[concepts-objects]: ../concepts/objects.md -[types-class]: ../types/class.md -[implementation-ruby]: ../../languages/ruby/exercises/concept/instance-variables/.docs/instructions.md +[concepts-objects]: https://github.com/exercism/v3/blob/main/reference/concepts/objects.md +[types-class]: https://github.com/exercism/v3/blob/main/reference/types/class.md +[implementation-ruby]: https://github.com/exercism/ruby/blob/main/exercises/concept/instance-variables/.docs/instructions.md diff --git a/building/tracks/stories/classes.remote-control-car.md b/building/tracks/stories/classes.remote-control-car.md index 273e212c..4d6b5f1e 100644 --- a/building/tracks/stories/classes.remote-control-car.md +++ b/building/tracks/stories/classes.remote-control-car.md @@ -34,7 +34,7 @@ These are example tasks that fit the remote control car exercise: - [`concepts/object`][concepts-objects] - [`types/class`][types-class] -[concepts-objects]: ../concepts/objects.md -[types-class]: ../types/class.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/elons-toys/.docs/instructions.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/remote-control-car/.docs/instructions.md +[concepts-objects]: https://github.com/exercism/v3/blob/main/reference/concepts/objects.md +[types-class]: https://github.com/exercism/v3/blob/main/reference/types/class.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/elons-toys/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/remote-control-car/.docs/instructions.md diff --git a/building/tracks/stories/closures.design-company.md b/building/tracks/stories/closures.design-company.md index 07e464da..2d031624 100644 --- a/building/tracks/stories/closures.design-company.md +++ b/building/tracks/stories/closures.design-company.md @@ -20,4 +20,4 @@ so you decide to use a function closure to create reusable transformation for `{ - [JavaScript: closures][implementation-javascript] (reference implementation) -[implementation-javascript]: ../../languages/javascript/exercises/concept/closures/.docs/instructions.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/closures/.docs/instructions.md diff --git a/building/tracks/stories/conditionals.vehicle-purchase.md b/building/tracks/stories/conditionals.vehicle-purchase.md index 6c5844a8..6d1d5415 100644 --- a/building/tracks/stories/conditionals.vehicle-purchase.md +++ b/building/tracks/stories/conditionals.vehicle-purchase.md @@ -25,9 +25,9 @@ These are examples of tasks that fit the story of purchasing a vehicle: - [`concepts/guard`][concepts-guard] - [`concepts/switch`][concepts-switch] -[types-booleans]: ../types/boolean.md -[concepts-conditionals]: ../concepts/conditionals.md -[concepts-guard]: ../concepts/guard.md -[concepts-switch]: ../concepts/switch.md -[implementation-swift]: ../../languages/swift/exercises/concept/vehicle-purchase/.docs/instructions.md -[implementation-julia]: ../../languages/julia/exercises/concept/vehicle-purchase/.docs/instructions.md +[types-booleans]: https://github.com/exercism/v3/blob/main/reference/types/boolean.md +[concepts-conditionals]: https://github.com/exercism/v3/blob/main/reference/concepts/conditionals.md +[concepts-guard]: https://github.com/exercism/v3/blob/main/reference/concepts/guard.md +[concepts-switch]: https://github.com/exercism/v3/blob/main/reference/concepts/switch.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/vehicle-purchase/.docs/instructions.md +[implementation-julia]: https://github.com/exercism/julia/blob/main/exercises/concept/vehicle-purchase/.docs/instructions.md diff --git a/building/tracks/stories/constructors.remote-control-car-race.md b/building/tracks/stories/constructors.remote-control-car-race.md index f4dcb769..ea10a4ff 100644 --- a/building/tracks/stories/constructors.remote-control-car-race.md +++ b/building/tracks/stories/constructors.remote-control-car-race.md @@ -31,7 +31,7 @@ These are example tasks that fit the remote control car race exercise: - [`concepts/object`][concepts-objects] - [`types/class`][types-class] -[concepts-constructors]: ../concepts/constructors.md -[concepts-objects]: ../concepts/objects.md -[types-class]: ../types/class.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/need-for-speed/.docs/instructions.md +[concepts-constructors]: https://github.com/exercism/v3/blob/main/reference/concepts/constructors.md +[concepts-objects]: https://github.com/exercism/v3/blob/main/reference/concepts/objects.md +[types-class]: https://github.com/exercism/v3/blob/main/reference/types/class.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/need-for-speed/.docs/instructions.md diff --git a/building/tracks/stories/datetimes.appointment-scheduler.md b/building/tracks/stories/datetimes.appointment-scheduler.md index fa3e8e92..229bc01f 100644 --- a/building/tracks/stories/datetimes.appointment-scheduler.md +++ b/building/tracks/stories/datetimes.appointment-scheduler.md @@ -31,6 +31,6 @@ These are example tasks that fit the appointment scheduler exercise: - [`types/datetime`][types-datetime] -[types-datetime]: ../types/datetime.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/booking-up-for-beauty/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/booking-up-for-beauty/.docs/instructions.md +[types-datetime]: https://github.com/exercism/v3/blob/main/reference/types/datetime.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/booking-up-for-beauty/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/booking-up-for-beauty/.docs/instructions.md diff --git a/building/tracks/stories/datetimes.time-keeper.md b/building/tracks/stories/datetimes.time-keeper.md index e063ec29..08f71681 100644 --- a/building/tracks/stories/datetimes.time-keeper.md +++ b/building/tracks/stories/datetimes.time-keeper.md @@ -44,4 +44,4 @@ These are example tasks that fit the time-keeper exercise: - [`types/datetime`][types-datetime] -[types-datetime]: ../types/datetime.md +[types-datetime]: https://github.com/exercism/v3/blob/main/reference/types/datetime.md diff --git a/building/tracks/stories/deep-dig.basketball-team-website.md b/building/tracks/stories/deep-dig.basketball-team-website.md index 69558a3f..7cf87742 100644 --- a/building/tracks/stories/deep-dig.basketball-team-website.md +++ b/building/tracks/stories/deep-dig.basketball-team-website.md @@ -25,6 +25,6 @@ The story can be continued, for example: - [`types/dictionary`][types-dictionary] -[types-dictionary]: ../types/dictionary.md +[types-dictionary]: https://github.com/exercism/v3/blob/main/reference/types/dictionary.md [implementation-javascript-research-1-b]: https://github.com/exercism/research_experiment_1/tree/master/exercises/javascript-1-b/README.md [implementation-javascript-research-2-b]: https://github.com/exercism/research_experiment_1/tree/master/exercises/javascript-2-b/README.md diff --git a/building/tracks/stories/enumerable.fashion-boutique.md b/building/tracks/stories/enumerable.fashion-boutique.md index c5736208..ea75bf27 100644 --- a/building/tracks/stories/enumerable.fashion-boutique.md +++ b/building/tracks/stories/enumerable.fashion-boutique.md @@ -33,9 +33,9 @@ A single item in the inventory is represented by a map/dictionary, and the whole - [`types/list`][types-list] - [`types/map`][types-map] -[types-array]: ../types/array.md -[types-dictionary]: ../types/dictionary.md -[types-list]: ../types/list.md -[types-map]: ../types/map.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/boutique-inventory/.docs/instructions.md -[extension-elixir]: ../../languages/elixir/exercises/concept/boutique-suggestions/.docs/instructions.md +[types-array]: https://github.com/exercism/v3/blob/main/reference/types/array.md +[types-dictionary]: https://github.com/exercism/v3/blob/main/reference/types/dictionary.md +[types-list]: https://github.com/exercism/v3/blob/main/reference/types/list.md +[types-map]: https://github.com/exercism/v3/blob/main/reference/types/map.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/boutique-inventory/.docs/instructions.md +[extension-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/boutique-suggestions/.docs/instructions.md diff --git a/building/tracks/stories/enums.log-line-parser.md b/building/tracks/stories/enums.log-line-parser.md index 9abc83d0..4835b9b4 100644 --- a/building/tracks/stories/enums.log-line-parser.md +++ b/building/tracks/stories/enums.log-line-parser.md @@ -30,7 +30,7 @@ These are example tasks that fit the log line parser: - [Python: log-levels][implementation-python] - [Swift: enums][implementation-swift] -[implementation-csharp]: ../../languages/csharp/exercises/concept/logs-logs-logs/.docs/instructions.md -[implementation-python]: ../../languages/python/exercises/concept/log-levels/.docs/instructions.md -[implementation-rust]: ../../languages/rust/exercises/concept/enums/.docs/instructions.md -[implementation-swift]: ../../languages/swift/exercises/concept/log-lines/.docs/instructions.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/logs-logs-logs/.docs/instructions.md +[implementation-python]: https://github.com/exercism/python/blob/main/exercises/concept/log-levels/.docs/instructions.md +[implementation-rust]: https://github.com/exercism/rust/blob/main/exercises/concept/enums/.docs/instructions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/log-lines/.docs/instructions.md diff --git a/building/tracks/stories/errors.instruments-of-texas.md b/building/tracks/stories/errors.instruments-of-texas.md index 0dd94dda..4c365b93 100644 --- a/building/tracks/stories/errors.instruments-of-texas.md +++ b/building/tracks/stories/errors.instruments-of-texas.md @@ -18,4 +18,4 @@ The student implements a function in to handle errors in three ways: - [Elixir: errors][implementation-elixir] (reference implementation) -[implementation-elixir]: ../../languages/elixir/exercises/concept/rpn-calculator/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/rpn-calculator/.docs/instructions.md diff --git a/building/tracks/stories/flag-enums.website-account-permissions.md b/building/tracks/stories/flag-enums.website-account-permissions.md index 3b99c3c4..8fcc6076 100644 --- a/building/tracks/stories/flag-enums.website-account-permissions.md +++ b/building/tracks/stories/flag-enums.website-account-permissions.md @@ -34,6 +34,6 @@ These are example tasks that fit the website permissions exercise: - [`concepts/bitwise_manipulation`][concepts-bitwise_manipulation] - [`types/bit`][types-bit] -[concepts-bitwise_manipulation]: ../concepts/bitwise_manipulation.md -[types-bit]: ../types/bit.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/attack-of-the-trolls/.docs/instructions.md +[concepts-bitwise_manipulation]: https://github.com/exercism/v3/blob/main/reference/concepts/bitwise_manipulation.md +[types-bit]: https://github.com/exercism/v3/blob/main/reference/types/bit.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/attack-of-the-trolls/.docs/instructions.md diff --git a/building/tracks/stories/floating-point-numbers.savings-account.md b/building/tracks/stories/floating-point-numbers.savings-account.md index c1e69ada..36ca103e 100644 --- a/building/tracks/stories/floating-point-numbers.savings-account.md +++ b/building/tracks/stories/floating-point-numbers.savings-account.md @@ -26,6 +26,6 @@ These are example tasks that fit the savings account exercise: - [`types/floating_point_number`][types-floating_point_number] -[types-floating_point_number]: ../types/floating_point_number.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/interest-is-interesting/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/interest-is-interesting/.docs/instructions.md +[types-floating_point_number]: https://github.com/exercism/v3/blob/main/reference/types/floating_point_number.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/interest-is-interesting/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/interest-is-interesting/.docs/instructions.md diff --git a/building/tracks/stories/functions.lasagna-master.md b/building/tracks/stories/functions.lasagna-master.md index 480c696a..98f38264 100644 --- a/building/tracks/stories/functions.lasagna-master.md +++ b/building/tracks/stories/functions.lasagna-master.md @@ -28,11 +28,11 @@ The story facilitates defining functions: - [`concepts/nested_functions`][concepts-nested_functions] - [`types/function`][types-function] -[concepts-default_arguments]: ../concepts/default_arguments.md -[concepts-named_parameters]: ../concepts/named_parameters.md -[concepts-variadic_functions]: ../concepts/variadic_functions.md -[concepts-multiple_return_values]: ../concepts/multiple_return_values.md -[concepts-inout_parameters]: ../concepts/inout_parameters.md -[concepts-nested_functions]: ../concepts/nested_functions.md -[types-function]: ../types/function.md -[implementation-swift]: ../../languages/swift/exercises/concept/lasagna-master/.docs/instructions.md +[concepts-default_arguments]: https://github.com/exercism/v3/blob/main/reference/concepts/default_arguments.md +[concepts-named_parameters]: https://github.com/exercism/v3/blob/main/reference/concepts/named_parameters.md +[concepts-variadic_functions]: https://github.com/exercism/v3/blob/main/reference/concepts/variadic_functions.md +[concepts-multiple_return_values]: https://github.com/exercism/v3/blob/main/reference/concepts/multiple_return_values.md +[concepts-inout_parameters]: https://github.com/exercism/v3/blob/main/reference/concepts/inout_parameters.md +[concepts-nested_functions]: https://github.com/exercism/v3/blob/main/reference/concepts/nested_functions.md +[types-function]: https://github.com/exercism/v3/blob/main/reference/types/function.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/lasagna-master/.docs/instructions.md diff --git a/building/tracks/stories/higher-order-functions.secret-agent.md b/building/tracks/stories/higher-order-functions.secret-agent.md index 6edb2e8b..52ecc60a 100644 --- a/building/tracks/stories/higher-order-functions.secret-agent.md +++ b/building/tracks/stories/higher-order-functions.secret-agent.md @@ -21,5 +21,5 @@ The story facilitates defining [higher-order functions][concepts-higher_order_fu - [`concepts/higher_order_functions`][concepts-higher_order_functions] -[concepts-higher_order_functions]: ../concepts/higher_order_functions.md -[implementation-swift]: ../../languages/swift/exercises/concept/secret-agent/.docs/instructions.md +[concepts-higher_order_functions]: https://github.com/exercism/v3/blob/main/reference/concepts/higher_order_functions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/secret-agent/.docs/instructions.md diff --git a/building/tracks/stories/inheritance.role-playing-game.md b/building/tracks/stories/inheritance.role-playing-game.md index 3f39a5c2..b082d023 100644 --- a/building/tracks/stories/inheritance.role-playing-game.md +++ b/building/tracks/stories/inheritance.role-playing-game.md @@ -41,9 +41,9 @@ The story facilitates defining functions: - [`types/integer`][types-integer] - [`types/string`][types-string] -[concepts-classes]: ../concepts/classes.md -[concepts-constructors]: ../concepts/constructors.md -[concepts-inheritance]: ../concepts/inheritance.md -[types-integer]: ../types/integer.md -[types-string]: ../types/string.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/wizards-and-warriors/.docs/instructions.md +[concepts-classes]: https://github.com/exercism/v3/blob/main/reference/concepts/classes.md +[concepts-constructors]: https://github.com/exercism/v3/blob/main/reference/concepts/constructors.md +[concepts-inheritance]: https://github.com/exercism/v3/blob/main/reference/concepts/inheritance.md +[types-integer]: https://github.com/exercism/v3/blob/main/reference/types/integer.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/wizards-and-warriors/.docs/instructions.md diff --git a/building/tracks/stories/io.rpg-character-sheet.md b/building/tracks/stories/io.rpg-character-sheet.md index dc63fde4..2ecdf4f7 100644 --- a/building/tracks/stories/io.rpg-character-sheet.md +++ b/building/tracks/stories/io.rpg-character-sheet.md @@ -14,4 +14,4 @@ You and your friends love to play pen-and-paper role-playing games, but you noti - [Elixir: io][implementation-elixir] (reference implementation) -[implementation-elixir]: ../../languages/elixir/exercises/concept/rpg-character-sheet/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/rpg-character-sheet/.docs/instructions.md diff --git a/building/tracks/stories/lambda-function.secret-device.md b/building/tracks/stories/lambda-function.secret-device.md index cd9967d2..e8a9b05b 100644 --- a/building/tracks/stories/lambda-function.secret-device.md +++ b/building/tracks/stories/lambda-function.secret-device.md @@ -24,9 +24,9 @@ The story also adapts well for [concepts-bitwise_manipulation][concepts-bitwise_ - [`concepts/bitwise_manipulation`][concepts-bitwise_manipulation] - [`types/bit`][types-bit] -[implementation-elixir]: ../../languages/elixir/exercises/concept/secrets/.docs/instructions.md -[concepts-anonymous_functions]: ../concepts/anonymous_functions.md -[concepts-function_composition]: ../concepts/function_composition.md -[concepts-higher_order_functions]: ../concepts/higher_order_functions.md -[concepts-bitwise_manipulation]: ../concepts/bitwise_manipulation.md -[types-bit]: ../types/bit.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/secrets/.docs/instructions.md +[concepts-anonymous_functions]: https://github.com/exercism/v3/blob/main/reference/concepts/anonymous_functions.md +[concepts-function_composition]: https://github.com/exercism/v3/blob/main/reference/concepts/function_composition.md +[concepts-higher_order_functions]: https://github.com/exercism/v3/blob/main/reference/concepts/higher_order_functions.md +[concepts-bitwise_manipulation]: https://github.com/exercism/v3/blob/main/reference/concepts/bitwise_manipulation.md +[types-bit]: https://github.com/exercism/v3/blob/main/reference/types/bit.md diff --git a/building/tracks/stories/lists.language-list.md b/building/tracks/stories/lists.language-list.md index 6f18db12..38407164 100644 --- a/building/tracks/stories/lists.language-list.md +++ b/building/tracks/stories/lists.language-list.md @@ -27,7 +27,7 @@ The exercise generally guides students how to: - [`types/list`][types-list] -[implementation-clojure]: ../../languages/clojure/exercises/concept/tracks-on-tracks-on-tracks/.docs/instructions.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/language-list/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/tracks-on-tracks-on-tracks/.docs/instructions.md -[types-list]: ../types/list.md +[implementation-clojure]: https://github.com/exercism/clojure/blob/main/exercises/concept/tracks-on-tracks-on-tracks/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/language-list/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/tracks-on-tracks-on-tracks/.docs/instructions.md +[types-list]: https://github.com/exercism/v3/blob/main/reference/types/list.md diff --git a/building/tracks/stories/loops.bartender.md b/building/tracks/stories/loops.bartender.md index 41133618..bb9d1b79 100644 --- a/building/tracks/stories/loops.bartender.md +++ b/building/tracks/stories/loops.bartender.md @@ -21,5 +21,5 @@ These are example tasks that fit the story of the freelancer communicating with - [`concept/loops`][concept-loops] -[concept-loops]: ../concepts/loops.md -[implementation-swift]: ../../languages/swift/exercises/concept/master-mixologist/.docs/instructions.md +[concept-loops]: https://github.com/exercism/v3/blob/main/reference/concepts/loops.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/master-mixologist/.docs/instructions.md diff --git a/building/tracks/stories/maps.high-score-board.md b/building/tracks/stories/maps.high-score-board.md index 414173aa..3e2b731e 100644 --- a/building/tracks/stories/maps.high-score-board.md +++ b/building/tracks/stories/maps.high-score-board.md @@ -26,9 +26,9 @@ The student is then guided through some operations: - [`types/hash_map`][types-hash_map] - [`types/map`][types-map] -[collection]: ../types/collection.md -[types-map]: ../types/map.md -[types-hash_map]: ../types/hash_map.md -[types-dictionary]: ../types/dictionary.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/high-score/.docs/instructions.md -[implementation-swift]: ../../languages/swift/exercises/concept/high-score-board/.docs/instructions.md +[collection]: https://github.com/exercism/v3/blob/main/reference/types/collection.md +[types-map]: https://github.com/exercism/v3/blob/main/reference/types/map.md +[types-hash_map]: https://github.com/exercism/v3/blob/main/reference/types/hash_map.md +[types-dictionary]: https://github.com/exercism/v3/blob/main/reference/types/dictionary.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/high-score/.docs/instructions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/high-score-board/.docs/instructions.md diff --git a/building/tracks/stories/matrices.exercism-logo-matrix.md b/building/tracks/stories/matrices.exercism-logo-matrix.md index d12e794f..08e6121f 100644 --- a/building/tracks/stories/matrices.exercism-logo-matrix.md +++ b/building/tracks/stories/matrices.exercism-logo-matrix.md @@ -12,4 +12,4 @@ This story involves playing around with a matrix representing the Exercism logo, - [The Exercism Matrix][implementation-julia] -[implementation-julia]: ../../languages/julia/exercises/concept/exercism-matrix/ +[implementation-julia]: https://github.com/exercism/julia/blob/main/exercises/concept/exercism-matrix/ diff --git a/building/tracks/stories/method-overloading.rpg-game-master.md b/building/tracks/stories/method-overloading.rpg-game-master.md index e8b3e5b5..3aea5bdd 100644 --- a/building/tracks/stories/method-overloading.rpg-game-master.md +++ b/building/tracks/stories/method-overloading.rpg-game-master.md @@ -18,4 +18,4 @@ These are example tasks that fit the game master exercise: - [C#: wizards-and-warriors-2][implementation-csharp] (reference implementation) -[implementation-csharp]: ../../languages/csharp/exercises/concept/wizards-and-warriors-2/.docs/instructions.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/wizards-and-warriors-2/.docs/instructions.md diff --git a/building/tracks/stories/nullability.name-badges.md b/building/tracks/stories/nullability.name-badges.md index fb23076e..89211b26 100644 --- a/building/tracks/stories/nullability.name-badges.md +++ b/building/tracks/stories/nullability.name-badges.md @@ -27,8 +27,8 @@ These are example tasks that fit the employee badges exercise: - [`types/null`][types-null] - [`types/nullable`][types-nullable] -[types-null]: ../types/null.md -[types-nullable]: ../types/nullable.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/tim-from-marketing/.docs/instructions.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/name-badge/.docs/instructions.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/nullability/.docs/instructions.md +[types-null]: https://github.com/exercism/v3/blob/main/reference/types/null.md +[types-nullable]: https://github.com/exercism/v3/blob/main/reference/types/nullable.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/tim-from-marketing/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/name-badge/.docs/instructions.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/nullability/.docs/instructions.md diff --git a/building/tracks/stories/numbers.car-production-line.md b/building/tracks/stories/numbers.car-production-line.md index 03712cf1..6bac485c 100644 --- a/building/tracks/stories/numbers.car-production-line.md +++ b/building/tracks/stories/numbers.car-production-line.md @@ -29,8 +29,8 @@ These are example tasks that fit the car production line exercise: - [`types/integer`][types-integer] - [`types/floating_point_number`][types-floating_point_number] -[types-number]: ../types/number.md -[types-integer]: ../types/integer.md -[types-floating_point_number]: ../types/floating_point_number.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/cars-assemble/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/cars-assemble/.docs/instructions.md +[types-number]: https://github.com/exercism/v3/blob/main/reference/types/number.md +[types-integer]: https://github.com/exercism/v3/blob/main/reference/types/integer.md +[types-floating_point_number]: https://github.com/exercism/v3/blob/main/reference/types/floating_point_number.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/cars-assemble/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/cars-assemble/.docs/instructions.md diff --git a/building/tracks/stories/numbers.freelancer-rates.md b/building/tracks/stories/numbers.freelancer-rates.md index 71156ad8..8fdc5778 100644 --- a/building/tracks/stories/numbers.freelancer-rates.md +++ b/building/tracks/stories/numbers.freelancer-rates.md @@ -47,10 +47,10 @@ These are recommendations, not rules, for recurring terminology in the instructi - [`types/floating_point_number`][types-floating-point-number] - [`types/string`][types-string] -[types-number]: ../types/number.md -[types-decimal-number]: ../types/decimal_number.md -[types-floating-point-number]: ../types/floating_point_number.md -[types-string]: ../types/string.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/freelancer-rates/.docs/instructions.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/numbers/.docs/instructions.md -[implementation-swift]: ../../languages/swift/exercises/concept/freelancer-rates/.docs/instructions.md +[types-number]: https://github.com/exercism/v3/blob/main/reference/types/number.md +[types-decimal-number]: https://github.com/exercism/v3/blob/main/reference/types/decimal_number.md +[types-floating-point-number]: https://github.com/exercism/v3/blob/main/reference/types/floating_point_number.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/freelancer-rates/.docs/instructions.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/numbers/.docs/instructions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/freelancer-rates/.docs/instructions.md diff --git a/building/tracks/stories/optionals.pizza-slices.md b/building/tracks/stories/optionals.pizza-slices.md index a65519e3..c655759f 100644 --- a/building/tracks/stories/optionals.pizza-slices.md +++ b/building/tracks/stories/optionals.pizza-slices.md @@ -19,5 +19,5 @@ The story facilitates exploration of [Optional types][types-option-types] which - [`types/option_types`][types-option-types] -[types-option-types]: ../types/option_types.md -[implementation-swift]: ../../languages/swift/exercises/concept/pizza-slices/.docs/instructions.md +[types-option-types]: https://github.com/exercism/v3/blob/main/reference/types/option_types.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/pizza-slices/.docs/instructions.md diff --git a/building/tracks/stories/pattern-matching.number-guessing-game.md b/building/tracks/stories/pattern-matching.number-guessing-game.md index 3101305f..fc0b0975 100644 --- a/building/tracks/stories/pattern-matching.number-guessing-game.md +++ b/building/tracks/stories/pattern-matching.number-guessing-game.md @@ -27,6 +27,6 @@ These are example tasks that fit the number guessing game exercise: - [`concepts/pattern_matching`][concepts-pattern_matching] -[concepts-pattern_matching]: ../concepts/pattern_matching.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/guessing-game/.docs/instructions.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/guessing-game/.docs/instructions.md +[concepts-pattern_matching]: https://github.com/exercism/v3/blob/main/reference/concepts/pattern_matching.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/guessing-game/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/guessing-game/.docs/instructions.md diff --git a/building/tracks/stories/primitive-types.rna-and-dna-processing.md b/building/tracks/stories/primitive-types.rna-and-dna-processing.md index 4a3c30e0..69c2a6cd 100644 --- a/building/tracks/stories/primitive-types.rna-and-dna-processing.md +++ b/building/tracks/stories/primitive-types.rna-and-dna-processing.md @@ -17,6 +17,6 @@ You could consider adding those exercises twice (perhaps as practice exercise) i - [`types/char`][types-char] - [`types/string`][types-string] -[implementation-elixir]: ../../languages/elixir/exercises/concept/dna-encoding/.docs/instructions.md -[types-string]: ../types/string.md -[types-char]: ../types/char.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/dna-encoding/.docs/instructions.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[types-char]: https://github.com/exercism/v3/blob/main/reference/types/char.md diff --git a/building/tracks/stories/promises.klingon-translation-service.md b/building/tracks/stories/promises.klingon-translation-service.md index 1837746b..e47f4b57 100644 --- a/building/tracks/stories/promises.klingon-translation-service.md +++ b/building/tracks/stories/promises.klingon-translation-service.md @@ -67,11 +67,11 @@ All the translation texts are Klingon to English. - [`types/string`][types-string] - [`types/number`][types-number] -[types-promise]: ../types/promise.md -[types-future]: ../types/future.md -[types-string]: ../types/string.md -[types-number]: ../types/number.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/promises/.docs/instructions.md +[types-promise]: https://github.com/exercism/v3/blob/main/reference/types/promise.md +[types-future]: https://github.com/exercism/v3/blob/main/reference/types/future.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[types-number]: https://github.com/exercism/v3/blob/main/reference/types/number.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/promises/.docs/instructions.md ## N.B. diff --git a/building/tracks/stories/properties.weighing-machine.md b/building/tracks/stories/properties.weighing-machine.md index 54b29925..bc4ec75c 100644 --- a/building/tracks/stories/properties.weighing-machine.md +++ b/building/tracks/stories/properties.weighing-machine.md @@ -44,4 +44,4 @@ These are example tasks that fit the weighing machine exercise: - [C#: weighing-machine][implementation-csharp] (reference implementation) -[implementation-csharp]: ../../languages/csharp/exercises/concept/weighing-machine/.docs/instructions.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/weighing-machine/.docs/instructions.md diff --git a/building/tracks/stories/randomness.rpg-quest-logic-extension.md b/building/tracks/stories/randomness.rpg-quest-logic-extension.md index b4a6edef..7c344669 100644 --- a/building/tracks/stories/randomness.rpg-quest-logic-extension.md +++ b/building/tracks/stories/randomness.rpg-quest-logic-extension.md @@ -29,4 +29,4 @@ Having found the kidnappers, Annalyn considers which of the following actions sh - [Julia: annalyns-infiltration2][implementation-julia] -[implementation-julia]: ../../languages/julia/exercises/concept/annalyns-infiltration2/.docs/instructions.md +[implementation-julia]: https://github.com/exercism/julia/blob/main/exercises/concept/annalyns-infiltration2/.docs/instructions.md diff --git a/building/tracks/stories/records.nba-root-for-team-algorithm.md b/building/tracks/stories/records.nba-root-for-team-algorithm.md index d99dcbfc..f38a67c3 100644 --- a/building/tracks/stories/records.nba-root-for-team-algorithm.md +++ b/building/tracks/stories/records.nba-root-for-team-algorithm.md @@ -26,5 +26,5 @@ These are example tasks that fit the NBA root-for-team algorithm exercise: - [`types/record`][types-record] -[types-record]: ../types/record.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/bandwagoner/.docs/instructions.md +[types-record]: https://github.com/exercism/v3/blob/main/reference/types/record.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/bandwagoner/.docs/instructions.md diff --git a/building/tracks/stories/recursion.pizza-delivery.md b/building/tracks/stories/recursion.pizza-delivery.md index 273e3247..22e99485 100644 --- a/building/tracks/stories/recursion.pizza-delivery.md +++ b/building/tracks/stories/recursion.pizza-delivery.md @@ -37,6 +37,6 @@ These are example tasks that fit the pizza delivery exercise: - [`concepts/recursion`][concepts-recursion] -[concepts-recursion]: ../concepts/recursion.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/pizza-pricing/.docs/instructions.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/recursion/.docs/instructions.md +[concepts-recursion]: https://github.com/exercism/v3/blob/main/reference/concepts/recursion.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/pizza-pricing/.docs/instructions.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/recursion/.docs/instructions.md diff --git a/building/tracks/stories/regex.event-ingest.md b/building/tracks/stories/regex.event-ingest.md index cf49f65b..e29bc94f 100644 --- a/building/tracks/stories/regex.event-ingest.md +++ b/building/tracks/stories/regex.event-ingest.md @@ -29,4 +29,4 @@ Touches on: - [Elixir: regular-expressions][implementation-elixir] (reference implementation) -[implementation-elixir]: ../../languages/elixir/exercises/concept/date-parser/.docs/instructions.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/date-parser/.docs/instructions.md diff --git a/building/tracks/stories/strings-and-characters.custom-signs.md b/building/tracks/stories/strings-and-characters.custom-signs.md index fe3ce62f..0cf7fadb 100644 --- a/building/tracks/stories/strings-and-characters.custom-signs.md +++ b/building/tracks/stories/strings-and-characters.custom-signs.md @@ -23,6 +23,6 @@ These are example tasks that fit the story of a customer designing a custom sign - [`types/string`][types-string] - [`types/character`][types-character] -[types-string]: ../types/string.md -[types-character]: ../types/character.md -[implementation-swift]: ../../languages/swift/exercises/concept/custom-signs/.docs/instructions.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[types-character]: https://github.com/exercism/v3/blob/main/reference/types/character.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/custom-signs/.docs/instructions.md diff --git a/building/tracks/stories/strings.high-school-sweethearts.md b/building/tracks/stories/strings.high-school-sweethearts.md index 7b40ecd6..611c6983 100644 --- a/building/tracks/stories/strings.high-school-sweethearts.md +++ b/building/tracks/stories/strings.high-school-sweethearts.md @@ -38,5 +38,5 @@ These are example tasks that fit the high school sweethearts exercise, each task - [`types/string`][types-string] -[types-string]: ../types/string.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/high-school-sweetheart/.docs/instructions.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/high-school-sweetheart/.docs/instructions.md diff --git a/building/tracks/stories/strings.log-line-parser.md b/building/tracks/stories/strings.log-line-parser.md index 65af6b56..4863385c 100644 --- a/building/tracks/stories/strings.log-line-parser.md +++ b/building/tracks/stories/strings.log-line-parser.md @@ -34,11 +34,11 @@ These are example tasks that fit the log line parser: - [`types/string`][types-string] -[types-string]: ../types/string.md -[implementation-csharp]: ../../languages/csharp/exercises/concept/log-levels/.docs/instructions.md -[implementation-cpp]: ../../languages/cpp/exercises/concept/strings/.docs/instructions.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/log-levels/.docs/instructions.md -[implementation-go]: ../../languages/go/exercises/concept/strings-package/.docs/instructions.md -[implementation-java]: ../../languages/java/exercises/concept/strings/.docs/instructions.md -[implementation-python]: ../../languages/python/exercises/concept/processing-logs/.docs/instructions.md -[implementation-ruby]: ../../languages/ruby/exercises/concept/strings/.docs/instructions.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[implementation-csharp]: https://github.com/exercism/csharp/blob/main/exercises/concept/log-levels/.docs/instructions.md +[implementation-cpp]: https://github.com/exercism/cpp/blob/main/exercises/concept/strings/.docs/instructions.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/log-levels/.docs/instructions.md +[implementation-go]: https://github.com/exercism/go/blob/main/exercises/concept/strings-package/.docs/instructions.md +[implementation-java]: https://github.com/exercism/java/blob/main/exercises/concept/strings/.docs/instructions.md +[implementation-python]: https://github.com/exercism/python/blob/main/exercises/concept/processing-logs/.docs/instructions.md +[implementation-ruby]: https://github.com/exercism/ruby/blob/main/exercises/concept/strings/.docs/instructions.md diff --git a/building/tracks/stories/strings.party-robot.md b/building/tracks/stories/strings.party-robot.md index ba01ad36..0a72724e 100644 --- a/building/tracks/stories/strings.party-robot.md +++ b/building/tracks/stories/strings.party-robot.md @@ -39,5 +39,5 @@ You will be sitting next to ! - [`types/string`][types-string] -[types-string]: ../types/string.md -[implementation-go]: ../../languages/go/exercises/concept/strings/.docs/instructions.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[implementation-go]: https://github.com/exercism/go/blob/main/exercises/concept/strings/.docs/instructions.md diff --git a/building/tracks/stories/strings.poetry-club-door-policy.md b/building/tracks/stories/strings.poetry-club-door-policy.md index 285dbce7..7b32d81e 100644 --- a/building/tracks/stories/strings.poetry-club-door-policy.md +++ b/building/tracks/stories/strings.poetry-club-door-policy.md @@ -72,6 +72,6 @@ with the renowned poets. - [`types/string`][types-string] -[types-string]: ../types/string.md -[implementation-javascript]: ../../languages/javascript/exercises/concept/strings/.docs/instructions.md -[implementation-swift]: ../../languages/swift/exercises/concept/poetry-club/.docs/instructions.md +[types-string]: https://github.com/exercism/v3/blob/main/reference/types/string.md +[implementation-javascript]: https://github.com/exercism/javascript/blob/main/exercises/concept/strings/.docs/instructions.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/poetry-club/.docs/instructions.md diff --git a/building/tracks/stories/structs-and-classes.windowing-system.md b/building/tracks/stories/structs-and-classes.windowing-system.md index 1aca64b0..28499a49 100644 --- a/building/tracks/stories/structs-and-classes.windowing-system.md +++ b/building/tracks/stories/structs-and-classes.windowing-system.md @@ -55,6 +55,6 @@ These are recommendations, not rules, for recurring terminology in the instructi - [`types/struct`][types-struct] - [`types/class`][types-class] -[types-struct]: ../types/struct.md -[types-class]: ../types/class.md -[implementation-swift]: ../../languages/swift/exercises/concept/windowing-system/.docs/instructions.md +[types-struct]: https://github.com/exercism/v3/blob/main/reference/types/struct.md +[types-class]: https://github.com/exercism/v3/blob/main/reference/types/class.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/windowing-system/.docs/instructions.md diff --git a/building/tracks/stories/sum-types.valentines-day.md b/building/tracks/stories/sum-types.valentines-day.md index 81b9ad57..7cd5e281 100644 --- a/building/tracks/stories/sum-types.valentines-day.md +++ b/building/tracks/stories/sum-types.valentines-day.md @@ -30,5 +30,5 @@ These are example tasks that fit the pizza delivery exercise: - [`types/sum_type`][types-sum_type] -[types-sum_type]: ../types/sum_type.md -[implementation-fsharp]: ../../languages/fsharp/exercises/concept/valentines-day/.docs/instructions.md +[types-sum_type]: https://github.com/exercism/v3/blob/main/reference/types/sum_type.md +[implementation-fsharp]: https://github.com/exercism/fsharp/blob/main/exercises/concept/valentines-day/.docs/instructions.md diff --git a/building/tracks/stories/ternary-operators.employee-salary.md b/building/tracks/stories/ternary-operators.employee-salary.md index dec76b09..720b26dc 100644 --- a/building/tracks/stories/ternary-operators.employee-salary.md +++ b/building/tracks/stories/ternary-operators.employee-salary.md @@ -32,5 +32,5 @@ These are recommendations, not rules, for recurring terminology in the instructi - [`types/boolean`][types-boolean] -[types-boolean]: ../types/boolean.md -[implementation-java]: ../../languages/java/exercises/concept/ternary-operators/.docs/instructions.md +[types-boolean]: https://github.com/exercism/v3/blob/main/reference/types/boolean.md +[implementation-java]: https://github.com/exercism/java/blob/main/exercises/concept/ternary-operators/.docs/instructions.md diff --git a/building/tracks/stories/tuples.carnival-game.md b/building/tracks/stories/tuples.carnival-game.md index 99319759..760b701c 100644 --- a/building/tracks/stories/tuples.carnival-game.md +++ b/building/tracks/stories/tuples.carnival-game.md @@ -20,4 +20,4 @@ This should guide students how to use: ## Implementations -[type-tuple]: ../types/tuple.md +[type-tuple]: https://github.com/exercism/v3/blob/main/reference/types/tuple.md diff --git a/building/tracks/stories/tuples.kitchen-calculator.md b/building/tracks/stories/tuples.kitchen-calculator.md index be94efc9..d27eca73 100644 --- a/building/tracks/stories/tuples.kitchen-calculator.md +++ b/building/tracks/stories/tuples.kitchen-calculator.md @@ -32,6 +32,6 @@ This should guide students how to use: - [Elixir: tuples][implementation-elixir] -[concept-duck-typing]: ../concepts/duck_typing.md -[type-tuple]: ../types/tuple.md -[implementation-elixir]: ../../languages/elixir/exercises/concept/kitchen-calculator/.docs/instructions.md +[concept-duck-typing]: https://github.com/exercism/v3/blob/main/reference/concepts/duck_typing.md +[type-tuple]: https://github.com/exercism/v3/blob/main/reference/types/tuple.md +[implementation-elixir]: https://github.com/exercism/elixir/blob/main/exercises/concept/kitchen-calculator/.docs/instructions.md diff --git a/building/tracks/stories/tuples.santas-helper.md b/building/tracks/stories/tuples.santas-helper.md index 80d95661..aff585b3 100644 --- a/building/tracks/stories/tuples.santas-helper.md +++ b/building/tracks/stories/tuples.santas-helper.md @@ -19,5 +19,5 @@ The story facilitates the exploration of [tuples][type-tuple] in a language. It - [`types/tuple`][type-tuple] -[type-tuple]: ../types/tuple.md -[implementation-swift]: ../../languages/swift/exercises/concept/santas-helper/.docs/instructions.md +[type-tuple]: https://github.com/exercism/v3/blob/main/reference/types/tuple.md +[implementation-swift]: https://github.com/exercism/swift/blob/main/exercises/concept/santas-helper/.docs/instructions.md diff --git a/community/contributors.md b/community/contributors.md index 9977a41f..8df88f43 100644 --- a/community/contributors.md +++ b/community/contributors.md @@ -16,4 +16,4 @@ There are lots of different ways to help with Exercism: ...and much more. -Visit our dedicated [Contributing Section](/building) to explore all the tasks that currently need doing. +Visit our dedicated [Contributing Section](/contributing) to explore all the tasks that currently need doing. diff --git a/community/good-member/README.md b/community/good-member/README.md index 84d4dc8e..9767d04e 100644 --- a/community/good-member/README.md +++ b/community/good-member/README.md @@ -48,7 +48,7 @@ And it is an incredible experience when both sides are open to new information ( It's easy to remember that feeling in the context of being a student in a mentoring session, but that spirit of openness just as important everywhere else within Exercism. When you think something sucks about the website, start by asking yourself what things you might _not_ know— a decision that looks ridiculous from your perspective might indicate a gap in your knowledge — just as much as it might indicate that the decision actually **is** ridiculous. -Take a look at our post on [Chesterton's Fence](./being-a-good-community-member/chestertons-fence) for some practical examples of how this principle applies. +Take a look at our post on [Chesterton's Fence](/docs/community/being-a-good-community-member/chestertons-fence) for some practical examples of how this principle applies. ## Disagree constructively @@ -133,4 +133,4 @@ There are lots of ways to embrace being kind within Exercism, but the most power In a cross-cultural space full of people from different backgrounds -- who share different beliefs, value-systems, and natural languages -- communicating clearly is a super-power. It's easy to know how you intend your words to _come across_, but it's difficult to know how others _perceive your words_. -Take a read of [The words that we use](./being-a-good-community-member/the-words-that-we-use) to learn more about why this matters so much. +Take a read of [The words that we use](/docs/community/being-a-good-community-member/the-words-that-we-use) to learn more about why this matters so much. diff --git a/community/maintainers.md b/community/maintainers.md index 9242e544..d2853114 100644 --- a/community/maintainers.md +++ b/community/maintainers.md @@ -7,7 +7,7 @@ They are senior members of our community who have demonstrated their alignment t This document outlines a formal process to become and remain a Maintainer, which has been designed to make it achievable and fair for everyone. If you want to one day become a Maintainer (yay!!), then please read on! -But remember, most people who help build Exercism are not Maintainers - they are [Contributors](./Contributors). +But remember, most people who help build Exercism are not Maintainers - they are [Contributors](/docs/community/contributors). **There is no barrier to contributing to Exercism** and every bit of help is gratefully received. We aim to have at least active two Maintainers for each Track, and at least one active maintainer for all the parts of the platform. diff --git a/mentoring/README.md b/mentoring/README.md index 468998e5..b5880e5f 100644 --- a/mentoring/README.md +++ b/mentoring/README.md @@ -1 +1,4 @@ # Mentoring on Exercism + +- [Choosing a Solution](/docs/mentoring/choosing-a-solution) +- [How to give great feedback](/docs/mentoring/how-to-give-great-feedback) diff --git a/mentoring/choosing_a_solution.md b/mentoring/choosing_a_solution.md index 8c735a9f..43f7341a 100644 --- a/mentoring/choosing_a_solution.md +++ b/mentoring/choosing_a_solution.md @@ -43,7 +43,7 @@ The UI will look something like this: 1. The main part of the left side contains the student's code. By default you'll be seeing their most recent iteration. - If they've submitted multiple iterations, you can switch through these using the numbers in circles at the bottom. + If they've submitted multiple iterations, you can switch through these using the numbers in circles at the bottom. If they've only submitted one iteration, you won't see those icons. 2. You can use the tabs at the top to switch between the student's code, the tests, and the instructions. @@ -74,4 +74,4 @@ If you click on this you'll see some information that might be useful for you: If you've read the code, checked the guidance, and feel you can be helpful, then it's time to get going! Click the "Start mentoring" button and you'll be prompted to write your feedback. -Have a read of [How to give great feedback](./how-to-give-great-feedback) next! +Have a read of [How to give great feedback](/docs/community/how-to-give-great-feedback) next! diff --git a/mentoring/how_to_give_great_feedback.md b/mentoring/how_to_give_great_feedback.md index 88de1583..7cf2c2d3 100644 --- a/mentoring/how_to_give_great_feedback.md +++ b/mentoring/how_to_give_great_feedback.md @@ -1,7 +1,7 @@ # How to give great feedback At this stage you should have chosen a solution to mentor. -If you haven't, work your way through [Choosing a solution to mentor](./choosing-a-solution) first, then come back here. +If you haven't, work your way through [Choosing a solution to mentor](/docs/mentoring/choosing-a-solution) first, then come back here. ## Your first feedback @@ -84,5 +84,5 @@ As you gain experience mentoring, you will get a feel for the different ways stu ## Unsure of something? Chat to other mentors? One of the best things about being an Exercism mentor is the community of other mentors you can learn from. -If you've got a question about a solution, or just want to bounce ideas with other mentors, jump into our [Slack Workspace]() and ask away! +If you've got a question about a solution, or just want to bounce ideas with other mentors, jump into our [Slack Workspace](https://exercism-team.slack.com/) and ask away! You'll probably find people you can help there too 🙂 diff --git a/using/README.md b/using/README.md index 7975f164..5b6c410a 100644 --- a/using/README.md +++ b/using/README.md @@ -2,5 +2,5 @@ These documents describe how to make the most of your experience on Exercism. -- [Getting Feedback](./feedback/README) -- [Solving Exercises](./solving-exercises/README) +- [Getting Feedback](/docs/using/feedback) +- [Solving Exercises](/docs/using/solving-exercises) diff --git a/using/feedback/README.md b/using/feedback/README.md index 4ae1467a..22a6fafd 100644 --- a/using/feedback/README.md +++ b/using/feedback/README.md @@ -2,8 +2,8 @@ There are two types of feedback you can get on a solution: -1. [Automated Feedback](./feedback/automated) -2. [Mentor Feedback](./feedback/mentor) +1. [Automated Feedback](/docs/using/feedback/automated) +2. [Mentor Feedback](/docs/using/feedback/mentor) ## What is the difference between Automated Feedback and Mentor Feedback? diff --git a/using/legal/README.md b/using/legal/README.md index 7f649f75..7c6a195a 100644 --- a/using/legal/README.md +++ b/using/legal/README.md @@ -2,7 +2,8 @@ The following pages contain important information that explains your rights and responsibilities when using Exercism. -- [Terms of Service](./legal/terms-of-service) -- [Privacy Policy](./legal/privacy-policy) -- [Cookie Policy](./legal/cookie-policy) -- [Accessibility Statement](./legal/accessibility) +- [Accessibility Statement](/docs/using/legal/accessibility) +- [Code of Conduct](/docs/using/legal/code-of-conduct) +- [Cookie Policy](/docs/using/legal/cookie-policy) +- [Privacy Policy](/docs/using/legal/privacy-policy) +- [Terms of Service](/docs/using/legal/terms-of-service) diff --git a/using/legal/accessibility.md b/using/legal/accessibility.md index 85b78444..346ed88f 100644 --- a/using/legal/accessibility.md +++ b/using/legal/accessibility.md @@ -16,4 +16,4 @@ Our website is compliant with the Web Content Accessibility Guidelines version 2 ## Improving accessibility We are always keen to know if parts of our websites are not accessible. -If you find something that's not good enough, please open an issue on our [issue tracker](https://github.com/exercism/exercise) explaining what we need to improve. +If you find something that's not good enough, please open an issue on our [issue tracker](https://github.com/exercism/exercism/issues) explaining what we need to improve. diff --git a/using/legal/privacy-policy.md b/using/legal/privacy-policy.md index 9612d3fb..30715c13 100644 --- a/using/legal/privacy-policy.md +++ b/using/legal/privacy-policy.md @@ -13,9 +13,9 @@ software coding skills. Exercism is run and managed by Exercism ("We", "Us"), a not-profit-company registered in the UK with Company Number 11733062. You might also want to read: -- Our [Terms of Service](../terms-of-service) -- Our community [Code of Conduct](../code-of-conduct) -- Our [Cookie Policy](../cookie-policy) +- Our [Terms of Service](/docs/using/legal/terms-of-service) +- Our community [Code of Conduct](/docs/using/legal/code-of-conduct) +- Our [Cookie Policy](/docs/using/legal/cookie-policy) Our approach to your privacy is very straightforward to understand. @@ -64,7 +64,7 @@ It is important to note that any content you upload to the site (including, but ### Cookies -Please refer to our [Cookie Policy](../cookie-policy) for details on the cookies we store. +Please refer to our [Cookie Policy](/docs/using/legal/cookie-policy) for details on the cookies we store. ## How we use the information we've collected diff --git a/using/legal/terms-of-service.md b/using/legal/terms-of-service.md index e434163f..f6674cfc 100644 --- a/using/legal/terms-of-service.md +++ b/using/legal/terms-of-service.md @@ -13,8 +13,8 @@ The following Terms of Service (these **Terms**) are an agreement between **Exer You might also want to read: -- Our [Privacy Policy](https://exercism.io/privacy) -- Our community [Code of Conduct](https://exercism.io/code-of-conduct) +- Our [Privacy Policy](/docs/using/legal/privacy-policy) +- Our community [Code of Conduct](/docs/using/legal/code-of-conduct) Our general approach should be fairly straightforward to understand: @@ -37,7 +37,7 @@ If any provision of these Terms is found to be illegal, void or unenforceable, t We reserve the right to modify these Terms at any time by posting revised Terms on https://exercism.io. These Terms apply to all who access or use our Platform, registered or otherwise. -Any personal information submitted to our Platform is subject to our [Privacy Policy](https://exercism.io/privacy). +Any personal information submitted to our Platform is subject to our [Privacy Policy](/docs/using/legal/privacy-policy). ### Definitions diff --git a/using/licenses/README.md b/using/licenses/README.md index 2658abd7..448dae14 100644 --- a/using/licenses/README.md +++ b/using/licenses/README.md @@ -2,5 +2,5 @@ Exercism uses various licenses for different repositories and content. We provide a central copy of them here. - [MIT](/docs/using/licenses/mit) -- [AGPL 3.0](/docs/using/licenses/apgl) +- [AGPL 3.0](/docs/using/licenses/agpl) - [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](/docs/using/licenses/cc-by-nc-sa) diff --git a/using/report-abuse.md b/using/report-abuse.md index 90495bbb..c8ed5b51 100644 --- a/using/report-abuse.md +++ b/using/report-abuse.md @@ -4,5 +4,5 @@ Feeling uncomfortable? Had a worrying or uncomfortable interaction with someone Please reach out to us and we will try to fix or resolve the issue respecting both you and your privacy. The best way to contact us is to email us at [abuse@exercism.io](mailto:abuse@exercism.io). -In addition to reporting abuse, community members are welcome to refer users to the [Code of Conduct](https://exercism.io/code-of-conduct) if they feel safe doing so. +In addittion to reporting abuse community members are welcome to refer users to the [Code of Conduct](/docs/using/legal/code-of-conduct) if they feel safe doing so. Keep in mind that this type of action is meant to resolve issues. As such, it is better to pose it as a question, eg. "Do you feel like that comment is aligned to Exercism's COC" rather than "You're in violation of the COC" diff --git a/using/solving-exercises/README.md b/using/solving-exercises/README.md index 52d463d7..aced45ac 100644 --- a/using/solving-exercises/README.md +++ b/using/solving-exercises/README.md @@ -4,8 +4,8 @@ The primary way in which Exercism helps you learn is by solving exercises. There are two ways to solve exercises on Exercism: -1. [Online via the website's in-browser editor](./solving-exercises/using-the-online-editor) -2. [On your local machine via the CLI](./solving-exercises/working-locally) +1. [Online via the website's in-browser editor](/docs/using/solving-exercises/using-the-online-editor) +2. [On your local machine via the CLI](/docs/using/solving-exercises/working-locally) ## Which option should I choose? diff --git a/using/solving-exercises/working-locally.md b/using/solving-exercises/working-locally.md index 00080548..52ef43fa 100644 --- a/using/solving-exercises/working-locally.md +++ b/using/solving-exercises/working-locally.md @@ -94,4 +94,4 @@ If you are still having trouble open an issue in exercism/cli on GitHub with the exercism troubleshoot ``` -You can open issues on [our issue tracker](https://github.com/exercism/exercism.io) and the community will try to help you. **Please ensure you have worked through the [Interactive Walkthrough](https://exercism.io/cli-walkthrough) before opening any issues.** +You can open issues on [our issue tracker](https://github.com/exercism/exercism/issues) and the community will try to help you. **Please ensure you have worked through the [Interactive Walkthrough](https://exercism.io/cli-walkthrough) before opening any issues.**