From 664a7b57bd171d58c253f198cc2914aeab4a1af6 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Wed, 26 Feb 2025 12:20:55 -0800 Subject: [PATCH] Various updates/fixes for recent chkentry mods --- faq.html | 392 ++++++++++++++++++++----------------- faq.md | 451 ++++++++++++++++++++++++------------------- next/guidelines.html | 104 ++++++---- next/guidelines.md | 113 +++++++---- next/rules.html | 148 ++++++++------ next/rules.md | 155 ++++++++------- quick-start.html | 21 +- quick-start.md | 21 +- 8 files changed, 804 insertions(+), 601 deletions(-) diff --git a/faq.html b/faq.html index 72771a990..ad9a3ea7d 100644 --- a/faq.html +++ b/faq.html @@ -425,7 +425,7 @@

IOCCC FAQ Table of Contents

-

This is FAQ version 28.2.9 2025-02-12.

+

This is FAQ version 28.2.10 2025-02-26.

0. Entering the IOCCC: the bare minimum you need to know

NOTE: sometimes an IOCCC year runs into another year and the contest year might not match when it ends.

-

NOTE: this MUST match THIS IOCCC’s contest, defined as +

IMPORTANT: this MUST match THIS IOCCC’s contest, defined as IOCCC_YEAR in soup/limit_ioccc.h in the mkiocccentry repo. If @@ -1816,17 +1847,17 @@ this is not the case your submission WILL BE rejected!

-

NOTE: this MUST match THIS IOCCC’s mkiocccentry version, +

IMPORTANT: this MUST match THIS IOCCC’s mkiocccentry version, defined as MKIOCCCENTRY_VERSION in soup/version.h in the mkiocccentry repo. If this is not the case your submission WILL BE rejected!

  • chkentry_version (double quoted string)

    -

    NOTE: this MUST match THIS IOCCC’s chkentry version, defined +

    IMPORTANT: this MUST match THIS IOCCC’s chkentry version, defined as CHKENTRY_VERSION in soup/version.h in the mkiocccentry repo. If @@ -1836,7 +1867,7 @@ this is not the case your submission WILL BE rejected!

  • The version of fnamchk that txzchk uses to validate the filename of the xz compressed tarball.
  • -

    NOTE: this MUST match THIS IOCCC’s fnamchk version in order for it +

    IMPORTANT: this MUST match THIS IOCCC’s fnamchk version in order for it to be valid. If this is not the case your submission WILL BE rejected!

  • IOCCC_contest_id (double quoted string)

    -

    NOTE: this MUST be within the range MIN_FORMED_TIMESTAMP_USEC +

    IMPORTANT: this MUST be within the range MIN_FORMED_TIMESTAMP_USEC THROUGH MAX_FORMED_TIMESTAMP_USEC and is validated by test_formed_timestamp_usec() in soup/entry_util.c @@ -1994,7 +2030,7 @@ submission WILL BE rejected!

  • -

    NOTE: this MUST be "Thu Jan 01 00:00:00 1970 UTC" which is #defined +

    IMPORTANT: this MUST be "Thu Jan 01 00:00:00 1970 UTC" which is #defined as TIMESTAMP_EPOCH in soup/limit_ioccc.h in the mkiocccentry repo. If @@ -2003,30 +2039,35 @@ this is not the case your submission WILL BE rejected!

    -

    NOTE: this MUST be >= MIN_TIMESTAMP defined in +

    IMPORTANT: this MUST be >= MIN_TIMESTAMP defined in soup/limit_ioccc.h in the mkiocccentry repo. If this is not the case your submission WILL BE rejected!

    -

    This file will be verified with the chkentry(1) tool and if there are any -problems it is an error. If there is an error the tarball will NOT be -formed by mkiocccentry; otherwise the txzchk(1) tool will be executed on the -tarball.

    -

    This file will NOT be looked at unless the submission wins! Nonetheless, -chkentry(1) WILL BE used on the file as part of the judging process.

    +

    This file will be validated with the chkentry(1) tool and if there are any +problems with it or the submission directory, it is an error. If there is an +error the tarball will NOT be formed by mkiocccentry; otherwise the +txzchk(1) tool will be executed on the tarball.

    +

    This file will NOT be looked at unless the submission wins! Nonetheless, the +file MUST be present in the submission directory and it MUST be valid +JSON and it MUST pass all IOCCC semantics checks and all other checks +chkentry(1) perform. chkentry(1) is used by mkiocccentry(1) and the judges +will use it on the submission directory as part of the judging process.

    At the risk of stating the obvious, if your .auth.json file is invalid JSON or -is reported invalid by chkentry your submission will almost certainly be +is reported invalid by chkentry(1), or if your submission directory is +reported invalid by chkentry(1), your submission will almost certainly be rejected for violating the Rules and in particular Rule 17.

    -

    An obvious example where chkentry would fail to validate .auth.json is if +

    An obvious example where chkentry(1) would fail to validate .auth.json is if there is a mismatch of type in the JSON file with what is expected, for instance, if in .auth.json the no_comment that we chose to not comment on is -not a string. Another obvious example is when things are out of range (see above -for list). Two more examples would be if a field is missing or if an unknown -filed is in the file. In these cases (and any others that must be established as -valid by chkentry) your submission would be rejected for violating Rule -17 and in particular because chkentry would not -validate the .auth.json file.

    +not a string or is the wrong string. Another obvious example is when things are +out of range (see above for list). Two more examples would be if a field is +missing or if an unknown filed is in the file. In these cases (and any others +that must be established as valid by chkentry(1)) your submission would be +rejected for violating Rule 17 and in particular +because chkentry(1) would not validate the .auth.json file (and maybe other +things too).

    If you wish to verify that your .auth.json file is valid JSON then see the FAQ on “validating JSON documents”.

    Jump to: top

    @@ -2066,7 +2107,7 @@ for more information.

    -

    NOTE: this MUST match THIS IOCCC’s .info.json version, defined as +

    IMPORTANT: this MUST match THIS IOCCC’s .info.json version, defined as INFO_VERSION in soup/version.h in the mkiocccentry repo. If @@ -2075,7 +2116,7 @@ this is not the case your submission WILL BE rejected!

    -

    NOTE: this MUST match THIS IOCCC’s contest value, defined as +

    IMPORTANT: this MUST match THIS IOCCC’s contest value, defined as IOCCC_CONTEST in soup/limit_ioccc.h in the mkiocccentry repo. If @@ -2086,7 +2127,7 @@ this is not the case your submission WILL BE rejected!

    NOTE: sometimes an IOCCC year runs into another year and the contest year might not match when it ends.

    -

    NOTE: this MUST match THIS IOCCC’s contest, defined as +

    IMPORTANT: this MUST match THIS IOCCC’s contest, defined as IOCCC_YEAR in soup/limit_ioccc.h in the mkiocccentry repo. If @@ -2095,7 +2136,7 @@ this is not the case your submission WILL BE rejected!

    -

    NOTE: this MUST match THIS IOCCC’s mkiocccentry version, +

    IMPORTANT: this MUST match THIS IOCCC’s mkiocccentry version, defined as MKIOCCCENTRY_VERSION in soup/version.h in the mkiocccentry repo. If @@ -2104,17 +2145,17 @@ this is not the case your submission WILL BE rejected!

    -

    NOTE: this MUST match THIS IOCCC’s iocccentry version, +

    IMPORTANT: this MUST match THIS IOCCC’s iocccentry version, defined as IOCCCSIZE_VERSION in soup/version.h in the mkiocccentry repo. If this is not the case your submission WILL BE rejected!

  • chkentry_version (double quoted string)

    -

    NOTE: this MUST match THIS IOCCC’s chkentry version, defined +

    IMPORTANT: this MUST match THIS IOCCC’s chkentry version, defined as CHKENTRY_VERSION in soup/version.h in the mkiocccentry repo. If @@ -2124,7 +2165,7 @@ this is not the case your submission WILL BE rejected!

  • The version of fnamchk that txzchk uses to validate the filename of the xz compressed tarball.
  • -

    NOTE: this MUST match THIS IOCCC’s fnamchk version, defined +

    IMPORTANT: this MUST match THIS IOCCC’s fnamchk version, defined as FNAMCHK_VERSION in soup/version.h in the mkiocccentry repo. If @@ -2133,7 +2174,7 @@ this is not the case your submission WILL BE rejected!

    -

    NOTE: this MUST match THIS IOCCC’s txzchk version, defined +

    IMPORTANT: this MUST match THIS IOCCC’s txzchk version, defined as TXZCHK_VERSION in soup/version.h in the mkiocccentry repo. If @@ -2143,15 +2184,12 @@ this is not the case your submission WILL BE rejected!

  • The IOCCC contestant ID used as a username in the form of in the form of a UUID and submission number; see the rules for more details on this, and in particular Rule 17.
  • - -

    NOTE: if the contest ID is NOT in this format then fnamchk will -report it as an error and your submission WILL BE rejected for -violating Rule 17!

    +
  • submit_slot (number)

    -

    NOTE: this MUST be within the range of 0 THROUGH +

    IMPORTANT: this MUST be within the range of 0 THROUGH MAX_SUBMIT_SLOT (see soup/limit_ioccc.h in the mkiocccentry repo). If @@ -2164,7 +2202,7 @@ rejected for violating Rule 17!

  • in the mkiocccentry repo) that matches the regexp [a-z0-9][a-z0-9_+-]*. -

    NOTE: if this is NOT the case you stand a great risk of having your submission +

    IMPORTANT: if this is NOT the case you stand a great risk of having your submission rejected for violating Rule 17!

  • abstract (double quoted string)

    The abstract may not contain a ; (semicolon), nor & (ampersand), nor , (comma).

    -

    NOTE: if your abstract is 0 in length or > the maximum abstract length you +

    IMPORTANT: if your abstract is 0 in length or > the maximum abstract length you stand a great risk of having your submission rejected for violating Rule 17!

  • tarball (double quoted string)

    -

    NOTE: this MUST match the actual tarball’s filename in order for +

    IMPORTANT: this MUST match the actual tarball’s filename in order for this to be valid. If there is a mismatch you stand a great risk of having your submission rejected for violating Rule 17! Moreover, it is possible that txzchk will report a problem through fnamchk(1) which also puts you at great risk of violating Rule -17. If txzchk does not detect this, though, it -does not mean it’s a bug but rather that the directory in the tarball -matches the filename.

  • +17. txzchk will use the output of fnamchk to +obtain the correct directory name in the tarball; if fnamchk fails to +validate your filename, or if you have the wrong directory name in the +tarball, this will be flaggd.

  • rule_2a_size (number)

    -

    NOTE: if this violates Rule 2a you stand a great +

    IMPORTANT: if this violates Rule 2a you stand a great chance of having your submission rejected for violating the Rules!

  • rule_2b_size (number)

    -

    NOTE: if this violates Rule 2b you stand a great +

    IMPORTANT: if this violates Rule 2b you stand a great chance of having your submission rejected for violating the Rules!

  • empty_override (boolean)

    @@ -2212,7 +2251,7 @@ chance of having your submission rejected for violating the
  • true if user overrides warning of Rule 2a violation, else false.
  • -

    NOTE: if the Rule 2a calculated size is NOT +

    IMPORTANT: if the Rule 2a calculated size is NOT violated but this is true then you stand a good chance of having your submission rejected for violating Rule 17!

  • rule_2a_mismatch (boolean)

    @@ -2225,7 +2264,7 @@ same as the file size.
  • true if user overrides warning of Rule 2b violation, else false.
  • -

    NOTE: if the Rule 2b calculated size is NOT +

    IMPORTANT: if the Rule 2b calculated size is NOT violated but this is true then you stand a good chance of having your submission rejected for violating Rule 17!

  • highbit_warning (boolean)

    @@ -2249,7 +2288,7 @@ bit set - octet value >= 128); see Rule 13true if prog.c triggered a word buffer overflow (see iocccsize), else false.
  • -

    NOTE: this does NOT mean that your code has been checked for buffer +

    IMPORTANT: this does NOT mean that your code has been checked for buffer overflows in general.

  • ungetc_warning (boolean)

    -

    NOTE: if the Makefile file has no problems and this is true then +

    IMPORTANT: if the Makefile file has no problems and this is true then you stand a good chance of having your submission rejected for violating Rule 17!

    See the @@ -2270,7 +2309,7 @@ for more information.

  • -

    NOTE: if the Makefile file does NOT have an all rule or it is not +

    IMPORTANT: if the Makefile file does NOT have an all rule or it is not first and this boolean is true then you stand a good chance of having your submission rejected for violating Rule 17!

    See the @@ -2280,7 +2319,7 @@ for more information.

    -

    NOTE: if the Makefile file does NOT have an all rule and this +

    IMPORTANT: if the Makefile file does NOT have an all rule and this boolean is true, or if it does NOT have an all rule but first_rule_is_all is true then you stand a good chance of having your submission rejected for violating Rule 17!

    @@ -2291,7 +2330,7 @@ for more information.

    -

    NOTE: if the Makefile file does NOT have a clean rule and this +

    IMPORTANT: if the Makefile file does NOT have a clean rule and this boolean is true then you stand a good chance of having your submission rejected for violating Rule 17!

    See the @@ -2301,7 +2340,7 @@ for more information.

    -

    NOTE: if the Makefile file does NOT have an clobber rule and this +

    IMPORTANT: if the Makefile file does NOT have an clobber rule and this boolean is true then you stand a good chance of having your submission rejected for violating Rule 17!

    See the @@ -2311,7 +2350,7 @@ for more information.

    -

    NOTE: if the Makefile file does NOT have an try rule and this +

    IMPORTANT: if the Makefile file does NOT have a try rule and this boolean is true then you stand a good chance of having your submission rejected for violating Rule 17!

    See the @@ -2321,7 +2360,7 @@ for more information.

    -

    NOTE: if this is true then this may NOT be submitted to the +

    IMPORTANT: if this is true then this may NOT be submitted to the contest! Please do NOT email the Judges your submission!

    Next comes the manifest array which MUST have AT LEAST the following. @@ -2337,8 +2376,9 @@ See the FAQ on “.info.json” for more information. -

    NOTE: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

    +

    IMPORTANT: if this is NOT the case you stand a +great chance of having your submission rejected for violating Rule +17!

  • auth_JSON (double quoted string)

    -

    NOTE: if this is NOT the case you stand a great chance of having your +

    IMPORTANT: if this is NOT the case you stand a great chance of having your submission rejected for violating Rule 17!

  • c_src (double quoted string)

    -

    NOTE: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

    -

    NOTE: if you provide to mkiocccentry a different filename it will be -copied to prog.c.

  • +

    IMPORTANT: if this is NOT the case you stand a great chance of having your +submission rejected for violating Rule 17!

  • Makefile (double quoted string)

    -

    NOTE: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

    -

    NOTE: if you provide to mkiocccentry a different filename it will be -copied to Makefile.

  • +

    IMPORTANT: if this is NOT the case you stand a great chance of having your +submission rejected for violating Rule 17!

  • remarks (double quoted string)

    -

    NOTE: if this is NOT the case you stand a great chance of having your -submission rejected for violating Rule 17!

    -

    NOTE: if you provide to mkiocccentry a different filename it will be -copied to remarks.md.

  • +

    IMPORTANT: if this is NOT the case you stand a great chance of having your +submission rejected for violating Rule 17!

    The manifest array also OPTIONALLY has one or more of the field:

    Finally, after the manifest array, the following fields MUST exist:

    -

    NOTE: this MUST be within the range MIN_FORMED_TIMESTAMP_USEC +

    IMPORTANT: this MUST be within the range MIN_FORMED_TIMESTAMP_USEC THROUGH MAX_FORMED_TIMESTAMP_USEC and is validated by test_formed_timestamp_usec() in soup/entry_util.c @@ -2434,7 +2469,7 @@ submission WILL BE rejected!

    -

    NOTE: this MUST be "Thu Jan 01 00:00:00 1970 UTC" which is #defined +

    IMPORTANT: this MUST be "Thu Jan 01 00:00:00 1970 UTC" which is #defined as TIMESTAMP_EPOCH in soup/limit_ioccc.h in the mkiocccentry repo. If @@ -2443,25 +2478,26 @@ this is not the case your submission WILL BE rejected!

    -

    NOTE: this MUST be >= MIN_TIMESTAMP defined in +

    IMPORTANT: this MUST be >= MIN_TIMESTAMP defined in soup/limit_ioccc.h in the mkiocccentry repo. If this is not the case your submission WILL BE rejected!

    -

    This file will be verified with the chkentry(1) tool and if there are any -problems it is an error and the tarball will NOT be formed by -mkiocccentry; otherwise the txzchk(1) tool will be executed on the tarball.

    +

    This file will be validated with the chkentry(1) tool and if there are any +problems with it or the submission directory, it is an error. If there is an +error the tarball will NOT be formed by mkiocccentry; otherwise the +txzchk(1) tool will be executed on the tarball.

    The Judges WILL use chkentry(1) on this file during the judging process and if it does not pass your submission WILL BE rejected.

    An obvious example where chkentry would fail to validate .info.json is if there is a mismatch of type in the JSON file with what is expected, for instance, if in .info.json the no_comment that we chose to not comment on is -not a string. Another obvious example is when things are out of range (see above -for list). Two more examples would be if a field is missing or if an unknown -filed is in the file. In these cases (and any others that must be established as -valid by chkentry) your submission would be rejected for violating Rule -17 and in particular because chkentry would not -validate the .info.json file.

    +not a string or is the wrong string. Another obvious example is when things are +out of range (see above for list). Two more examples would be if a field is +missing or if an unknown filed is in the file. In these cases (and any others +that must be established as valid by chkentry) your submission would be +rejected for violating Rule 17 and in particular +because chkentry would not validate the .info.json file.

    If you wish to verify that your .info.json file is valid JSON then see the FAQ on “validating JSON documents”.

    Jump to: top

    @@ -4049,8 +4085,8 @@ below note) this would be advisable.

    NOTE: different versions of clang have other differences as well. For instance a defect of clang that required numerous entries to be fixed for clang is that it requires that main()’s arguments to be of a specific type. However some -versions of clang are more strict in the number of args allowed. -Jump to: top

    +versions of clang are more strict in the number of args allowed.

    +

    Jump to: top



    diff --git a/faq.md b/faq.md index a6a717c97..d4cd97f12 100644 --- a/faq.md +++ b/faq.md @@ -1,6 +1,6 @@ # IOCCC FAQ Table of Contents -This is FAQ version **28.2.9 2025-02-12**. +This is FAQ version **28.2.10 2025-02-26**. ## 0. [Entering the IOCCC: the bare minimum you need to know](#enter_questions) @@ -45,7 +45,7 @@ This is FAQ version **28.2.9 2025-02-12**. - **Q 3.0**: What is the `mkiocccentry(1)` process and what sort of checks does it perform? - **Q 3.1**: How can I validate my submission tarball? - **Q 3.2**: What is the `fnamchk` tool? -- **Q 3.3**: How can I validate my `.auth.json` and/or `.info.json` files? +- **Q 3.3**: How can I validate my submission directory? - **Q 3.4**: What is a `.auth.json` file? - **Q 3.5**: What is a `.info.json` file? - **Q 3.6**: What is an `author handle`? @@ -218,12 +218,23 @@ code, your Makefile, your remarks, any other data files you wish to provide (up to a maximum, including the mandatory files, defined in [limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) as `MAX_FILE_COUNT`) and other information about your submission, -information about the author (or authors), and then it runs a lot of tests. +information about the author (or authors), and then it will give you a list of +subdirectories, if any, that will be made, and files that will be copied to the +submission directory. It will list files and directories that it will (for +various reasons) not create as well, asking you to confirm these things are all +okay. Some things are strictly forbidden (such as a directory tree too deep) and +it will tell you about these as well, so you can fix it. + +Assuming you agree to the list of directories and files, it will make the +directories (if necessary) and copy the files. It will then switch to the +submission directory, run `make clobber` and then scan the directory again, +looking for mismatches. If no errors are detected it will list everything to you +again, asking you to confirm it is good. If everything is OK, it will write the required `.auth.json` and `.info.json` -files, checking each with `chkentry(1)` and then, if all is OK, it will create -the tarball. After the tarball is formed, it will run `txzchk(1)` on it, which -runs `fnamchk(1)`. If all is OK, your submission tarball should be good to go. +and then run `chkentry(1)` on the directory. If all is OK it will create the +tarball. After the tarball is formed, it will run `txzchk(1)` on it, which runs +`fnamchk(1)`. If all is OK, your submission tarball should be good to go. Please see FAQ on "[txzchk](#txzchk)", @@ -328,21 +339,22 @@ cause problems. Additionally, if you do not have the most recent version when submitting a tarball it will be rejected for not having the right versions of the tools. This is why you **MUST** make sure you have the most recent version of all the tools and you either run it from the repo directory itself OR you -install them (`make install` as via `sudo` or as root). +install them (`make install` as via `sudo` or as root). We recommend you install +the tools but if you wish to run it from the repo directory you may. If the **_subdirectory_ in the _work directory_** (based on your submit ID and -slot number) already exists, you will have to -move it, remove it or otherwise specify a different work directory (**NOT** the -subdirectory), as it needs to be empty. +slot number) already exists, you will have to move it, remove it or otherwise +specify a different work directory (**NOT** the subdirectory), as it needs to be +empty. -This _subdirectory is where your files will be **copied** to_. Your _submission -tarball_ (which you will upload to the submit server) that `txzchk(1)` will -validate _will be placed in the **work directory**_, and **its _contents_ will -be the _subdirectory_ with your submission's files**. -The `mkiocccentry(1)` tool will also ask you for information about your -submission _as well as author details_ (that will only be looked at if the -submission wins), run some tests and run a number of other tools, as -mentioned above, and as described in the "[finer +This _subdirectory is where your directories will be made and where your files +will be **copied** to_. Your _submission tarball_ (which you will upload to the +submit server) that `txzchk(1)` will validate _will be placed in the **work +directory**_, and **its _contents_ will be the _subdirectory_ with your +submission's files**. The `mkiocccentry(1)` tool will also ask you for +information about your submission _as well as author details_ (that will only be +looked at if the submission wins), run some tests and run a number of other +tools, as mentioned above, and as described in the "[finer details](#mkiocccentry_details)" section. See also the @@ -542,7 +554,7 @@ Jump to: [top](#) ### Q 0.6: What permissions may my files be and what if I need different permissions?
    -As [Rule 17](#rule17) states, files in your submission tarball **MUST** be +As [Rule 17](next/rules.html#rule17) states, files in your submission tarball **MUST** be specific permissions. In particular: directories **MUST** be `drwxr-xr-x` (i.e. `0755`), the optional files, `try.sh` or `try.alt.sh`, if provided, **MUST** be `-r-xr-xr-x` (i.e. `0555`) and all other files **MUST** be `-r--r--r--` (i.e. @@ -662,7 +674,7 @@ Jump to: [top](#) The IOCCC makes extensive use of [markdown](https://daringfireball.net/projects/markdown/). For example, when [submitting to the IOCCC](next/submit.html), we have people -submit remarks about entry in markdown format. Every +submit remarks about their submission(s) in markdown format. Every [winning IOCCC entry](years.html) uses a `README.md` markdown file as the basis for forming the `index.html` web page for that entry. All generated HTML pages on the [Official IOCCC website](https://www.ioccc.org/index.html) @@ -731,6 +743,10 @@ This will run the tests that `mkiocccentry(1)`, write the JSON files, use `chkentry(1)`, package the tarball and run `txzchk(1)` on it. See also the +FAQ on "[mkiocccentry](#mkiocccentry)", +the +FAQ on "[using mkiocccentry](#using_mkiocccentry)", +the FAQ on "[.info.json](#info_json)", the FAQ on "[.auth.json](#auth_json)", @@ -766,6 +782,20 @@ number of files (including extra files) but also specific rules you must follow if you do include a tarball. Not following these points puts you at great risk of violating [Rule 17](next/rules.html#rule17)! +Also, remember what the [guidelines](next/guidelines.html) say: + +> **IMPORTANT REMINDER**: make **SURE** your tarball does **NOT** reveal who you are! +The `mkiocccentry(1)` tool creates a v7 format tarball to prevent this. + +You can do this by creating the tarball like: + + +``` + tar --format=v7 -cJf foo.txz directory +``` + + +

    @@ -873,19 +903,23 @@ Jump to: [top](#) There are unfortunately some warnings that cannot be disabled; they are always enabled whatever warning options you have enabled. Also, there is a warning that -is enabled whenever you act on `char *`s, saying it is unsafe buffer usage, even -when it's not. This might be enabled by `-Weverything` but it might not be; for -more details on why we use `-Weverything` in Clang see the -FAQ on "[-Weverything](#weverything)". +is enabled whenever you use a pointer as a buffer, saying it is unsafe buffer +usage, even when it is not. -It is not detrimental to your submission if you disable this, which you can do -by specifying `-Wno-unsafe-buffer-usage`. +This might be enabled by `-Weverything` but it might not be but it is not +detrimental to your submission if you disable this, which you can do by +specifying `-Wno-unsafe-buffer-usage`. So in short, no you should not worry about these as they are sometimes inevitable in obfuscated code and even non-obfuscated code. If you *can* work past this it might be good but this is not something that should be worried about too much as this is on the compiler developers, not you. +Of course if you do work past it feel free to brag, though **BE SURE TO TELL +US** the OS, OS version, compiler and compiler version. + +For more details on why we use `-Weverything` in Clang see the FAQ on +"[-Weverything](#weverything)". Jump to: [top](#) @@ -1219,11 +1253,12 @@ verify everything is in order. If something is not allowed (bad filename for example) or an error occurs (missing required file for example) you will be notified of this. After you verify everything is okay the files/directories found will be copied/made and it will then switch to the submission directory. -In the submission directory it scans the file hierarchy again and verifies -things are still okay. When done it will ask you to verify things are still OK. -If all is good it'll ask you for more information about the author(s). Next the -two required JSON files `.auth.json` and `.info.json` will be created, running -`chkentry(1)` on each. If all is good it'll give you another chance to say the +In the submission directory it first runs `make clobber` and then scans the +directory hierarchy again, verifying things are still okay. When done it will +ask you to verify things still look OK to you too. If all is good it'll ask you +for more information about the author(s). Next the two required JSON files +`.auth.json` and `.info.json` will be created. After that `chkentry(1)` will be +run on the directory. If all is good it'll give you another chance to say the files/directories look good and if you answer yes it'll create the tarball and run `txzchk` on it. @@ -1369,21 +1404,18 @@ submission directory. 13. Ask the user for a one line abstract of the submission. 14. Ask the user for the number of authors and for each author ask a variety of questions (see below for more information on what kind of questions). -15. Create `.info.json` and run `chkentry(1)` on it. - * If `chkentry(1)` fails to validate the file make sure that you have - obtained and compiled the latest version of all the tools and you either are - in the repo's directory, you pass the options to give the path to the tools - or you have installed the latest tools! -16. Create `.auth.json` and run `chkentry(1)` on it. - * If `chkentry(1)` fails to validate the file make sure that you have - obtained and compiled the latest version of all the tools and you either are - in the repo's directory, you pass the options to give the path to the tools - or you have installed the latest tools! -17. Show the output of `ls -lakR .`, asking the user to confirm that the listing +15. Create `.info.json`. +16. Create `.auth.json`. +17. Run `chkentry(1)` on your submission directory to verify things look good, +including that the `.info.json` and `.auth.json` files are okay. + * It also checks that the manifest in `.info.json` matches what is in the + submission directory and it verifies file permissions too; if you wish to + know what else it does we suggest you read the source code. +18. Show the output of `ls -lakR .`, asking the user to confirm that the listing is okay. -18. Create the tarball with the name in the form of +19. Create the tarball with the name in the form of `submit.USERNAME-SLOT.TIMESTAMP`. -19. Run `txzchk(1)` on the tarball. +20. Run `txzchk(1)` on the tarball. If any of the steps fail or if the user says something is not okay, it aborts. Some of the other checks that are made: @@ -1554,51 +1586,66 @@ Jump to: [top](#)
    -### Q 3.3: How can I validate my `.auth.json` and/or `.info.json` files? +### Q 3.3: How can I validate my submission directory?
    -If you want to validate the `.auth.json` or `.info.json` files you -should use `chkentry(1)` from the [mkiocccentry -repo](https://github.com/ioccc-src/mkiocccentry). +If you want to validate your submission directory manually, including but not +limited to the `.auth.json` or `.info.json` files, you should use `chkentry(1)` +from the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). -The `chkentry(1)` tool uses the IOCCC version of the [jparse +The `chkentry(1)` tool runs a variety of checks on your submission directory, +including but not limited to, using the [jparse API](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3) -to perform **additional** checks on these two IOCCC specific JSON files. It is -_possible_ that this version will at times differ from the [official jparse -API](https://github.com/xexyl/jparse/blob/master/man/man3/jparse.3) at the -[official jparse repo](https://github.com/xexyl/jparse) and this is one of the -reasons the tools' `-V` (version option) show the JSON parser version as well. +to validate the two IOCCC specific JSON files (as valid JSON) and additional +checks on those files as well. An important thing that it does is verify that +your files are the right permissions and that the manifest in the `.info.json` +files match what is in the directory. What all the checks are is out of scope of this +document; if you wish to know we recommend you read the [source +code](https://github.com/ioccc-src/mkiocccentry/blob/master/chkentry.c). + +**NOTE**: the IOCCC [jparse +API](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/man/man3/jparse.3) +is a synced copy of the [official jparse +repo](https://github.com/xexyl/jparse) _at the time of the contest open date_. See the FAQ on "[.auth.json](#auth_json)" and FAQ on "[.info.json](#info_json)" -for more details on these files. +for more details on the two required and very important JSON files. + +The `chkentry(1)` tool accepts a single arg, a directory that **MUST** have the +two JSON files, `.auth.json` and `.info.json`. (Okay there is an option to skip +files but this is for the judges **ONLY**; use of this option to validate your +submission puts you at a great risk of violating [Rule +17](next/rules.html#rule17)!). + +As an example, if your submission directory is `12345678-1234-4321-abcd-1234567890ab-0/` then you should run the +following command: -The `chkentry(1)` tool accepts more than one command line form. -You may specify a `.auth.json` and/or -`.info.json` file. An argument of "`.`" will skip that file. For instance: ``` - # run checks on .info.json: - chkentry . .info.json - - # run checks on .auth.json: - chkentry .auth.json . - - # run checks on .auth.json and .info.json: - chkentry .auth.json .info.json + chkentry 12345678-1234-4321-abcd-1234567890ab-0 ``` If there is a [JSON](https://www.json.org/json-en.html) issue detected by the -`jparse(3)` API, then there is a [JSON](https://www.json.org/json-en.html) error and -`chkentry(1)` will report it as an **error**. If the parsing is OK (i.e. valid -JSON) but there is an issue in one or both of the +`jparse(3)` API (i.e. it is not valid JSON) it is an error and `chkentry(1)` +will report this, exiting with a non-zero exit code. If the parsing is OK (i.e. +valid JSON) but there is an issue in one or both of the [JSON](https://www.json.org/json-en.html) files in **the context of the IOCCC**, -it will report this as an **error**. Thus, if you were to package your -submission manually then you would be violating [Rule -17](next/rules.html#rule17). +it will report this as an **error**. It also does, as briefly noted above, other +checks. + +If `chkentry(1)` fails to validate your submission directory your submission +**WILL** be **REJECTED**! This is why you **MUST** make sure you use the +`mkiocccentry(1)` tool to form your submission directory. + +See the +FAQ on "[.auth.json](#auth_json)" +and the +FAQ on "[.info.json](#info_json)" +as well as [Rule 17](next/rules.html#rule17) for more information. Jump to: [top](#) @@ -1628,7 +1675,7 @@ In order of the file's contents we describe each required field, below: - `IOCCC_auth_version` (double quoted string) * The current version of the `.auth.json` file. - **NOTE:** this **MUST** match **THIS** IOCCC's `.auth.json` version, defined as + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `.auth.json` version, defined as `AUTH_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1637,7 +1684,7 @@ In order of the file's contents we describe each required field, below: - `IOCCC_contest` (double quoted string) * Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020). - **NOTE:** this **MUST** match **THIS** IOCCC's contest value, defined as + **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest value, defined as `IOCCC_CONTEST` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1649,7 +1696,7 @@ In order of the file's contents we describe each required field, below: **NOTE:** sometimes an IOCCC year runs into another year and the contest year might not match when it ends. - **NOTE:** this **MUST** match **THIS** IOCCC's contest, defined as + **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest, defined as `IOCCC_YEAR` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1658,17 +1705,17 @@ In order of the file's contents we describe each required field, below: - `mkiocccentry_version` (double quoted string) * The version of `mkiocccentry` that formed this `.auth.json` file. - **NOTE:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version, + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version, defined as `MKIOCCCENTRY_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If this is not the case your submission **WILL BE** rejected! - `chkentry_version` (double quoted string) - * The version of `chkentry` that was used to validate this `.auth.json`, - assuming that it was created by `mkiocccentry`. + * The version of `chkentry` that was used to validate the submission + directory, including the `.auth.json` file. - **NOTE:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined as `CHKENTRY_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1678,7 +1725,7 @@ In order of the file's contents we describe each required field, below: * The version of `fnamchk` that `txzchk` uses to validate the filename of the xz compressed tarball. - **NOTE:** this **MUST** match **THIS** IOCCC's `fnamchk` version in order for it + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `fnamchk` version in order for it to be valid. If this is not the case your submission **WILL BE** rejected! - `IOCCC_contest_id` (double quoted string) @@ -1693,19 +1740,20 @@ In order of the file's contents we describe each required field, below: - `tarball` (double quoted string) * The xz compressed tarball filename. - **NOTE:** this **MUST** match the actual tarball's **filename** in order for + **IMPORTANT:** this **MUST** match the actual tarball's **filename** in order for this to be valid. If there is a mismatch you stand a great risk of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! Moreover, it is possible that `txzchk` will report a problem through `fnamchk(1)` which also puts you at great risk of violating [Rule - 17](next/rules.html#rule17). If `txzchk` does not detect this, though, it - does not mean it's a bug but rather that the directory in the tarball - matches the filename. + 17](next/rules.html#rule17). `txzchk` will use the output of `fnamchk` to + obtain the correct directory _name_ in the tarball; if `fnamchk` fails to + validate your filename, or if you have the wrong directory name in the + tarball, this will be flaggd. - `submit_slot` (number) * The submission number. - **NOTE:** this **MUST** be within the range of 0 **THROUGH** + **IMPORTANT:** this **MUST** be within the range of 0 **THROUGH** `MAX_SUBMIT_SLOT` (see [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If @@ -1715,7 +1763,7 @@ In order of the file's contents we describe each required field, below: - `author_count` (number) * How many authors this submission has. - **NOTE:** this **MUST** be within the range of 1 **THROUGH** + **IMPORTANT:** this **MUST** be within the range of 1 **THROUGH** `MAX_AUTHORS` (see [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If @@ -1734,71 +1782,74 @@ Next, the JSON `authors` **array** holds the following information about the author(s) of the submission: - `name` (double quoted string) - * The **name** of this author. + * The **name** of this author. - `location_code` (double quoted string) - * The **location code** of this author (an ISO 3166-1 2 character code). + * The **location code** of this author (an ISO 3166-1 2 character code). See for a list of valid codes. - **NOTE:** in `mkiocccentry` use `XX` if you want your location to be anonymous. + **NOTE:** in `mkiocccentry` use `XX` if you want your location to be anonymous. - `email` (`null` or double quoted string) - * The **email** of this author in the form of `x@y`, or `null` if not provided. + * The **email** of this author in the form of `x@y`, or `null` if not provided. - `url` (`null` or double quoted string) - * The primary **URL** of this author, or `null` if not provided. + * The primary **URL** of this author, or `null` if not provided. + * The URL must start with `http://` or `https://` and have more text after it; + we do not even try and detect a hostname. - `alt_url` (`null` or double quoted string) - * The **alt URL** of this author, or `null` if not provided. + * The **alt URL** of this author, or `null` if not provided. + * The URL must start with `http://` or `https://` and have more text after it; + we do not even try and detect a hostname. - `mastodon` (`null` or double quoted string) - * The Mastodon handle of this author in the form of `@user@domain`, or + * The Mastodon handle of this author in the form of `@user@domain`, or `null` if not provided. See the FAQ on "[Mastodon](#try_mastodon)" for more information. - - `github` (`null` or double quoted string) - * The **[GitHub](https://github.com) account** of this author in the form of `@user`, or `null` if not + * The **[GitHub](https://github.com) account** of this author in the form of `@user`, or `null` if not provided. - `affiliation` (`null` or double quoted string) - * This author's **affiliation**, if any, or `null` if not provided. + * This author's **affiliation**, if any, or `null` if not provided. - **NOTE:** if provided, the length of the **affiliation** **MUST** be within + **IMPORTANT:** if provided, the length of the **affiliation** **MUST** be within the range of 1 **THROUGH** `MAX_AFFILIATION_LEN` (see [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case you stand a great risk of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - **NOTE:** an **affiliation** does **NOT** have any affect on whether you will win or not. + **NOTE:** an **affiliation** does **NOT** have any affect on whether you will win or not. - `past_winning_author` (boolean) - * `true` if this author claims to have won a past IOCCC, `false` if this - author has **NOT** won before. + * `true` if this author claims to have won a past IOCCC, `false` if this + author has **NOT** won before. - **NOTE:** this has **NO** effect on whether you will win or not. + **NOTE:** this has **NO** effect on whether you will win or not. - `default_handle` (boolean) - * `true` if this default handle was accepted, `false` if one is provided + * `true` if this default handle was accepted, `false` if one is provided by this author. - `author_handle` (double quoted string) - * This author's handle (custom or default provided). + * This author's handle (custom or default provided). - **NOTE:** if you have won before, we **ENCOURAGE** you to use the same handle of - your previous winning entries, to help in organising the - [authors.html](authors.html) page and the author JSON file. - See the - FAQ on "[author handle](#author_handle_faq)" - and the - FAQ on "[author_handle.json](#author_json)" - for more information. + **NOTE:** if you have won before, we **ENCOURAGE** you to use the same handle of + your previous winning entries, to help in organising the + [authors.html](authors.html) page and the author JSON file. + See the + FAQ on "[author handle](#author_handle_faq)" + and the + FAQ on "[author_handle.json](#author_json)" + for more information. - `author_number` (number) - * This author number in the `authors` array. + * This author number in the `authors` array. After the `authors` **array** the remaining of a `.auth.json` file holds: @@ -1807,7 +1858,7 @@ After the `authors` **array** the remaining of a `.auth.json` file holds: FAQ on "[.info.json](#info_json)" for more information. - **NOTE:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see + **IMPORTANT:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case your submission **WILL BE** rejected. @@ -1816,7 +1867,7 @@ After the `authors` **array** the remaining of a `.auth.json` file holds: * Microseconds since the tstamp (seconds since epoch when `.auth.json` was formed - see `gettimeofday(2)`) second. - **NOTE:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC` + **IMPORTANT:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC` **THROUGH** `MAX_FORMED_TIMESTAMP_USEC` and is validated by `test_formed_timestamp_usec()` in [soup/entry_util.c](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c) @@ -1827,7 +1878,7 @@ After the `authors` **array** the remaining of a `.auth.json` file holds: - `timestamp_epoch` (double quoted string) * `"Thu Jan 01 00:00:00 1970 UTC"` (`gettimeofday(2)` epoch). - **NOTE:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d + **IMPORTANT:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d as `TIMESTAMP_EPOCH` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1836,33 +1887,38 @@ After the `authors` **array** the remaining of a `.auth.json` file holds: - `min_timestamp` (number) * Minimum number of second since epoch for **this** IOCCC. - **NOTE:** this **MUST** be >= `MIN_TIMESTAMP` defined in + **IMPORTANT:** this **MUST** be >= `MIN_TIMESTAMP` defined in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If this is not the case your submission **WILL BE** rejected! -This file will be verified with the `chkentry(1)` tool and if there are any -problems **it is an error**. If there is an error the tarball will **NOT** be -formed by `mkiocccentry`; otherwise the `txzchk(1)` tool will be executed on the -tarball. +This file will be validated with the `chkentry(1)` tool and if there are any +problems with it or the submission directory, **it is an error**. If there is an +error the tarball will **NOT** be formed by `mkiocccentry`; otherwise the +`txzchk(1)` tool will be executed on the tarball. -This file will **NOT** be looked at unless the submission wins! Nonetheless, -`chkentry(1)` **WILL BE** used on the file as part of the judging process. +This file will **NOT** be looked at unless the submission wins! Nonetheless, the +file **MUST** be present in the submission directory and it **MUST** be valid +JSON and it **MUST** pass all IOCCC semantics checks and all other checks +`chkentry(1)` perform. `chkentry(1)` is used by `mkiocccentry(1)` and the judges +will use it on the submission directory as part of the judging process. At the risk of stating the obvious, if your `.auth.json` file is invalid JSON or -is reported invalid by `chkentry` your submission will almost certainly be +is reported invalid by `chkentry(1)`, or if your submission directory is +reported invalid by `chkentry(1)`, your submission will almost certainly be rejected for violating the [Rules](next/rules.html) and in particular [Rule 17](next/rules.html#rule17). -An obvious example where `chkentry` would fail to validate `.auth.json` is if +An obvious example where `chkentry(1)` would fail to validate `.auth.json` is if there is a mismatch of type in the JSON file with what is expected, for instance, if in `.auth.json` the `no_comment` that we chose to not comment on is -not a string. Another obvious example is when things are out of range (see above -for list). Two more examples would be if a field is missing or if an unknown -filed is in the file. In these cases (and any others that must be established as -valid by `chkentry`) your submission would be rejected for violating [Rule -17](next/rules.html#rule17) and in particular because `chkentry` would not -validate the `.auth.json` file. +not a string or is the wrong string. Another obvious example is when things are +out of range (see above for list). Two more examples would be if a field is +missing or if an unknown filed is in the file. In these cases (and any others +that must be established as valid by `chkentry(1)`) your submission would be +rejected for violating [Rule 17](next/rules.html#rule17) and in particular +because `chkentry(1)` would not validate the `.auth.json` file (and maybe other +things too). If you wish to **verify** that your `.auth.json` file is valid **JSON** then see the FAQ on "[validating JSON documents](#validating_json)". @@ -1904,7 +1960,7 @@ In order of the file's contents we describe each required field, below: - `IOCCC_info_version` (double quoted string) * The current version of the `.info.json` files. - **NOTE:** this **MUST** match **THIS** IOCCC's `.info.json` version, defined as + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `.info.json` version, defined as `INFO_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1913,7 +1969,7 @@ In order of the file's contents we describe each required field, below: - `IOCCC_contest` (double quoted string) * Which contest number this is (e.g. 1 for 1984, 2 for 1985, 27 for 2020). - **NOTE:** this **MUST** match **THIS** IOCCC's contest value, defined as + **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest value, defined as `IOCCC_CONTEST` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1925,7 +1981,7 @@ In order of the file's contents we describe each required field, below: **NOTE:** sometimes an IOCCC year runs into another year and the contest year might not match when it ends. - **NOTE:** this **MUST** match **THIS** IOCCC's contest, defined as + **IMPORTANT:** this **MUST** match **THIS** IOCCC's contest, defined as `IOCCC_YEAR` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1934,7 +1990,7 @@ In order of the file's contents we describe each required field, below: - `mkiocccentry_version` (double quoted string) * The version of `mkiocccentry` that formed this `.auth.json` file. - **NOTE:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version, + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `mkiocccentry` version, defined as `MKIOCCCENTRY_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1943,17 +1999,17 @@ In order of the file's contents we describe each required field, below: - `iocccsize_version` (double quoted string) * The version of `iocccsize` that was used for this `.info.json` file. - **NOTE:** this **MUST** match **THIS** IOCCC's `iocccentry` version, + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `iocccentry` version, defined as `IOCCCSIZE_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If this is not the case your submission **WILL BE** rejected! - `chkentry_version` (double quoted string) - * The version of `chkentry` that was used to validate this `.info.json`, - assuming that it was created by `mkiocccentry`. + * The version of `chkentry` that was used to validate the submission + directory, including the `.info.json` file. - **NOTE:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `chkentry` version, defined as `CHKENTRY_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1963,7 +2019,7 @@ In order of the file's contents we describe each required field, below: * The version of `fnamchk` that `txzchk` uses to validate the filename of the xz compressed tarball. - **NOTE:** this **MUST** match **THIS** IOCCC's `fnamchk` version, defined + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `fnamchk` version, defined as `FNAMCHK_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1972,7 +2028,7 @@ In order of the file's contents we describe each required field, below: - `txzchk_version` (double quoted string) * The version of `txzchk` used to validate the xz compressed tarball. - **NOTE:** this **MUST** match **THIS** IOCCC's `txzchk` version, defined + **IMPORTANT:** this **MUST** match **THIS** IOCCC's `txzchk` version, defined as `TXZCHK_VERSION` in [soup/version.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/version.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -1983,15 +2039,10 @@ In order of the file's contents we describe each required field, below: a UUID** and submission number; see the [rules](next/rules.html) for more details on this, and in particular [Rule 17](next/rules.html#rule17). - **NOTE:** if the contest ID is **NOT** in this format then `fnamchk` will - report it as an **error** and your submission **WILL BE** rejected for - violating [Rule 17](next/rules.html#rule17)! - - - `submit_slot` (number) * The submission number. - **NOTE:** this **MUST** be within the range of 0 **THROUGH** + **IMPORTANT:** this **MUST** be within the range of 0 **THROUGH** `MAX_SUBMIT_SLOT` (see [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If @@ -2004,7 +2055,7 @@ In order of the file's contents we describe each required field, below: in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)) that matches the regexp `[a-z0-9][a-z0-9_+-]*`. - **NOTE:** if this is **NOT** the case you stand a great risk of having your submission + **IMPORTANT:** if this is **NOT** the case you stand a great risk of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - `abstract` (double quoted string) @@ -2015,33 +2066,34 @@ In order of the file's contents we describe each required field, below: The `abstract` may not contain a `;` (semicolon), nor `&` (ampersand), nor `,` (comma). - **NOTE:** if your abstract is 0 in length or > the maximum abstract length you + **IMPORTANT:** if your abstract is 0 in length or > the maximum abstract length you stand a great risk of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - `tarball` (double quoted string) * The xz compressed tarball filename. - **NOTE:** this **MUST** match the actual tarball's **filename** in order for + **IMPORTANT:** this **MUST** match the actual tarball's **filename** in order for this to be valid. If there is a mismatch you stand a great risk of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! Moreover, it is possible that `txzchk` will report a problem through `fnamchk(1)` which also puts you at great risk of violating [Rule - 17](next/rules.html#rule17). If `txzchk` does not detect this, though, it - does not mean it's a bug but rather that the directory in the tarball - matches the filename. + 17](next/rules.html#rule17). `txzchk` will use the output of `fnamchk` to + obtain the correct directory _name_ in the tarball; if `fnamchk` fails to + validate your filename, or if you have the wrong directory name in the + tarball, this will be flaggd. - `rule_2a_size` (number) * The size calculated of [Rule 2a](next/rules.html#rule2a). - **NOTE:** if this violates [Rule 2a](next/rules.html#rule2a) you stand a great + **IMPORTANT:** if this violates [Rule 2a](next/rules.html#rule2a) you stand a great chance of having your submission rejected for violating the [Rules](next/rules.html)! - `rule_2b_size` (number) * The size calculated of [Rule 2b](next/rules.html#rule2b). - **NOTE:** if this violates [Rule 2b](next/rules.html#rule2b) you stand a great + **IMPORTANT:** if this violates [Rule 2b](next/rules.html#rule2b) you stand a great chance of having your submission rejected for violating the [Rules](next/rules.html)! @@ -2052,7 +2104,7 @@ In order of the file's contents we describe each required field, below: * `true` if user overrides warning of [Rule 2a](next/rules.html#rule2a) violation, else `false`. - **NOTE:** if the [Rule 2a](next/rules.html#rule2a) calculated size is **NOT** + **IMPORTANT:** if the [Rule 2a](next/rules.html#rule2a) calculated size is **NOT** violated but this is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2064,7 +2116,7 @@ In order of the file's contents we describe each required field, below: * `true` if user overrides warning of [Rule 2b](next/rules.html#rule2b) violation, else `false`. - **NOTE:** if the [Rule 2b](next/rules.html#rule2b) calculated size is **NOT** + **IMPORTANT:** if the [Rule 2b](next/rules.html#rule2b) calculated size is **NOT** violated but this is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2085,7 +2137,7 @@ In order of the file's contents we describe each required field, below: * `true` if `prog.c` triggered a word buffer overflow (see `iocccsize`), else `false`. - **NOTE:** this does **NOT** mean that your code has been checked for buffer + **IMPORTANT:** this does **NOT** mean that your code has been checked for buffer overflows in general. - `ungetc_warning` (boolean) @@ -2095,7 +2147,7 @@ In order of the file's contents we describe each required field, below: * `true` if the user overrides any warnings about an incomplete/incorrect `Makefile` file, else `false`. - **NOTE:** if the `Makefile` file has no problems and this is `true` then + **IMPORTANT:** if the `Makefile` file has no problems and this is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2106,7 +2158,7 @@ In order of the file's contents we describe each required field, below: - `first_rule_is_all` (boolean) * `true` if the first rule in the `Makefile` file is `all`, else `false`. - **NOTE:** if the `Makefile` file does **NOT** have an `all` rule or it is not + **IMPORTANT:** if the `Makefile` file does **NOT** have an `all` rule or it is not first and this boolean is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2117,7 +2169,7 @@ In order of the file's contents we describe each required field, below: - `found_all_rule` (boolean) * `true` if the `Makefile` file has an `all` rule, else `false`. - **NOTE:** if the `Makefile` file does **NOT** have an `all` rule and this + **IMPORTANT:** if the `Makefile` file does **NOT** have an `all` rule and this boolean is `true`, or if it does **NOT** have an `all` rule but `first_rule_is_all` is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2129,7 +2181,7 @@ In order of the file's contents we describe each required field, below: - `found_clean_rule` (boolean) * `true` if the `Makefile` file has a `clean` rule, else `false`. - **NOTE:** if the `Makefile` file does **NOT** have a `clean` rule and this + **IMPORTANT:** if the `Makefile` file does **NOT** have a `clean` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2140,7 +2192,7 @@ In order of the file's contents we describe each required field, below: - `found_clobber_rule` (boolean) * `true` if the `Makefile` file has a `clobber` rule, else `false`. - **NOTE:** if the `Makefile` file does **NOT** have an `clobber` rule and this + **IMPORTANT:** if the `Makefile` file does **NOT** have an `clobber` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2151,7 +2203,7 @@ In order of the file's contents we describe each required field, below: - `found_try_rule` (boolean) * `true` if the `Makefile` file has a `try` rule, else `false`. - **NOTE:** if the `Makefile` file does **NOT** have an `try` rule and this + **IMPORTANT:** if the `Makefile` file does **NOT** have a `try` rule and this boolean is `true` then you stand a good chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! @@ -2162,7 +2214,7 @@ In order of the file's contents we describe each required field, below: - `test_mode` (boolean) * `true` if the `test` ID was used to form the tarball, else `false`. - **NOTE:** if this is `true` then this may **NOT** be submitted to the + **IMPORTANT:** if this is `true` then this may **NOT** be submitted to the contest! Please do **NOT** email the [Judges](judges.html) your submission! Next comes the `manifest` **array** which **MUST** have AT LEAST the following. @@ -2177,8 +2229,9 @@ The `mkiocccentry(1)` tool will write it in this order: FAQ on "[.info.json](#info_json)" for more information. - **NOTE:** if this is **NOT** the case you stand a great chance of having your - submission rejected for violating [Rule 17](next/rules.html#rule17)! + **IMPORTANT:** if this is **NOT** the case you stand a + great chance of having your submission rejected for violating [Rule + 17](next/rules.html#rule17)! - `auth_JSON` (double quoted string) * This `MUST` be `".auth.json"`, defined as `AUTH_JSON_FILENAME` in @@ -2189,7 +2242,7 @@ The `mkiocccentry(1)` tool will write it in this order: FAQ on "[.auth.json](#auth_json)" for more information. - **NOTE:** if this is **NOT** the case you stand a great chance of having your + **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - `c_src` (double quoted string) @@ -2198,12 +2251,9 @@ The `mkiocccentry(1)` tool will write it in this order: in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/), and is your submission source code. - **NOTE:** if this is **NOT** the case you stand a great chance of having your + **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - **NOTE:** if you provide to `mkiocccentry` a different filename it will be - copied to `prog.c`. - - `Makefile` (double quoted string) * This `MUST` be `"Makefile"`, defined as `MAKEFILE_FILENAME` in [soup/entry_util.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.h) @@ -2213,12 +2263,9 @@ The `mkiocccentry(1)` tool will write it in this order: FAQ on "[Makefile](#makefile)" for more information. - **NOTE:** if this is **NOT** the case you stand a great chance of having your + **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - **NOTE:** if you provide to `mkiocccentry` a different filename it will be - copied to `Makefile`. - - `remarks` (double quoted string) * This `MUST` be `"remarks.md"`, defined as `REMARKS_FILENAME` in [soup/entry_util.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.h) @@ -2228,35 +2275,33 @@ The `mkiocccentry(1)` tool will write it in this order: FAQ on "[remarks.md](#remarks_md)" for more information. - **NOTE:** if this is **NOT** the case you stand a great chance of having your + **IMPORTANT:** if this is **NOT** the case you stand a great chance of having your submission rejected for violating [Rule 17](next/rules.html#rule17)! - **NOTE:** if you provide to `mkiocccentry` a different filename it will be - copied to `remarks.md`. - The `manifest` **array** also **OPTIONALLY** has one or more of the field: - `extra_file` (double quoted string) * Any additional file that you need or want to include with your submission. - **NOTE:** this MUST **NOT** match a mandatory filename (see above list) and - `chkentry` will verify this for you; it is **ALSO** an **error** if the - filenames are not unique. In these cases you stand a great risk of having - your submission rejected for violating [Rule 17](next/rules.html#rule17)! On - the other hand, **ONLY** `mkiocccentry` will verify that the files exist and - can be read; `txzchk(1)` will **NOT** do this for you as it only **LISTS** - the tarball: it does **NOT** extract it. Even so, the [Judges](judges.html) - **WILL** extract the tarball and if a file listed in the manifest does not - exist your submission will very likely be rejected for not being as - documented! + **IMPORTANT:** this MUST **NOT** match a mandatory filename (see above list) + and `chkentry` will verify this for you; it is **ALSO** an **error** if the + filenames are not unique, not POSIX plus + safe chars only, if they are the + wrong permission and various other things. In these cases you stand a great + risk of having your submission rejected for violating [Rule + 17](next/rules.html#rule17)! On the other hand, **ONLY** `mkiocccentry` will + verify that the files exist and can be read; `txzchk(1)` will **NOT** do + this for you as it only **LISTS** the tarball: it does **NOT** extract it. + Even so, the [Judges](judges.html) **WILL** extract the tarball and if a + file listed in the manifest does not exist your submission will very likely + be rejected for not being as documented! Finally, after the `manifest` **array**, the following fields **MUST** exist: - `formed_timestamp` (number) * Seconds since epoch when JSON (`.auth.json` or `.info.json`) file was formed (see `gettimeofday(2)`). - **NOTE:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see + **IMPORTANT:** this **MUST** be greater than or equal to `MIN_TIMESTAMP` (see [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/)). If this is not the case your submission **WILL BE** rejected. @@ -2265,7 +2310,7 @@ Finally, after the `manifest` **array**, the following fields **MUST** exist: * Microseconds since the tstamp (seconds since epoch when `.auth.json` was formed - see `gettimeofday(2)`) second. - **NOTE:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC` + **IMPORTANT:** this **MUST** be within the range `MIN_FORMED_TIMESTAMP_USEC` **THROUGH** `MAX_FORMED_TIMESTAMP_USEC` and is validated by `test_formed_timestamp_usec()` in [soup/entry_util.c](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/entry_util.c) @@ -2276,7 +2321,7 @@ Finally, after the `manifest` **array**, the following fields **MUST** exist: - `timestamp_epoch` (double quoted string) * `"Thu Jan 01 00:00:00 1970 UTC"` (`gettimeofday(2)` epoch). - **NOTE:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d + **IMPORTANT:** this **MUST** be `"Thu Jan 01 00:00:00 1970 UTC"` which is `#define`d as `TIMESTAMP_EPOCH` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If @@ -2285,14 +2330,15 @@ Finally, after the `manifest` **array**, the following fields **MUST** exist: - `min_timestamp` (number) * Minimum number of second since epoch for **this** IOCCC. - **NOTE:** this **MUST** be >= `MIN_TIMESTAMP` defined in + **IMPORTANT:** this **MUST** be >= `MIN_TIMESTAMP` defined in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry/). If this is not the case your submission **WILL BE** rejected! -This file will be verified with the `chkentry(1)` tool and if there are any -problems **it is an error** and the tarball will **NOT** be formed by -`mkiocccentry`; otherwise the `txzchk(1)` tool will be executed on the tarball. +This file will be validated with the `chkentry(1)` tool and if there are any +problems with it or the submission directory, **it is an error**. If there is an +error the tarball will **NOT** be formed by `mkiocccentry`; otherwise the +`txzchk(1)` tool will be executed on the tarball. The [Judges](judges.html) **WILL** use `chkentry(1)` on this file during the judging process and if it does not pass your submission **WILL BE** rejected. @@ -2300,12 +2346,12 @@ judging process and if it does not pass your submission **WILL BE** rejected. An obvious example where `chkentry` would fail to validate `.info.json` is if there is a mismatch of type in the JSON file with what is expected, for instance, if in `.info.json` the `no_comment` that we chose to not comment on is -not a string. Another obvious example is when things are out of range (see above -for list). Two more examples would be if a field is missing or if an unknown -filed is in the file. In these cases (and any others that must be established as -valid by `chkentry`) your submission would be rejected for violating [Rule -17](next/rules.html#rule17) and in particular because `chkentry` would not -validate the `.info.json` file. +not a string or is the wrong string. Another obvious example is when things are +out of range (see above for list). Two more examples would be if a field is +missing or if an unknown filed is in the file. In these cases (and any others +that must be established as valid by `chkentry`) your submission would be +rejected for violating [Rule 17](next/rules.html#rule17) and in particular +because `chkentry` would not validate the `.info.json` file. If you wish to **verify** that your `.info.json` file is valid **JSON** then see the FAQ on "[validating JSON documents](#validating_json)". @@ -4780,6 +4826,7 @@ below note) this would be advisable. a defect of `clang` that required numerous entries to be fixed for clang is that it requires that `main()`'s arguments to be of a specific type. However some versions of `clang` are more strict in the number of args allowed. + Jump to: [top](#)
    diff --git a/next/guidelines.html b/next/guidelines.html index 370a8be15..7bb783966 100644 --- a/next/guidelines.html +++ b/next/guidelines.html @@ -436,8 +436,9 @@ Mastodon feed as sometimes the

    See our FAQ on “rules, guidelines, tools feedback” as well as our -FAQ on “about asking questions” -about these guidelines. You might also find the FAQ in general useful, especially the +FAQ on “asking questions” +about these rules. You might also find the FAQ in general useful, as well as the +quick start guide and how to register. FAQ on “how to enter the IOCCC”.

    The IOCCC is pending

    While the IOCCC is not open yet, there is a tentative opening date for the next IOCCC.

    @@ -461,11 +462,11 @@ writing by contacting the judges.

    -These IOCCC guidelines are version 28.38 2025-02-12. +These IOCCC guidelines are version 28.39 2025-02-26.

    -The markdown form of these guidelines -is available for download. +The markdown form of these guidelines is available for download.

    IMPORTANT: Be SURE to read the IOCCC rules.

    Jump to: top

    @@ -602,11 +603,12 @@ The -d option is an alias for -s 21701. An example use

        mkiocccentry -d workdir topdir

    -where workdir is the directory which the tarball will be formed and the +where workdir is the directory where the tarball will be formed and the topdir is the directory which has the required files (prog.c, Makefile and -remarks.md) along with extra data files you wish to submit. Be aware -that if the directory exists already, you will have to remove it or move it -before this option will work a second time, just like in normal mode. +remarks.md) along with extra data files (and if you wish, directories) you +wish to submit. Be aware that if the directory exists already, you will have to +remove it or move it before this option will work a second time, just like in +normal mode.

    IMPORTANT NOTE: if you run the program outside the repo directory @@ -616,9 +618,10 @@ are required like chkentry(1), txzchk(1) and fna have installed them but some tools are out of date (in the install path) it will cause problems. Additionally, if you do not have the most recent version when submitting a tarball it will be rejected for not having the right versions of -the tools. This is why you MUST make sure you have the most recent -version of all the tools and you either run it from the repo directory itself OR -you install them (make install as root or via sudo). +the tools. This is why you MUST make sure you have the most recent version +of all the tools and you either run it from the repo directory itself OR you +install them (make install as via sudo or as root). We recommend you install +the tools but if you wish to run it from the repo directory you may.

    Rule 17 has been significantly modified @@ -652,8 +655,8 @@ previously uploaded submission by rebuilding your submission with the To help you with this, so that you do not have to repeatedly answer all the questions, the mkiocccentry(1) tool has the options -a answers, -A answers and -i answers, where -a will write to an answers file (if it does not -already exist), -A will overwrite the file and -i will read the answers from -the file. If you use -A, be sure you don’t overwrite another file by accident! +already exist), -A WILL OVERWRITE THE FILE and -i will read the answers from +the file. If you use -A, BE SURE you don’t overwrite another file by accident!

    Once the contest enters the judging state, you will @@ -854,10 +857,11 @@ its algorithm.

    If mkiocccentry encounters an error the program will exit and the xz -compressed tarball will not be formed. For instance, if chkentry(1) (see -below) fails to validate the .auth.json or .info.json -JSON files (see below) that mkiocccentry(1) creates, -it is an error and possibly a bug that you should report as a bug at the +compressed tarball will not be formed. For instance, if +chkentry(1) fails to validate the .auth.json or .info.json +JSON files (see below) that +mkiocccentry(1) creates, or anything else mkiocccentry(1) does, it is an +error and possibly a bug that you should report as a bug at the mkiocccentry bug report page. PLEASE run the bug_report.sh script to help us out here! See the @@ -878,7 +882,9 @@ Needless to say, we do NOT recommend these options.

    In many places it will prompt you to verify what you input, allowing you to -correct details as you go along. +correct details as you go along. Be advised that there is a default answer and +if you press enter it will proceed with that default, so make sure you have +provided the correct answer.

    Jump to: top

    @@ -891,9 +897,10 @@ The synopsis of the mkiocccentry(1) tool is:

    To help you with editing a submission, the mkiocccentry(1) tool has some options to write OR read from an answers file so you do not have to input -the information about the author(s) and the submission more than once (unless of +the information about the author(s) and the submission more than once, unless of course you need to make some changes, in which case you can use the option that -overwrites the file). +overwrites the file. If you do use the overwrite option, MAKE SURE you do +not overwrite another file!

    See the @@ -911,8 +918,9 @@ execute one or more additional tools.

    iocccsize

    -mkiocccentry(1) will use code from iocccsize(1) which -detects a number of issues that you may ignore, if you wish, as noted above. +mkiocccentry(1) will use code from iocccsize(1) which detects a number of +issues (such as Rule 2) that you may ignore, if you wish, as +noted above.

    In other words, you no longer need to run iocccsize manually. However, the @@ -929,7 +937,12 @@ submission. These files MUST pass the checks of chkentry( If chkentry does not pass and you used mkiocccentry(1) it is very likely a bug and you should report it as a bug at the mkiocccentry issues page. -See the +PLEASE run the command: +

    +
        make bug_report
    +

    +from the top level repo directory itself. +See also the FAQ on “reporting mkiocccentry bugs”.

    @@ -939,10 +952,15 @@ executed on it. In this case, there should be no problems, as mkiocccentry NOT form a tarball if there are any issues.

    -If mkiocccentry(1) is used and chkentry(1) fails to validate either of the -files, then unless it is a system specific problem, it is likely a bug in +NOTE: chkentry(1) also validates other things in your submission +directory. +

    +

    +If mkiocccentry(1) is used and chkentry(1) fails to validate your submission +directory, then unless it is a system specific problem, it could be a bug in mkiocccentry(1), chkentry(1) or possibly jparse, though this is quite -unlikely. +unlikely. Nonetheless, if you believe there is a bug, you may report it as +explained above.

    If you want to know what .auth.json is, see the @@ -993,15 +1011,16 @@ installed separately, in order to use the tools in mkiocccentry. In other words, mkiocccentry contains everything you need, and even if you do install the libraries from their respective repos, it/they will not be used when compiling the mkiocccentry tools. This is important to -make sure that you’re using the correct versions, which is verified by -chkentry. See Rule 17! +make sure that you’re using the correct versions, which is also verified by +chkentry (in the JSON files created by mkiocccentry(1)). See Rule +17!

    Please see the FAQ on “validating .auth.json and/or .info.json files for more details on chkentry and how you can use it to validate your -.auth.json and .info.json files manually, without having to repackage your -submission. +.auth.json and .info.json files (and your submission directory in general) +manually, without having to repackage your submission.

    You might also wish to see the @@ -1018,7 +1037,8 @@ compressed tarball; if any issues are found (‘feathers are stuck in the mkiocccentry(1), then it is possibly a bug in one of the tools and you might want to report it as a bug at the mkiocccentry bug report page. PLEASE run the -bug_report.sh script to help us out here! See the +bug_report.sh script to help us out here! You may do this by running from +the top level directory of the repo make bug_report. See the FAQ on “report mkiocccentry bugs”.

    @@ -1055,9 +1075,9 @@ an extra file, not an optional file.

    In particular, any file that is not prog.c, Makefile, remarks.md, try.sh, prog.alt.c or try.alt.sh will be counted as an extra file, and if -try.sh, prog.alt.c or try.alt.sh are not in the top level directory they -will also be counted as an extra file. The .info.json and .auth.json files -are not counted as extra files but are required. +try.sh, prog.alt.c or try.alt.sh are not in the top level submission +directory they will also be counted as an extra file. The .info.json and +.auth.json files are not counted as extra files but are required.

    In other words, the actual amount of EXTRA files is 31. @@ -1078,7 +1098,9 @@ section for more details on this important tool.

    If you DO include a tarball, and the build process or the program extracts -said tarball(s), the make clobber rule MUST remove them. +said tarball(s), the make clobber rule MUST remove them. Even so, if you +include a tarball to get past the limit on the number of files, you MUST +justify this in your remarks!

    IMPORTANT REMINDER: make SURE your tarball does NOT reveal who you are! @@ -1442,6 +1464,10 @@ use of git(1) or gh(1), just be sure that your submiss submission Makefile don’t depend on such tools.

    +Of course if you do use GitHub to work on your submission, you might want to +make the repo private so you don’t reveal who you are. :-) +

    +

    If this is not clear, please do NOT use these tools to help with the clobber rule! For instance, do NOT use git clean! Not only does this depend on the user having git(1) but it also does not account for the @@ -1461,6 +1487,12 @@ In other words, for make clobber, do something like:

    And do NOT use git for any other tool either.

    +

    +NOTE: mkiocccentry(1) will directly run make clobber in the submission +directory. An although it is not an error if this fails, if it fails because the +Makefile does not have a clobber rule, it will be flagged by mkiocccentry(1) +(you may ignore this but it does put you at a risk of violating the rules). +

    Jump to: top

    diff --git a/next/guidelines.md b/next/guidelines.md index 3da274475..6f18575ef 100644 --- a/next/guidelines.md +++ b/next/guidelines.md @@ -14,8 +14,9 @@ Mastodon](https://fosstodon.org/@ioccc) feed as _sometimes_ the See our FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" as well as our -FAQ on "[about asking questions](../faq.html#question)" -about these guidelines. You might also find the FAQ in general useful, especially the +FAQ on "[asking questions](../faq.html#question)" +about these rules. You might also find the FAQ in general useful, as well as the +[quick start guide](../quick-start.html) and [how to register](register.html). FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". @@ -49,12 +50,12 @@ Jump to: [top](#)

    -These [IOCCC guidelines](guidelines.html) are version **28.38 2025-02-12**. +These [IOCCC guidelines](guidelines.html) are version **28.39 2025-02-26**.

    -The markdown form of these guidelines -is available for download. +The markdown form of these guidelines is available for download.

    **IMPORTANT**: Be **SURE** to read the [IOCCC rules](rules.html). @@ -226,11 +227,12 @@ The `-d` option is an alias for `-s 21701`. An example use: ```

    -where `workdir` is the directory which the tarball will be formed and the +where `workdir` is the directory where the tarball will be formed and the `topdir` is the directory which has the required files (`prog.c`, `Makefile` and -`remarks.md`) along with extra data files you wish to submit. Be aware -that if the directory exists already, you will have to remove it or move it -before this option will work a second time, just like in normal mode. +`remarks.md`) along with extra data files (and if you wish, directories) you +wish to submit. Be aware that if the directory exists already, you will have to +remove it or move it before this option will work a second time, just like in +normal mode.

    @@ -241,9 +243,10 @@ are required like `chkentry(1)`, `txzchk(1)` and `fnamchk(1)`. But even if you have installed them but some tools are out of date (in the install path) it will cause problems. Additionally, if you do not have the most recent version when submitting a tarball it will be rejected for not having the right versions of -the tools. This is why you **MUST** make sure you have the most recent -version of all the tools and you either run it from the repo directory itself OR -you install them (`make install` as root or via `sudo`). +the tools. This is why you **MUST** make sure you have the most recent version +of all the tools and you either run it from the repo directory itself OR you +install them (`make install` as via `sudo` or as root). We recommend you install +the tools but if you wish to run it from the repo directory you may.

    @@ -283,8 +286,8 @@ previously uploaded submission by rebuilding your submission with the To help you with this, so that you do not have to repeatedly answer all the questions, the `mkiocccentry(1)` tool has the options `-a answers`, `-A answers` and `-i answers`, where `-a` will write to an answers file (if it does not -already exist), `-A` will overwrite the file and `-i` will read the answers from -the file. If you use `-A`, be sure you don't overwrite another file by accident! +already exist), `-A` **WILL OVERWRITE THE FILE** and `-i` will read the answers from +the file. If you use `-A`, **BE SURE** you don't overwrite another file by accident!

    @@ -531,10 +534,11 @@ its algorithm.

    If `mkiocccentry` encounters an **error** the program will exit and the xz -compressed tarball **will not be formed**. For instance, if `chkentry(1)` (see -below) fails to validate the `.auth.json` or `.info.json` -[JSON](https://www.json.org/json-en.html) files (see below) that `mkiocccentry(1)` creates, -it is an error and **possibly** a bug that you should [report as a bug at the +compressed tarball **will not be formed**. For instance, if +[chkentry(1)](#chkentry) fails to validate the `.auth.json` or `.info.json` +[JSON](https://www.json.org/json-en.html) files (see below) that +`mkiocccentry(1)` creates, or anything else `mkiocccentry(1)` does, it is an +**error** and **possibly** a bug that you should [report as a bug at the mkiocccentry bug report page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). **PLEASE run the `bug_report.sh` script to help us out here!** See the @@ -558,7 +562,9 @@ Needless to say, we do **NOT** recommend these options.

    In many places it will prompt you to verify what you input, allowing you to -correct details as you go along. +correct details as you go along. Be advised that there is a default answer and +if you press enter it will proceed with that default, so make sure you have +provided the correct answer.

    @@ -579,9 +585,10 @@ The synopsis of the `mkiocccentry(1)` tool is:

    To help you with editing a submission, the `mkiocccentry(1)` tool has some options to write _OR_ read from an answers file so you do not have to input -the information about the author(s) and the submission more than once (unless of +the information about the author(s) and the submission more than once, unless of course you need to make some changes, in which case you can use the option that -overwrites the file). +overwrites the file. If you do use the overwrite option, **MAKE SURE** you do +not overwrite another file!

    @@ -607,8 +614,9 @@ execute one or more additional tools.

    -`mkiocccentry(1)` will use code from `iocccsize(1)` which -detects a number of issues that you may ignore, if you wish, as noted above. +`mkiocccentry(1)` will use code from `iocccsize(1)` which detects a number of +issues (such as [Rule 2](rules.html#rule2)) that you may ignore, if you wish, as +noted above.

    @@ -631,7 +639,16 @@ submission. These files **MUST** pass the checks of `chkentry(1)`! If `chkentry` does not pass and you used `mkiocccentry(1)` it is **very likely** a bug and you should [report it as a bug at the mkiocccentry issues page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). -See the +**PLEASE** run the command: +

    + +``` + make bug_report +``` + +

    +from the top level repo directory itself. +See also the FAQ on "[reporting mkiocccentry bugs](../faq.html#mkiocccentry_bugs)".

    @@ -643,10 +660,16 @@ executed on it. In this case, there should be no problems, as `mkiocccentry(1)`

    -If `mkiocccentry(1)` is used and `chkentry(1)` fails to validate either of the -files, then unless it is a system specific problem, it is likely a bug in +**NOTE**: `chkentry(1)` also validates other things in your submission +directory. +

    + +

    +If `mkiocccentry(1)` is used and `chkentry(1)` fails to validate your submission +directory, then unless it is a system specific problem, it could be a bug in `mkiocccentry(1)`, `chkentry(1)` or possibly `jparse`, though this is quite -unlikely. +unlikely. Nonetheless, if you believe there is a bug, you may report it as +explained above.

    @@ -703,16 +726,17 @@ installed separately, in order to use the tools in `mkiocccentry`. In other words, `mkiocccentry` **contains everything** you need, and _even if you do install_ the libraries from their respective repos, it/they will **not be used** when compiling the `mkiocccentry` tools. This is important to -make sure that you're using the correct versions, which is verified by -`chkentry`. See [Rule 17](rules.html#rule17)! +make sure that you're using the correct versions, which is also verified by +`chkentry` (in the JSON files created by `mkiocccentry(1)`). See [Rule +17](rules.html#rule17)!

    Please see the FAQ on "[validating .auth.json and/or .info.json files](../faq.html#chkentry) for more details on `chkentry` and how you can use it to validate your -`.auth.json` and `.info.json` files manually, without having to repackage your -submission. +`.auth.json` and `.info.json` files (and your submission directory in general) +manually, without having to repackage your submission.

    @@ -736,7 +760,8 @@ tarball`' :-) ) **AND if and _ONLY IF_ you used `mkiocccentry(1)`**, then it is **possibly** a bug in one of the tools and you might want to [report it as a bug at the mkiocccentry bug report page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). **PLEASE run the -`bug_report.sh` script to help us out here!** See the +`bug_report.sh` script to help us out here!** You may do this by running from +the top level directory of the repo `make bug_report`. See the FAQ on "[report mkiocccentry bugs](../faq.html#mkiocccentry_bugs)".

    @@ -780,9 +805,9 @@ an extra file, not an optional file.

    In particular, any file that is not `prog.c`, `Makefile`, `remarks.md`, `try.sh`, `prog.alt.c` or `try.alt.sh` will be counted as an extra file, and if -`try.sh`, `prog.alt.c` or `try.alt.sh` are not in the top level directory they -will also be counted as an extra file. The `.info.json` and `.auth.json` files -are not counted as extra files but are required. +`try.sh`, `prog.alt.c` or `try.alt.sh` are not in the top level submission +directory they will also be counted as an extra file. The `.info.json` and +`.auth.json` files are not counted as extra files but are required.

    @@ -807,7 +832,9 @@ section](#txzchk) for more details on this important tool.

    If you **DO** include a tarball, and the build process or the program extracts -said tarball(s), the make `clobber` rule **MUST** remove them. +said tarball(s), the make `clobber` rule **MUST** remove them. Even so, if you +include a tarball to get past the limit on the number of files, you **MUST** +justify this in your remarks!

    @@ -835,8 +862,6 @@ in your `remarks.md`).

    - -

    See also the FAQ on "[txzchk](../faq.html#txzchk)". @@ -1282,6 +1307,11 @@ use of `git(1)` or `gh(1)`, just be sure that your submission code and your submission Makefile don't depend on such tools.

    +

    +Of course if you do use GitHub to work on your submission, you might want to +make the repo private so you don't reveal who you are. :-) +

    +

    If this is not clear, please do **NOT** use these tools to help with the `clobber` rule! For instance, do **NOT** use `git clean`! Not only does this @@ -1314,6 +1344,13 @@ And do **NOT** use `git` for any other tool either.

    +

    +**NOTE**: `mkiocccentry(1)` will directly run `make clobber` in the submission +directory. An although it is not an error if this fails, if it fails because the +Makefile does not have a clobber rule, it will be flagged by `mkiocccentry(1)` +(you may ignore this but it does put you at a risk of violating the rules). +

    + Jump to: [top](#)
    diff --git a/next/rules.html b/next/rules.html index c4330623a..5fbd56a88 100644 --- a/next/rules.html +++ b/next/rules.html @@ -437,8 +437,8 @@ Mastodon feed as sometimes the FAQ on “rules, guidelines, tools feedback” as well as our FAQ on “about asking questions” -about these rules. You might also find the FAQ in general useful, especially the -FAQ on “how to enter the IOCCC”.

    +about these rules. You might also find the FAQ in general useful, as well as the +quick start guide and how to register.

    The IOCCC is pending

    While the IOCCC is not open now, there is a tentative opening date for the next IOCCC.

    Comments and suggestions on these preliminary rules are welcome. See the @@ -461,11 +461,11 @@ writing by contacting the judges.

    -These IOCCC rules are version 28.24 2025-02-12. +These IOCCC rules are version 28.25 2025-02-26.

    -The markdown form of these rules -is available for download. +The markdown form of these rules is +available for download.

    IMPORTANT: Be sure to read the IOCCC guidelines.

    Jump to: top

    @@ -859,7 +859,7 @@ super-user, special owner, special group, etc.) are still HIGHLY DISCOURAGED. We do not guarantee these functions will behave as you expect on our test platforms. If your program needs special permissions you MUST document this fact, and explain why -it is needed in your submissions remarks.md file.

    +it is needed in your submission’s remarks.md file.

    Jump to: top

    Rule 12

    @@ -978,10 +978,9 @@ and .auth.json) and files that are also not the optional files (Jump to: top

    Rule 17 - The COMPLEX details

    -Each submission MUST be in the form of a xz compressed tarball. +

    Each submission MUST be in the form of a xz compressed tarball. The xz compressed tarball filename must be of the form: -

    -
        ^submit.username-slot_num.[1-9][0-9]{9,}.txz$
    +^submit.username-slot_num.[1-9][0-9]{9,}.txz$.

    … where username is your IOCCC registration username in the form of a UUID (see @@ -993,7 +992,7 @@ details), and where slot_num is a single decimal digit int In particular, username is in the form of: xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx where 'x' is a hex digit in the range of [0-9a-f], 4 is the UUID version, and N is one of 8, 9, a, or b. -And yes, there is a 4 (UUID version 4) and variants 0x8, 0x9, 0xa and +And yes, there is a 4 (UUID version 4) and the variants 0x8, 0x9, 0xa and 0xb in there.

    @@ -1001,40 +1000,27 @@ Your xz compressed tarball MUST contain, at a minimum

    • -Makefile +prog.c

    • -prog.c +Makefile

    • remarks.md

    • -.info.json +.auth.json

    • -.auth.json +.info.json

    -The .info.json is generated by the mkiocccentry(1) tool. If not, and it is -not valid JSON or it does not pass the chkentry(1) tool, your submission -WILL BE rejected! If you do use mkiocccentry(1) and it fails to pass -chkentry(1) then you might wish to report it as a bug at the mkiocccentry -issues -page. -

    -

    -The .auth.json is generated by the mkiocccentry(1) tool. If not, and it is -not valid JSON or it does not pass the chkentry(1) tool, your submission -WILL BE rejected! If you do use mkiocccentry(1) and it fails to pass -chkentry(1) then you might wish to report it as a bug at the mkiocccentry -issues -page. +prog.c is of course your submission program.

    The Makefile MUST be a non-empty file in GNU -Makefile form. See the +Makefile format. See the Makefile section in the guidelines, the FAQ on “submission Makefile” @@ -1043,7 +1029,7 @@ FAQ on “Makefile compatibility” for help.

    -The remarks.md MUST be a non-empty file in markdown form +The remarks.md MUST be a non-empty file in markdown format (mkiocccentry(1) only checks the file size but if you do not have any text in it you still risk violating this rule). See also Rule 18 and our @@ -1057,13 +1043,40 @@ See also the markdown synta and the CommonMark Spec.

    -The xz compressed tarball file MUST be less than or equal to 3999971 octets in size. +The .auth.json file is created by mkiocccentry(1) and it holds information +about the author(s) of the submission. It will ONLY be looked at if your +submission wins but it MUST still be valid according to chkentry(1). +

    +

    +The .info.json file is created by mkiocccentry(1) and it holds information +about the submission itself. It also MUST be valid according to +chkentry(1). +

    +

    +For the complete mkiocccentry(1) process, see the +FAQ on the “mkiocccentry process. +

    +

    +The tool performs a lot of checks, both directly and indirectly, and if it or +any other tool detects ANY problem, you are HIGHLY encouraged to fix it +and try again. +

    +

    +If you do use mkiocccentry(1) and you run into a problem, you might see the +FAQ on “how to ask a question about the IOCCC rules, guidelines and +tools”. +If you believe you have encountered a bug, feel free to open a bug report at the +mkiocccentry repo issues +page. +

    +

    +The xz compressed tarball file MUST be <= 3999971 octets in size.

    When your submission’s xz compressed tarball is uncompressed, -the total size of your submission: the sum of the size of the program, -hints, comments, build and info files MUST be less than or equal -to 28314624 octets (27651K) in size. +the total size of your submission (the sum of the size of the program, +hints, comments, build and info files) MUST be <= +28314624 octets (27651K) in size.

    Your submission’s xz compressed tarball MUST pass the txzchk(1) test. See @@ -1101,7 +1114,7 @@ Be <= 38 characters in length.

  • NOT contain a path component of: . (that is, with the exception of files generated by mkiocccentry(1) itself, it must have -NO .). +NO . an NO dot file).

  • NOT contain a path component of: .. (that is, @@ -1134,8 +1147,8 @@ entry.

  • -The chkentry(1) tool will validate these two JSON files prior to the tarball -being formed. +The chkentry(1) tool will validate these two JSON files, and do other checks +on your submission directory as well, prior to forming the tarball.

    Files and directories in your submission tarball MUST be specific @@ -1144,17 +1157,22 @@ permissions and mkiocccentry(1) does this for you. In particular: d try.alt.sh, if provided, MUST be -r-xr-xr-x (i.e. 0555) and all other files MUST be -r--r--r-- (i.e. 0444). If the files do not have these permissions, your submission WILL be rejected for violating Rule -17! If you do need different permissions, then see the +17! In addition to mkiocccentry(1) creating and copying the +directories and files with these modes, it also verifies them after the fact and +if they are not correct it is an error. +

    +

    +If you do need different permissions, then see the FAQ on “file permissions”. Also keep in mind Rule 4, Rule 5 and Rule 21.

    -The txzchk(1) tool will verify these (and other things) for you and -the chkentry(1) tool will do additional checks on the contents of the -.auth.json and .info.json files (including JSON validity). If these checks -fail it is an error and mkiocccentry(1) will fail. In this case (it fails and -you used mkiocccentry(1)) it is very possibly a bug; please report it as -a bug at the mkiocccentry issues +The txzchk(1) tool will also verify file/directory permissions (and many other +things) for you and so will chkentry(1) (along with validating the JSON files +and running semantics checks on them). If these checks fail it is an error +and mkiocccentry(1) will fail. In this case (it fails and you used +mkiocccentry(1)) it is very possibly a bug; please report it as a bug at +the mkiocccentry issues page.

    @@ -1166,7 +1184,9 @@ possible there could be a problem and this poses a big risk of violating

    The fnamchk(1), which txzchk(1) executes, will verify that the -filename is correct. +filename is correct. But if you do package your tarball manually, and you have a +mismatch in what is in the tarball and the name, txzchk(1) will flag the +discrepancy as an error and exit with non-zero.

    These checks MUST PASS. If they do not you stand a significant chance of @@ -1179,7 +1199,7 @@ having your submission rejected for violating Rule 17! The maximum number of files your submission tarball may contain, not counting the optional files (prog.alt.c, try.sh, try.alt.sh) and the mandatory files (prog.c, Makefile, remarks.md plus the mkiocccentry(1) generated -files .auth.json and .info.json) is 31. This is defined in the macro +files .auth.json and .info.json), is 31. This is defined in the macro MAX_EXTRA_FILE_COUNT in soup/limit_ioccc.h in the mkiocccentry repo. See the @@ -1191,7 +1211,8 @@ If you do include a tarball that takes your extra files count over the maximum, you MUST explain this in your remarks.md file! PLEASE do not include a tarball with extra files for a test-suite; instead mention in your remarks that you have extra files for a test-suite that can be included should your -submission win. +submission win. Of course if you don’t need that many files for a test-suite you +are more than welcome to include those files in your submission.

    If you need to extract a tarball by some Makefile, or perhaps the program @@ -1199,13 +1220,14 @@ itself, then make clobber MUST remove everything t created!

    -Tarballs MUST only create files and directories under them. They may -NOT contain absolute paths (paths that start with /)! txzchk only checks -the submission tarball so you must verify these details yourself. +Tarballs MUST only create files and directories under the submission +directory. They may NOT contain absolute paths (paths that start with /)! +txzchk only checks the submission tarball so you must verify these details +yourself.

    -Make SURE your tarball does not reveal who you are! The mkiocccentry(1) -tool uses the v7 format. For instance you might try: +IMPORTANT REMINDER: MAKE SURE your tarball does not reveal who you are! +The mkiocccentry(1) tool uses the v7 format. For instance you might try:

        tar --format=v7 -cJf foo.txz directory

    @@ -1232,16 +1254,18 @@ for more help on ensuring you do have the most up to date release.

    We recommend that you run make and then install the tools (and man pages) via -make install (as root or using sudo(1)) to help you run these tools from your -submission’s directory. The make install will install in /usr/local. -However, you do not have to install them, but in that case you’ll have to run it -from the toolkit’s directory or use the correct options to specify the path to -the necessary tools, and also specify the path to your files. +make install (as root or using sudo(1)) to help you run these tools from +your submission’s directory (or any other directory). The make install will +install in /usr/local. However, you do not have to install them, but in +that case you’ll have to run it from the toolkit’s directory or use the correct +options to specify the path to the necessary tools, and also specify the path to +your files.

    -These tools will link in the jparse(3) library; chkentry(1) uses the parser -to validate the JSON but the other tools -use parts of the library as well. +These tools will link in the jparse(3) library and the dbg library and the +dyn_array library; chkentry(1) uses the JSON parser (jparse) to validate +and parse the JSON but the other tools use +parts of the jparse utility functions as well.

    If you run into a problem with one or more of these tools, PLEASE report it @@ -1253,10 +1277,10 @@ FAQ on “mkiocccentry repo bugs”.

    At the risk of stating the obvious: submissions that violate Rule -17 will be rejected, so be sure to use the latest release of the +17 WILL BE REJECTED, so BE SURE to use the latest release of the mkiocccentry repo, to form and test your submission’s xz compressed tarball. Do NOT assume you have the most -recent release without pulling or downloading via GitHub and make sure you +recent release without pulling or downloading via GitHub and do MAKE SURE you do this AFTER the contest status has changed to open.

    diff --git a/next/rules.md b/next/rules.md index 17a93dac5..9ddea0871 100644 --- a/next/rules.md +++ b/next/rules.md @@ -15,8 +15,8 @@ See our FAQ on "[rules, guidelines, tools feedback](../faq.html#feedback)" as well as our FAQ on "[about asking questions](../faq.html#question)" -about these rules. You might also find the FAQ in general useful, especially the -FAQ on "[how to enter the IOCCC](../quick-start.html#enter)". +about these rules. You might also find the FAQ in general useful, as well as the +[quick start guide](../quick-start.html) and [how to register](register.html). # The IOCCC is pending @@ -50,15 +50,13 @@ Jump to: [top](#)
    - -

    -These [IOCCC rules](rules.html) are version **28.24 2025-02-12**. +These [IOCCC rules](rules.html) are version **28.25 2025-02-26**.

    -The markdown form of these rules -is available for download. +The markdown form of these rules is +available for download.

    **IMPORTANT**: Be sure to read the [IOCCC guidelines](guidelines.html). @@ -603,7 +601,7 @@ super-user, special owner, special group, etc.) are still **HIGHLY DISCOURAGED**. We do not guarantee these functions will behave as you expect on our test platforms. If your program needs special permissions you **MUST** document this fact, and explain why -it is needed in your submissions `remarks.md` file. +it is needed in your submission's `remarks.md` file. Jump to: [top](#) @@ -757,11 +755,7 @@ Jump to: [top](#)

    Each submission **MUST** be in the form of a xz compressed tarball. The xz compressed tarball filename must be of the form: -

    - -``` - ^submit.username-slot_num.[1-9][0-9]{9,}.txz$ -``` +`^submit.username-slot_num.[1-9][0-9]{9,}.txz$`.

    ... where _`username`_ is your IOCCC registration username **in the form of a @@ -775,7 +769,7 @@ details), and where _`slot_num`_ is a single decimal digit integer In particular, `username` is in the form of: `xxxxxxxx-xxxx-4xxx-Nxxx-xxxxxxxxxxxx` where `'x'` is a hex digit in the range of `[0-9a-f]`, 4 is the UUID version, and `N` is one of `8`, `9`, `a`, or `b`. -And yes, there is a 4 (UUID version 4) and variants `0x8`, `0x9`, `0xa` and +And yes, there is a 4 (UUID version 4) and the variants `0x8`, `0x9`, `0xa` and `0xb` in there.

    @@ -783,33 +777,19 @@ And yes, there is a 4 (UUID version 4) and variants `0x8`, `0x9`, `0xa` and Your xz compressed tarball **MUST** contain, **at a minimum**, the following files:

    -*

    `Makefile`

    *

    `prog.c`

    +*

    `Makefile`

    *

    `remarks.md`

    -*

    `.info.json`

    *

    `.auth.json`

    +*

    `.info.json`

    -The `.info.json` is generated by the `mkiocccentry(1)` tool. If not, and it is -not valid JSON or it does not pass the `chkentry(1)` tool, your submission -**WILL BE** rejected! If you do use `mkiocccentry(1)` and it fails to pass -`chkentry(1)` then you might wish to [report it as a bug at the mkiocccentry -issues -page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). -

    - -

    -The `.auth.json` is generated by the `mkiocccentry(1)` tool. If not, and it is -not valid JSON or it does not pass the `chkentry(1)` tool, your submission -**WILL BE** rejected! If you do use `mkiocccentry(1)` and it fails to pass -`chkentry(1)` then you might wish to [report it as a bug at the mkiocccentry -issues -page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). +`prog.c` is of course your submission program.

    The `Makefile` **MUST** be a **non**-empty file in **[GNU -Makefile](https://www.gnu.org/software/make/manual/make.html)** form. See the +Makefile](https://www.gnu.org/software/make/manual/make.html)** format. See the [Makefile section in the guidelines](guidelines.html#makefile), the FAQ on "[submission Makefile](../faq.html#submission_makefiles)" @@ -819,7 +799,7 @@ for help.

    -The `remarks.md` **MUST** be a **non**-empty file in markdown form +The `remarks.md` **MUST** be a **non**-empty file in markdown format (`mkiocccentry(1)` only checks the file size but if you do not have any text in it you still risk violating this rule). See also [Rule 18](#rule18) and our @@ -835,14 +815,47 @@ and the [CommonMark Spec](https://spec.commonmark.org/current/).

    -The xz compressed tarball file **MUST** be less than or equal to **3999971** octets in size. +The `.auth.json` file is created by `mkiocccentry(1)` and it holds information +about the author(s) of the submission. It will **ONLY** be looked at if your +submission wins but it **MUST** still be valid according to `chkentry(1)`. +

    + +

    +The `.info.json` file is created by `mkiocccentry(1)` and it holds information +about the submission itself. It also **MUST** be valid according to +`chkentry(1)`. +

    + + +

    +For the complete `mkiocccentry(1)` process, see the +FAQ on the "[mkiocccentry process](../faq.html#mkiocccentry_process). +

    + +

    +The tool performs a lot of checks, both directly and indirectly, and if it or +any other tool detects **ANY** problem, you are **HIGHLY** encouraged to fix it +and try again. +

    + +

    +If you do use `mkiocccentry(1)` and you run into a problem, you might see the +FAQ on "[how to ask a question about the IOCCC rules, guidelines and +tools](../faq.html#questions)". +If you believe you have encountered a bug, feel free to open a bug report at the +[mkiocccentry repo issues +page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E). +

    + +

    +The xz compressed tarball file **MUST** be <= **3999971** octets in size.

    When your submission's xz compressed tarball is uncompressed, -the total size of your submission: the sum of the size of the program, -hints, comments, build and info files **MUST** be less than or equal -to **28314624** octets (**27651K**) in size. +the total size of your submission (the sum of the size of the program, +hints, comments, build and info files) **MUST** be <= +**28314624** octets (**27651K**) in size.

    @@ -881,7 +894,7 @@ Filenames in your entry (that is, not including the files generated by the *

    **NOT** have a leading **`/`**.

    *

    **NOT** contain a path component of: **`.`** (that is, with the exception of files generated by `mkiocccentry(1)` itself, it must have -**NO** **`.`**).

    +**NO** **`.`** an **NO** dot file).

    *

    **NOT** contain a path component of: **`..`** (that is, **NO** **`..`**).

    *

    Match the regular expression @@ -901,8 +914,8 @@ authors (that will only be looked at if the submission wins).

    entry.

    -The `chkentry(1)` tool will validate these two JSON files _prior to_ the tarball -being formed. +The `chkentry(1)` tool will validate these two JSON files, and do other checks +on your submission directory as well, _prior to_ forming the tarball.

    @@ -912,18 +925,24 @@ permissions and `mkiocccentry(1)` does this for you. In particular: directories `try.alt.sh`, if provided, **MUST** be `-r-xr-xr-x` (i.e. `0555`) and all other files **MUST** be `-r--r--r--` (i.e. `0444`). If the files do not have these permissions, your submission **WILL** be rejected for violating [Rule -17](#rule17)! If you do need different permissions, then see the +17](#rule17)! In addition to `mkiocccentry(1)` creating and copying the +directories and files with these modes, it also verifies them after the fact and +if they are not correct it is an **error**. +

    + +

    +If you do need different permissions, then see the FAQ on "[file permissions](../faq.html#file_perms)". Also keep in mind [Rule 4](#rule4), [Rule 5](#rule5) and [Rule 21](#rule21).

    -The `txzchk(1)` tool will verify these (and other things) for you and -the `chkentry(1)` tool will do additional checks on the contents of the -`.auth.json` and `.info.json` files (including JSON validity). If these checks -fail it is an error and `mkiocccentry(1)` will fail. In this case (it fails and -you used `mkiocccentry(1)`) it is very **possibly** a bug; please [report it as -a bug at the mkiocccentry issues +The `txzchk(1)` tool will also verify file/directory permissions (and many other +things) for you and so will `chkentry(1)` (along with validating the JSON files +and running semantics checks on them). If these checks fail it is an **error** +and `mkiocccentry(1)` will fail. In this case (it fails and you used +`mkiocccentry(1)`) it is very **possibly** a bug; please [report it as a bug at +the mkiocccentry issues page](https://github.com/ioccc-src/mkiocccentry/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D+%3Ctitle%3E).

    @@ -937,7 +956,9 @@ possible there could be a problem and this poses a big risk of violating [Rule

    The `fnamchk(1)`, which `txzchk(1)` executes, will verify that the -filename is correct. +filename is correct. But if you do package your tarball manually, and you have a +mismatch in what is in the tarball and the name, `txzchk(1)` will flag the +discrepancy as an error and exit with non-zero.

    @@ -953,7 +974,7 @@ having your submission rejected for violating [Rule 17](#rule17)! The maximum number of files your submission tarball may contain, not counting the optional files (`prog.alt.c`, `try.sh`, `try.alt.sh`) and the mandatory files (`prog.c`, `Makefile`, `remarks.md` plus the `mkiocccentry(1)` generated -files `.auth.json` and `.info.json`) is 31. This is defined in the macro +files `.auth.json` and `.info.json`), is 31. This is defined in the macro `MAX_EXTRA_FILE_COUNT` in [soup/limit_ioccc.h](https://github.com/ioccc-src/mkiocccentry/blob/master/soup/limit_ioccc.h) in the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry). See the @@ -966,7 +987,8 @@ If you do include a tarball that takes your extra files count over the maximum, you **MUST** explain this in your `remarks.md` file! **PLEASE** do not include a tarball with extra files for a test-suite; instead mention in your remarks that you have extra files for a test-suite that can be included should your -submission win. +submission win. Of course if you don't need that many files for a test-suite you +are more than welcome to include those files in your submission.

    @@ -976,14 +998,15 @@ created!

    -Tarballs **MUST** only create files and directories _under them_. They may -**NOT** contain absolute paths (paths that start with `/`)! `txzchk` only checks -the submission tarball so you must verify these details yourself. +Tarballs **MUST** only create files and directories _under_ the submission +directory. They may **NOT** contain absolute paths (paths that start with `/`)! +`txzchk` only checks the submission tarball so you must verify these details +yourself.

    -Make **SURE** your tarball does not reveal who you are! The `mkiocccentry(1)` -tool uses the v7 format. For instance you might try: +**IMPORTANT REMINDER**: **MAKE SURE** your tarball does not reveal who you are! +The `mkiocccentry(1)` tool uses the v7 format. For instance you might try:

    ``` @@ -1019,17 +1042,19 @@ for more help on ensuring you do have the most up to date release.

    We recommend that you run `make` and then install the tools (and man pages) via -`make install` (as root or using `sudo(1)`) to help you run these tools from your -submission's directory. The `make install` will install in `/usr/local`. -However, **you do not have** to install them, but in that case you'll have to run it -from the toolkit's directory or use the correct options to specify the path to -the necessary tools, and also specify the path to your files. +`make install` (as root or using `sudo(1)`) to help you run these tools from +your submission's directory (or any other directory). The `make install` will +install in `/usr/local`. However, **you do not have** to install them, but in +that case you'll have to run it from the toolkit's directory or use the correct +options to specify the path to the necessary tools, and also specify the path to +your files.

    -These tools will link in the `jparse(3)` library; `chkentry(1)` uses the parser -to validate the [JSON](https://www.json.org/json-en.html) but the other tools -use parts of the library as well. +These tools will link in the `jparse(3)` library and the `dbg` library and the +`dyn_array` library; `chkentry(1)` uses the JSON parser (`jparse`) to validate +and parse the [JSON](https://www.json.org/json-en.html) but the other tools use +parts of the `jparse` utility functions as well.

    @@ -1042,10 +1067,10 @@ FAQ on "[mkiocccentry repo bugs](../faq.html#mkiocccentry_bugs)".

    At the risk of stating the obvious: submissions that violate [Rule -17](#rule17) **will be rejected**, so **be sure** to use the latest release of the +17](#rule17) **WILL BE REJECTED**, so **BE SURE** to use the latest release of the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry), to form and test your submission's xz compressed tarball. Do **NOT** assume you have the most -recent release without pulling or downloading via GitHub and **make sure** you +recent release without pulling or downloading via GitHub and do **MAKE SURE** you do this **AFTER** the [contest status](../status.html) has changed to [open](../status.html#open).

    diff --git a/quick-start.html b/quick-start.html index ff688bd6f..93d20b63c 100644 --- a/quick-start.html +++ b/quick-start.html @@ -540,16 +540,17 @@ However, installing it will make it easier for you as you can run it from your submission’s directory. See the FAQ on “installing mkiocccentry” at the mkiocccentry repo.

    -

    However, an IMPORTANT NOTE: if you run the program outside the repo -directory (specifying the absolute or relative path to the tool) and you -have not installed the tools then you will have to specify the options for the -tools that are required like chkentry(1), txzchk(1) and fnamchk(1). But -even if you have installed them but some tools are out of date (in the install -path) it will cause problems. Additionally, if you do not have the most recent -version when submitting a tarball it will be rejected for not having the right -versions of the tools. This is why you MUST make sure you have the most -recent version of all the tools and you either run it from the repo directory -itself OR you install them (make install as via sudo or as root).

    +

    IMPORTANT NOTE: if you run the program outside the repo directory +(specifying the absolute or relative path to the tool) and you have not +installed the tools then you will have to specify the options for the tools that +are required like chkentry(1), txzchk(1) and fnamchk(1). But even if you +have installed them but some tools are out of date (in the install path) it will +cause problems. Additionally, if you do not have the most recent version when +submitting a tarball it will be rejected for not having the right versions of +the tools. This is why you MUST make sure you have the most recent version +of all the tools and you either run it from the repo directory itself OR you +install them (make install as via sudo or as root). We recommend you install +the tools but if you wish to run it from the repo directory you may.

    If the mkiocccentry tool indicates that there is a problem with your submission, especially if it identifies a Rule 2, or any other rule, related problem, you are strongly encouraged to revise and diff --git a/quick-start.md b/quick-start.md index 0ba5b7f3e..1cdac2008 100644 --- a/quick-start.md +++ b/quick-start.md @@ -164,16 +164,17 @@ submission's directory. See the FAQ on "**[installing mkiocccentry](https://github.com/ioccc-src/mkiocccentry/blob/master/FAQ.md#install)**" at the mkiocccentry repo. -However, an **IMPORTANT NOTE**: if you run the program outside the repo -directory (specifying the absolute or relative path to the tool) and you -have not installed the tools then you will have to specify the options for the -tools that are required like `chkentry(1)`, `txzchk(1)` and `fnamchk(1)`. But -even if you have installed them but some tools are out of date (in the install -path) it will cause problems. Additionally, if you do not have the most recent -version when submitting a tarball it will be rejected for not having the right -versions of the tools. This is why you **MUST** make sure you have the most -recent version of all the tools and you either run it from the repo directory -itself OR you install them (`make install` as via `sudo` or as root). +**IMPORTANT NOTE**: if you run the program outside the repo directory +(specifying the absolute or relative path to the tool) and you have not +installed the tools then you will have to specify the options for the tools that +are required like `chkentry(1)`, `txzchk(1)` and `fnamchk(1)`. But even if you +have installed them but some tools are out of date (in the install path) it will +cause problems. Additionally, if you do not have the most recent version when +submitting a tarball it will be rejected for not having the right versions of +the tools. This is why you **MUST** make sure you have the most recent version +of all the tools and you either run it from the repo directory itself OR you +install them (`make install` as via `sudo` or as root). We recommend you install +the tools but if you wish to run it from the repo directory you may. If the `mkiocccentry` tool indicates that there is a problem with your submission, especially if it identifies a [Rule 2](next/rules.html#rule2), or